Sass结合父母使用&符号(&)与基本元素
我在Sass中嵌套有问题。 说我有以下的HTML:
<p href="#" class="item">Text</p> <p href="#" class="item">Text</p> <a href="#" class="item">Link</a>
当我尝试嵌套我的样式在下面我得到一个编译错误:
.item { color: black; a& { color:blue; } }
当它是同一元素的一部分时,如何在父select器之前引用基本元素?
正如Kumar指出的那样 ,自从Sass 3.3.0.rc.1 (Maptastic Maple)
以来,这已经成为可能。
@ at-root指令会导致一个或多个规则在文档的根目录发出,而不是嵌套在它们的父select器之下。
我们可以将@at-root
指令和插值#{}
结合起来以达到预期的结果。
上海社会科学院
.item { color: black; @at-root { a#{&} { color:blue; } } } // Can also be written like this. .item { color: black; @at-root a#{&} { color:blue; } }
输出CSS
.item { color: black; } a.item { color: blue; }
如果你打算把最接近的select器扩展到链上, @at-root
only方法将不能解决问题。 举个例子:
#id > .element { @at-root div#{&} { color: blue; } }
将编译为:
div#id > .element { color: blue; }
如果您需要将标签join.element
而不是#id
, #id
?
Sass中有一个名为selector-unify()
的函数来解决这个问题。 使用@at-root
可以定位.element
。
#id > .element { @at-root #{selector-unify(&, div)} { color: blue; } }
将编译为:
#id > div.element { color: blue; }
对于初学者来说,没有使用selector&的 sass语法。 如果你打算做这样的事情,你需要在select器和&符号之间有一个空格。 例如:
.item { .helper & { } } // compiles to: .helper .item { }
使用&号的另一种方式可能是你(不正确)寻找的东西:
.item { &.helper { } } // compiles to: .item.helper { }
这允许你用其他类,ID,伪select器等扩展select器。不幸的是,对于你的情况,这理论上会编译成类似.itema的东西,这显然不起作用。
你可能只是想重新思考你如何写你的CSS。 是否有可以使用的父元素?
<div class="item"> <p>text</p> <p>text</p> <a href="#">a link</a> </div>
这样,你可以很容易地写下你的SASS:
.item { p { // paragraph styles here } a { // anchor styles here } }
(注意:你应该看看你的html,你在混合单引号和双引号,并把href属性放在p标签上。)
此function登陆了最新版本的Sass 3.3.0.rc.1
(Maptastic Maple)
您需要使用的两个紧密相关的function是脚本化的&
,您可以在嵌套的样式中插入以引用父元素,而@at-root
指令将紧随其后的select器或css块置于根(在输出的CSS中不会有父项)
有关更多详细信息,请参阅此Github问题