You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何需要用#{...}转义SCSS颜色变量?求原因及文档出处

SCSS变量在CSS自定义属性中未被解析的原因及解决方法

问题场景

当在SCSS中给CSS自定义属性(:root下的--css-color)赋值SCSS变量时,会出现变量未被替换的情况:

$color-test: #123456;

.case-1 {
  color: $color-test; // 正常解析为#123456
}

:root {
  --css-color: $color-test; // 编译后仍保留$color-test字符串
}

.case-2 {
  color: var(--css-color); // 因自定义属性值无效,无法正常显示颜色
}

原因解析

SCSS对CSS原生语法的处理有明确边界:

  • 对于常规CSS属性值(比如.case-1里的color),SCSS会自动识别并替换其中的SCSS变量;
  • 但CSS自定义属性(即CSS变量)的值属于原生CSS语法范畴,SCSS默认不会主动解析其中的SCSS变量——它会把$color-test当成普通字符串保留,因为CSS自定义属性本身支持动态赋值,SCSS不想破坏原生CSS的特性。

解决方法

使用SCSS的插值语法#{$variable}强制解析变量,这样SCSS会先将变量值替换后再注入到自定义属性中:

:root {
  --css-color: #{$color-test}; // 编译后变为--css-color: #123456;
}

官方文档依据

SCSS的插值语法(Interpolation)专门用于在默认不解析SCSS变量的场景中注入变量值,包括但不限于:

  • CSS自定义属性的值
  • CSS属性名(比如#{$property}: value;)
  • 选择器(比如.#{class-name} {})
    官方文档明确说明,插值是在原生CSS语法中嵌入SCSS动态值的标准方式。

内容的提问来源于stack exchange,提问作者Christian Wolf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 14:47:22