在@each

时间:2018-07-05 02:02:34

标签: css sass scss-mixins

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

我该如何解决?

1 个答案:

答案 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版本,则可以使用嵌套的Listsnth函数。

...

$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;
}