2013-04-18 8 views
10

bei diesem Beispiel Werfen Sie einen Blick:SASS/SCSS Objektschlüssel Wert Schleife

@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"; 
    } 
} 

Ich will die Dinge so trocken wie möglich machen, so möchte ich wissen, ob folgendes möglich ist, und wenn ja, wie?

@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; 
    } 
    } 
} 

Antwort

23

Sass unterstützt derzeit keine Zuordnungen. Sie müssen für jetzt mit Listen von Listen leben.

$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

ich die Dokumentation von SASS hassen, warum kann ich nicht eine einfache Schleife wie diese finden, Danke trotzdem, viel Wertschätzung. – onlineracoon

+1

Wenn Sie etwas programmatischeres wollen, schauen Sie sich http://learnboost.github.io/stylus/ an. –

+0

Perfektes Beispiel – lorless

53

Sass 3.3 (auf 2014.03.07 veröffentlicht) können Sie jetzt Karten verwenden:

@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

Dies sollte die akzeptierte Antwort für jetzt sein. Haben wir eine gute Möglichkeit, eine akzeptierte Antwort zu aktualisieren oder zu überprüfen, da die akzeptierte Antwort veraltet ist? – nXqd

+0

Sie können die Antwort aktualisieren, um sie hervorzuheben, und der OP kann die akzeptierte Antwort noch ändern, wenn er möchte. – zessx

+0

Dies sollte die beste Antwort sein! – Tony