在@each 中使用变量值

Use variable value in @each

我想在@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

我该如何解决?

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 and the 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;
}