2

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

我该如何解决?

4

1 回答 1

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,您可以使用嵌套列表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;
}
于 2018-07-05T02:19:09.890 回答