在@each循环中使用sass变量
我正在尝试为我们在企业标识中使用的所有颜色创建一个小概述。我们所有的颜色都已经在_settings-colors.scss中定义,我需要这一点的CSS的唯一原因是库的颜色需要列出。在@each循环中使用sass变量
我现在有如下:
$colors-brand: color-brand, color-brand-40, color-brand-60, color-brand-70;
.prfx-color {
display: block;
height: 5rem;
width: 100%;
@each $color in $colors-brand {
&--#{$color} {
background-color: #{'$'+$color};
&::after {
content: '$'+$color;
}
}
}
}
这些颜色,品牌变量中,我包括在该文件SCSS另一个文件设置。
上面的代码输出这样的:
.prfx-color {
display: block;
height: 5rem;
width: 100%;
}
.prfx-color--color-brand {
background: $color-brand;
}
.prfx-color--color-brand::after {
content: "$color-brand";
} [...etc]
但是之后我什么,是这样的:
.prfx-color--color-brand {
background: #00ff11; // don't worry, brand is not actually this color
}
我遇到的问题是,$色品牌变量ISN” t被解释为sass变量,但它是一个字面值。我需要这个变量引用的#hheexx!
到目前为止我发现的所有解决方案都是使用两个列表或一个键值对。在我的情况下,这些变量已经设置了一次,我想要一个解决方案,如果颜色改变,我不想手动编辑库。
这是在所有possibe,或我是否太贪婪在这里?
我意识到我过于复杂。你不需要任何额外的功能,因为@每个被设计为与地图一起工作并迭代多个值。
$cool: blue;
$mad: red;
$colors: (
cool: $cool,
mad: $mad
);
.prfx-color {
@each $key, $val in $colors {
&--#{$key} {
background-color: $val;
&::after { content: "$#{$key}"; }
}
}
}
您可以使用地图。 这是你的一个sassmeister游乐场。
$cool: blue;
$mad: red;
$colors: (
cool: $cool,
mad: $mad
);
.prfx-color {
@each $color in map-keys($colors) {
&--#{$color} {
background-color: map-get($colors, $color);
&::after { content: "$#{$color}"; }
}
}
}
那。是。真棒。谢谢! 我已经将这个解决方案铲除到“不得不重新定义所有颜色”的堆上,但这实际上效果非常好!你知道为什么Angular以这种方式解析变量,而不是使用我早期的技术?你能解释一下吗? – Kablam
很高兴帮助。这不是Angular,而是SASS。你试图编译SASS变量名,但是SASS并没有这样做。它只编译变量值。 所以我做了一个映射,其中的键名与变量名相同,没有$。 @each遍历映射键来创建类名,map-get使用键来提取值,并且为内容插入关键字(而不是变量)(在内容字符串中预先放置一个$所以它和变量名一样 查看SASS函数:http://sass-lang.com/documentation/Sass/Script/Functions.html – Ari
你说得对,对不起。项目,并得到了条件混合起来,我的坏! – Kablam
这是如此漂亮,它是美丽的。谢谢:) – Kablam