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

SCSS变量引用CSS变量赋值后无法正常返回对应值如何解决?

问题根本原因

SCSS是预编译语言,所有@if这类逻辑都会在打包/编译阶段提前执行,而var(--xxx)是CSS原生的运行时语法,只有浏览器加载样式的时候才会解析它的实际值,SCSS编译阶段根本拿不到var(--dl-mode)对应的真实值,你拿这个表达式和字符串black做相等判断,永远都会走else分支,根本不是第二个变量拿不到值的问题。
你觉得第一个SCSS变量正常,只是因为你没有在SCSS层对$intro-img做任何逻辑处理,直接把它丢给CSS属性用,编译后输出的就是var(--intro-img-url),浏览器会自动解析这个CSS变量的值,所以看起来功能正常。

解决方案

方案1:判断逻辑放SCSS层

如果你的模式切换不需要在前端运行时动态修改,直接用SCSS变量控制即可:

// 直接定义SCSS变量做判断
$dl-mode: black;

@if $dl-mode == black {
  :root {
    --dl-mode: #{$dl-mode};
    --dominant1-wmode-color: #030712;
    --dominant1-bmode-color: #ffffff;
  }
} @else {
  :root {
    --dl-mode: #{$dl-mode};
    --dominant1-wmode-color: green;
    --dominant1-bmode-color: #030712;
  }
}

方案2:判断逻辑放CSS层

如果你需要运行时动态切换主题(比如JS控制切换深色/浅色模式),就把判断逻辑改成CSS原生写法:

:root {
  --intro-img-url: url("../images/pexels-los-muertos-crew-7487374.jpg");
  --dl-mode: black;
}

$intro-img: var(--intro-img-url);

/* 用属性选择器做模式判断,配合JS修改根元素的data-mode属性即可动态切换 */
:root[data-mode="black"] {
  --dominant1-wmode-color: #030712;
  --dominant1-bmode-color: #ffffff;
}
:root[data-mode="white"] {
  --dominant1-wmode-color: green;
  --dominant1-bmode-color: #030712;
}

内容的提问来源于stack exchange,提问作者Ahmed Ragab

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:57:02