SCSS不支持属性嵌套,如font: { size: 14px; }会报语法错误;仅允许选择器嵌套,属性缩进被视为非法;Less和Stylus虽支持但逻辑不同;应使用@mixin替代;/和括号内逗号属白名单特例。
SCSS语法不支持“属性嵌套”,比如写 font: { size: 14px; weight: bold; } 会直接报错:Invalid CSS after "font:"。这不是编译逻辑出错,而是语法非法——Sass(SCSS)只允许选择器嵌套,不允许把CSS属性当选择器来缩进。
Less和Stylus确实支持属性嵌套,但它们的解析逻辑不同,容易误迁移到SCSS中:
font: { size: 14px; } 编译成 font-size: 14px;,但它要求父属性必须是合法CSS简写(如font、border、background),否则报错color 解析成新选择器而非子属性postcss-nested 插件模拟,但它默认不启用属性嵌套,且和Sass语义不兼容常见错误是把属性名当类名写:
.btn { font: { size: 14px; } } → Sass报错,因为 font: 后面没跟 { 或声明,而是直接换行.btn { font-size: { line-height: 1.5; } } → 语法错误,font-size 是值域属性,不能有子块@mixin:@mixin text-base { font-family: sans-serif; font-size: 14px; },再 @include text-base
别删掉这些写法——它们不是属性嵌套,而是Sass允许的特例:
font: 14px/1.5 sans-serif → / 在 font 属性中是白名单分隔符,安全grid-template-columns: repeat(3, 1fr) / auto → / 在 grid 中也是白名单,不触发除法clip-path: polygon(0 0, 100% 0, 100% 100%) → 括号内逗号分隔,不是嵌套真正要警惕的,是那些缩进后带冒号却没被Sass识别为选择器的地方——它不会给你警告,只会让整段规则消失,连CSS都不输出。