2013-05-09 3 views
3

Я часто использую mixins для хранения кусков кода. Например:SCSS: передать несколько классов в mixin

@mixin ui-spot-badges($ui-spot-badges: ui-spot-badges) { 

    .#{$ui-spot-badges} { 
    position:relative; 
    @content; 

    &:after { 
    content:""; 
position:absolute; 
background:red; 
    } 
    } 

    } 

    @include ui-spot-badges(myclass); 

Как передать более одного класса в mixin. Например.

@include ui-spot-badges(myclass, myclass2); 

получить

.myclass, myclass2 { 
    position:relative; 
} 

.myclass:after, .myclass2:after { 
    content:""; 
position:absolute; 
background:red; 
} 

ответ

5

Наиболее эффективный способ сделать это было бы передать свой список селекторов в виде строки:

@include ui-spot-badges('.myclass, .myclass2'); 

В противном случае, вы должны сделать некоторые зацикливание для правильной генерации селектора.

@mixin ui-spot-badges($badges...) { 
    $selectors:(); 
    @each $b in $badges { 
     $selectors: append($selectors, unquote('.#{$b}'), comma); 
    } 

    #{$selectors} { 
     position:relative; 
     @content; 

     &:after { 
      content:""; 
      position:absolute; 
      background:red; 
     } 
    } 
} 

@include ui-spot-badges(a, b); 

Выход:

.a, .b { 
    position: relative; 
} 
.a:after, .b:after { 
    content: ""; 
    position: absolute; 
    background: red; 
} 
+0

Не могли бы вы объяснить '...' 'в @mixin Ui-спот-значки ($ значки ...)'? Это необходимо? –

+0

http://sass-lang.com/documentation/file.SASS_REFERENCE.html#variable_arguments – cimmanon

Смежные вопросы