using hash with scss

2019-02-04 17:25发布

hi i have many variables with colors. so want do something like this:

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

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

for print:

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

How can ido it?

thanks

标签: hash sass
2条回答
beautiful°
2楼-- · 2019-02-04 17:54

As sad as it is, you can't. SASS will only parse your file once, so even if you do something like this :

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

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

You will end up with the following CSS :

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

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

Your best bet is probably to change your code for something like :

.bl {
  [...]

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

And then use something like class="bl culture" instead of class="bl_culture".

查看更多
\"骚年 ilove
3楼-- · 2019-02-04 17:54

SASS 3.3 UPDATE
With some new functionality from sass 3.3 you can choose your variable names and do away with the annoying nth()

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

ORIGINAL
It's a bit of a pain but you can get by with a list and then for looping through that.
For example:

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

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

Having pre defined these color vars elsewhere you get:

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

.color-green{
   background-color:#00FF00
}
查看更多
登录 后发表回答