2017-04-21 5 views
0

Ich verwende BEM, um meine Klassennamen zu benennen, zB: .accordion, .accordion__title, .accordion__item__content.SCSS/SASS - Verwenden von BEM mit SASS und Attributen

Dafür habe ich geschaffen, um die folgende mixin:

@mixin child_el($element) { 

     &__#{$element} { 
     @content; 
     } 
    } 

Es ist sehr gut arbeiten, aber ich habe ein Problem, wenn ich auch hinzufügen müssen Attribute:

.accordion { 
    display: block; 
    @include child_el(item) { 
    &[state=true] { 
    @include child_el(content) { 
     display: block; 
    } 
    } 
} 
} 

Was ich versuche zu erreichen:

.accordion[state=true] .accordion__item { 
display: block; 
} 

Die Eltern wird als & [state = true] anstelle von .acc lesen ordion

+0

Gibt es einen Grund, warum Sie nicht den Standard verwenden können '& [state = true ] & __ item' Syntax? Es wird seit einiger Zeit unterstützt. – damd

+0

eigentlich macht das Mixin dies; Aber wie löse ich die Verschachtelung? Kannst du mir ein Beispiel dafür geben, was ich mit & – user3541631

+0

erreichen möchte? Ich fügte eine Antwort hinzu, wenn ich richtig verstanden habe, was du willst! – damd

Antwort

1

Sie können dies umschreiben ohne mixin:

.accordion { 
    display: block; 

    &[state=true] &__item { 
    display: block; 
    } 
} 

Der Ausgang CSS wird:

.accordion { 
    display: block; 
} 

.accordion[state=true] .accordion__item { 
    display: block; 
}