2013-04-18 12 views
10

Spójrz na ten przykład:SASS/SCSS sprzeciw wartość klucza pętla

@include font-face('Entypo', font-files('entypo.woff')); 

.icon { 
    display: inline; 
    font: 400 40px/40px Entypo; 
} 

.icon-star { 
    @extend .icon; 

    &:after { 
    content: "\2605"; 
    } 
} 

.icon-lightning { 
    @extend .icon; 

    &:after { 
    content: "\26A1"; 
    } 
} 

chcę robić to możliwie suche, więc chcę wiedzieć, czy po to możliwe, a jeśli tak, to w jaki sposób?

@include font-face('Entypo', font-files('entypo.woff')); 

.icon { 
    display: inline; 
    font: 400 40px/40px Entypo; 
} 

$icons { 
    $star: "\2605"; 
    $lightning: "\26A1"; 
} 

@each $icon in $icons { 
    $key = $icon{key}; // ??? 
    $value = $icon{value}; // ??? 

    .icon-#{$key} { 
    @extend .icon; 

    &:after { 
     content: $value; 
    } 
    } 
} 

Odpowiedz

23

Sass obecnie nie obsługuje mapowań. Na razie musisz żyć z listami list.

$icons: star "\2605", lightning "\26A1"; 

@each $icon in $icons { 
    $key: nth($icon, 1); 
    $value: nth($icon, 2); 

    .icon-#{$key} { 
    @extend .icon; 

    &:after { 
     content: $value; 
    } 
    } 
} 
+0

Nienawidzę dokumentację SASS, dlaczego nie mogę znaleźć prostą pętlę tak, dzięki, tak, wiele uznania. – onlineracoon

+1

Jeśli chcesz czegoś bardziej programowego, spójrz na http://learnboost.github.io/stylus/ –

+0

Doskonały przykład: – lorless

53

Sass 3,3 (wydany na 2014/03/07) teraz pozwala na używanie mapy:

@include font-face('Entypo', font-files('entypo.woff')); 

.icon { 
    display: inline; 
    font: 400 40px/40px Entypo; 
} 

$icons: (
    star: "\2605", 
    lightning: "\26A1" 
); 

@each $key, $value in $icons { 
    .icon-#{$key} { 
    @extend .icon; 

    &:after { 
     content: $value; 
    } 
    } 
} 
+0

to powinna być na razie akceptowana odpowiedź. Czy mamy dobry sposób aktualizowania lub sprawdzania zaakceptowanej odpowiedzi, ponieważ zaakceptowana jest nieaktualna? – nXqd

+0

Możesz zaktualizować odpowiedź, aby ją podświetlić, a operacja nadal może zmienić zaakceptowaną odpowiedź, jeśli chce. – zessx

+0

To powinna być najlepsza odpowiedź! – Tony

Powiązane problemy