SCSS代码中&-link写法的&-符号具体代表什么含义
SCSS中
&-写法的实际作用 这是SCSS嵌套语法里最常用的父选择器复用逻辑,编译时的规则非常直白,没有特殊机制:
&是SCSS专属的父选择器占位符,编译阶段会直接把当前位置的&替换成代码块所属的全部上层选择器拼接文本- 你示例里的
&-link写法,就是把&替换为外层的.btn,通过短横线直接拼接成完整的选择器.btn-link,最终生成的是和.btn平级的独立类选择器,不是嵌套的后代选择器
你给出的示例代码,最终会编译为如下原生CSS(SCSS变量按通用取值展示):
.btn { border: 0; font-size: 14px; font-weight: bold; } .btn-link { background-color: #ffffff; color: #ff7a00; }
这个写法的实用价值
- 统一维护组件前缀:比如按钮组件的所有变体(主按钮、危险按钮、大尺寸按钮、禁用状态)都可以在同一个
.btn嵌套块里用&-xxx的写法定义,哪天要把组件类名从.btn改成.action-btn,只需要修改最外层的选择器,所有变体类名会自动跟着变化,不用全局逐行替换 - 减少重复书写:不用每次写变体类的时候都重复敲一遍
.btn前缀,写嵌套的时候就能把同组件的所有样式聚合到同一个代码块里,找代码的时候不用分散在文件不同位置
新手容易踩的坑
- 别漏了拼接的连接符:如果写的时候少了短横线,把
&-link写成&link,编译后会变成连在一起的.btnlink,不是预期的.btn-link选择器 - 别和纯嵌套的规则搞混:如果在
.btn块里直接写span {},编译后会生成后代选择器.btn span {};但只要用到&做拼接,就是纯文本替换的逻辑,不会自动生成嵌套的层级关系 - 别拼接出无效选择器:比如在
.card块里写&-title是合理的.card-title,但如果拼接的时候和伪类写混了,比如&:link要注意位置,不然可能生成不符合预期的选择器
内容的提问来源于stack exchange,提问作者Vanmeeganathan P K
相关产品推荐
相关产品推荐

