using hash with scss

前端 未结 2 1998
轻奢々
轻奢々 2020-12-30 05:28

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-         


        
相关标签:
2条回答
  • 2020-12-30 06:24

    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
    }
    
    0 讨论(0)
  • 2020-12-30 06:33

    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".

    0 讨论(0)
提交回复
热议问题