Используя хэш с scss

Привет, у меня есть много переменных с цветами. поэтому хотите сделать что-то вроде этого:

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

Как это может быть?

спасибо

Ответ 1

Как ни печально, вы не можете. 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".

Ответ 2

SASS 3.3 UPDATE
С некоторыми новыми функциями от sass 3.3 вы можете выбрать имена переменных и избавиться от раздражающего nth()

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

ОРИГИНАЛ
Это немного боль, но вы можете обойтись со списком, а затем пройти через это.
Например:

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