【发布时间】:2019-04-11 15:26:38
【问题描述】:
我正在尝试在 SCSS 中设置一个配色方案,我可以在其中拥有以下 HTML:
<div class="swatch" data-bg="green">...</div>
我有一个这样定义的 SCSS 混合:
@function color($key: 'black') {
@return map-get($colors, $key);
}
所以,如果我通过 background-color: color('green'),它会查看 $colors: ( ... ) 映射,查看 'green': #009900, 并返回 background-color: #009900; 作为 CSS。
当我尝试将data-bg 属性值传递给color() SCSS mixin 时,问题就出现了,如下所示:
.swatch[data-bg] {
background-color: color(attr(data-bg));
}
这不起作用。我会期望它来解析值:
color(attr(data-bg)) → color('green') → #009900
但是,SCSS 甚至根本不会在 CSS 中呈现 background-color 行。
我有一个 Codepen,您可以在其中看到我想要实现的目标。这里是“棕色”色样:https://codepen.io/rbrum/pen/axZLxw
任何帮助将不胜感激。
【问题讨论】:
-
SASS 是预编译的,所以你不能使用运行时变量。
-
你仍然可以使用
attr(),你只需要省略特定于SASS的color()并确保属性的内容是CSS中的有效颜色符号。 -
既然这是真的,@JamesCoyle,我想我能希望的只是一个 SASS 函数/mixin,它接受一个字符串,并用每个颜色名称调用它。例如。
@include generate-bg-color('brown');等 -
实际上,我编写了一个
@each循环,它遍历地图中的每种颜色,然后以这种方式生成背景颜色。这样,我可以只使用class="swatch green",并且在我的 SASS 中我可以将样式应用于每个颜色类。
标签: html css sass mixins scss-mixins