重要的&
是更多地将其视为“父系”组合器,而不是“父级”组合器。也就是说,它将整个嵌套的选择器字符串带到该点(无论有多少层深),并充当字符串替换持有者的等价物。因此,使用您的示例的简化版本...
.container {
.column {
.one& {
width: 40px;
}
}
}
...该级别的选择器字符串是.container .column
. 这就是在 的位置“替换”的内容&
,因此当您像上面那样连接到开头时,它会附加在整个选择器字符串的开头,您最终会得到:
.one.container .column {width 40px;}
但是如果你从最后&
连接(和之间没有空格.
)那么......
.container {
.column {
&.one {
width: 40px;
}
}
}
...变成:
.container .column.one {width 40px;}
最后一个确实是您想要的班级组合,尽管与您希望的顺序不同。但是顺序对浏览器来说并不重要,.one.column
或者.column.one
是相同的,它只是意味着一个元素同时应用了两个单独的类,如下所示:
<div class="column one"></div>
<div class="one column"></div>
这两者是等价的,并且要么.one.column
或.column.one
作为选择器将选择这两个元素,因为这两个元素都有两个类。
如果顺序对你来说绝对重要(你必须让你生成的 CSS 符合你的要求),那么你需要做一些这样的重复:
.container {
.column {
...generic column code here...
}
.one {
&.column {
width: 40px;
...any other code dependent on combination of .one.column here...
}
}
}