css - 无法将 CSS 自定义属性(又名 CSS 变量)与 SASS @if 语句一起使用
问题描述
我正在尝试将一些 CSS 自定义属性传递给 SASS Mixin。当直接应用于我想要的样式时,我可以使用这些变量。但是当我尝试在 If 语句中使用变量时,它不起作用。
混合示例:
@mixin bg-color($hue, $status) {
background: hsl($hue, 50%, 50%); // $hue works as expected
@if $status == 'danger' { // doesn't work!
color: 'red';
} @else if $status == 'warning' { // doesn't work!
color: 'orange';
} @else { // always enters the else branch
color: 'black';
}
}
CSS:
:root {
--hue: 195;
--status: 'default';
}
.demo {
@include bg-color(var(---hue), var(---status));
}
如果我手动将状态值添加到 mixin,它可以工作:
.demo {
@include bg-color(var(---hue), 'danger');
}
知道可能是什么问题吗?
更新:正如@temani-afif 提到的,这种方法是不可能的,因为在使用 CSS 变量之前编译了 SASS 文件。
解决方案
如果你有一些文件,你在其中导入所有 SCSS 文件,这取决于先导入哪些文件,然后再导入哪些文件。
确保你需要被 VS 读取的那个是第一个。
例如,我需要先读取我的变量,所以它必须是第一个,否则,我的代码读取 mixin,但还不知道什么是“$blue”。
推荐阅读
- php - 如何将记录与当年的特定月份和月份下的输出相匹配?
- c++11 - 错误:限定名称引用了变量模板的特化
- flutter - 如何设置团队内切换按钮的值?
- mysql - Sql Select 不存在记录?
- javascript - jquery数组与子字符串比较并且不区分大小写
- python - 为什么我这么简单的线性回归不起作用
- c++ - c++ 方差和标准差
- javascript - 发送发布请求时,请求的资源上不存在“Access-Control-Allow-Origin”标头
- flutter - 在 Flutter 中获取两个同时屏幕交互的时间和位置信息
- json - 如何在 Laravel AuthServiceProvider 中返回 JSON?