我想在@each:中使用变量值来创建不同状态的类。 但是SASS不使用值,而是将其放在变量名中。
具有以下SASS语法:
$success: green;
$warning: yellow;
$danger: red;
$information: steelblue;
@mixin theme ($color) {
&:checked {
background: $color;
}
@each $theme in success, warning, danger, information {
.checkbox--#{$theme} {
@include theme($theme);
}
}
mixin不会使用$ warning值,而是会创建
color: warning
我该如何解决?
答案 0 :(得分:3)
SCSS中没有动态变量名,但是您可以改用Map:
$success: green;
$warning: yellow;
$danger: red;
$information: steelblue;
@mixin theme ($color) {
&:checked {
background: $color;
}
}
$themes: (
success $success,
warning $warning,
danger $danger,
information $information
);
@each $theme, $color in $themes {
.checkbox-#{$theme} {
@include theme($color);
}
}
仅出于完整性考虑,如果您使用的是不支持它们的非常老的SCSS版本,则可以使用嵌套的Lists和nth
函数。
...
$themes: (
(success $success),
(warning $warning),
(danger $danger),
(information $information)
);
@each $pair in $themes {
$theme: nth($pair, 1);
$color: nth($pair, 2);
.checkbox-#{$theme} {
@include theme($color);
}
}
两者都会产生相同的输出:
.checkbox-success:checked {
background: green;
}
.checkbox-warning:checked {
background: yellow;
}
.checkbox-danger:checked {
background: red;
}
.checkbox-information:checked {
background: steelblue;
}