使用hash与scss

Luc*_*oli 14 hash sass

嗨,我有很多颜色变量.所以想做这样的事情:

$culture: #00CC66;
$party:#CC9900;

 @each $i in culture, party {
.bl_#{$i}{
   border-left-color: #{$#{$i}};
}
}
Run Code Online (Sandbox Code Playgroud)

用于打印:

bl_culture{border-left-color:#00cc66}
bl_party{border-left-color:#cc9900}
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

谢谢

All*_*tle 21

SASS 3.3更新
使用sass 3.3的一些新功能,您可以选择变量名称并消除烦人的问题nth()

@each $name, $color in(
    'red'   $red,
    'green' $green,
) {
    .color-#{$name} {
        background-color: $color;
    }
}
Run Code Online (Sandbox Code Playgroud)

原始
这有点痛苦,但你可以通过一个列表,然后循环通过它.
例如:

$colorList:
    "red"    $red,
    "green"  $green
;

@each $i in $colorList{
    .color-#{nth($i,1)}{
         background-color:nth($i,2);
    }
}
Run Code Online (Sandbox Code Playgroud)

在其他地方预先定义了这些颜色变量,你得到:

.color-red{
   background-color:#FF0000
}

.color-green{
   background-color:#00FF00
}
Run Code Online (Sandbox Code Playgroud)


Leo*_*Leo 6

尽管很难过,但你不能.SASS只会解析您的文件一次,所以即使您执行以下操作:

$culture: #00CC66;
$party:#CC9900;

@each $i in culture, party {
  .bl_#{$i}{
     border-left-color: #{'$' + $i};
  }
}
Run Code Online (Sandbox Code Playgroud)

您最终会得到以下CSS:

.bl_culture {
  border-left-color: $culture; }

.bl_party {
  border-left-color: $party; }
Run Code Online (Sandbox Code Playgroud)

你最好的选择可能是改变你的代码:

.bl {
  [...]

  &.culture {
    border-left-color: #00CC66
  }
  &.party {
    border-left-color: #CC9900
  }
}
Run Code Online (Sandbox Code Playgroud)

然后使用类似的东西class="bl culture"代替class="bl_culture".