Sass中使用&符号生成body.boxed选择器编译报错问题咨询
Sass父选择器
&使用问题:如何生成body.boxed选择器? 嘿,我来帮你理清这个问题,你遇到的报错和结果不符合预期,核心是对Sass里&这个父选择器的作用逻辑理解错了。
为什么你的写法会报错/不符合预期?
你写的代码:
.boxed { body& { } }
这里的&代表的是当前嵌套层级的父选择器,也就是.boxed。Sass的嵌套规则是,内部选择器会自动和父选择器组合成后代选择器,所以这段代码会被解析成:
.boxed body.boxed { /* 样式 */ }
这显然不是你想要的body.boxed,而且部分Sass版本对这种“把&放在其他选择器后面”的写法会有语法校验,直接抛出错误。
正确的实现方式
要得到body.boxed这个目标选择器,有两种常用的正确写法:
写法1:直观嵌套(推荐)
把body作为父选择器,用&拼接.boxed类,这是最符合Sass嵌套逻辑的写法:
body { &.boxed { /* 这里写你的样式 */ } }
编译后直接得到:
body.boxed { /* 你的样式 */ }
写法2:用@at-root跳出嵌套(适合必须从.boxed出发的场景)
如果你因为某种需求必须先定义.boxed,可以用@at-root规则让内部选择器脱离父选择器的嵌套关系:
.boxed { @at-root body& { /* 这里写你的样式 */ } }
@at-root会让body&脱离.boxed的嵌套,直接解析为body.boxed,生成你想要的CSS。
小提示
记住&的核心是完全继承当前父选择器的完整字符串,它的位置决定了最终选择器的结构:
&.child→ 父选择器带.child类.parent &→ 父选择器作为.parent的后代body&→body拼接父选择器字符串(需要配合@at-root才能脱离原嵌套)
内容的提问来源于stack exchange,提问作者Morad Hamdy
相关产品推荐
相关产品推荐

