Sass将变量名称插入字符串

时间:2016-08-15 20:47:28

标签: sass interpolation mixins

我们提供了许多颜色与特定的悬停状态颜色相关联:

$red: #cb333b;
$red-hover: #fe666e;
$brown: #544742;
$brown-hover: #877a75;
etc.

由于所有颜色的格式都是相同的,所以我希望编写一个带有颜色变量名的mixin,然后将-hover连接到结尾。这是我的第一次尝试:

@mixin button_colorizor($color) {
  border-color: $color;
  color: $color;
  &:hover {
    color: #{$color}-hover;
    border-color: #{$color}-hover;
  }
}

但这样做会输出这样的颜色:#f1735f-hover。当我这样做时:color: #{$color+-hover};

1 个答案:

答案 0 :(得分:5)

您可以创建颜色地图。并按名称获取颜色值。

Demo在sassmeister上。

$colors: (
  red: #cb333b,
  red-hover: #fe666e,
  brown: #544742,
  brown-hover: #877a75
);

@mixin button_colorizor($color) {
  color: map-get($colors, $color);
  border-color: map-get($colors, $color);

  &:hover {
    color: map-get($colors, $color + '-hover');
    border-color: map-get($colors, $color + '-hover');
  }
}

a {
  @include button_colorizor(red);
}

span {
  @include button_colorizor(brown);
}

此代码编译为css:

a {
  color: #cb333b;
  border-color: #cb333b;
}
a:hover {
  color: #fe666e;
  border-color: #fe666e;
}

span {
  color: #544742;
  border-color: #544742;
}
span:hover {
  color: #877a75;
  border-color: #877a75;
}