使用hash与scss

时间:2011-06-15 07:48:05

标签: hash sass

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

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

 @each $i in culture, party {
.bl_#{$i}{
   border-left-color: #{$#{$i}};
}
}

用于打印:

bl_culture{border-left-color:#00cc66}
bl_party{border-left-color:#cc9900}

怎么能这样呢?

感谢

2 个答案:

答案 0 :(得分:21)

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

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

<强> ORIGINAL
这有点痛苦,但你可以通过列表然后循环来实现 例如:

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

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

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

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

.color-green{
   background-color:#00FF00
}

答案 1 :(得分:5)

尽管很难过,但你不能。 SASS只会解析你的文件一次,所以即使你做了这样的事情:

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

@each $i in culture, party {
  .bl_#{$i}{
     border-left-color: #{'$' + $i};
  }
}

您最终会得到以下CSS:

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

.bl_party {
  border-left-color: $party; }

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

.bl {
  [...]

  &.culture {
    border-left-color: #00CC66
  }
  &.party {
    border-left-color: #CC9900
  }
}

然后使用类似class="bl culture"而不是class="bl_culture"的内容。