So strukturieren Sie BEM-Modifikatoren mit verschachtelten Elementen in SASS

8

SASS + BEM ist fast immer eine Übereinstimmung im Himmel, aber ein gemeinsamer Kampf von mir ist es zu verstehen, wie man BEM-Modifikatoren am besten für ein Element definiert, das seine Kind-Elemente beeinflusst, während die Eltern-Selektoren von SASS verwendet werden.

Ich habe die folgende Komponente in SASS unter Verwendung der BEM-Stilsyntax definiert:

%Vor%

Das funktioniert gut wegen der Elternauswahl von SASS. Es hält relevanten Code organisiert und in sich abgeschlossen.

Wenn ich jedoch einen Modifizierer hinzufügen muss, der ein untergeordnetes Element mithilfe eines übergeordneten Selektors ändert, fällt die Idee schnell auseinander:

%Vor%

Nein. Es erzeugt dies:

%Vor%

Es wäre sinnvoller, diesen Selektor irgendwie zu bekommen:

%Vor%

Der Grund dafür ist, dass Sie einfach einen Modifikator zum Element auf oberster Ebene hinzufügen können und sich auf alle oder alle untergeordneten Elemente auswirken.

Ich habe ein paar Ansätze ausprobiert:

Verwenden Sie zwei Strukturen

%Vor%

Dies funktioniert (besonders in dieser vereinfachten Demonstration), aber in einem komplizierteren Satz von Komponenten mit vielen Modifikatoren kann dies ein potentieller Schmerz sein, um Fehler frei zu halten und zu bewahren. Außerdem wäre es schön, wenn möglich weiterhin SASS-Elternselektoren zu verwenden.

Verwenden Sie eine Variable für das Element

%Vor%

Das funktioniert gut. Aber es scheint irgendwie albern zu sein, das Element als Variable definieren zu müssen. Vielleicht ist es die einzige Möglichkeit, dies zu tun ... Ich bin mir nicht sicher. Gibt es bessere Möglichkeiten, dies zu strukturieren?

    
Jake Wilson 09.06.2017, 06:05
quelle

6 Antworten

3

Warum tust du das nicht einfach?

%Vor%     
Wouter G. 27.07.2017 15:11
quelle
1

Sie können die Modifikatoren in einer anderen Struktur aufteilen, aber im .card Selektor wie folgt verschachtelt werden:

%Vor%

Was wiederum das bewirkt:

%Vor%

Ich denke, das ist ein fast perfekter Weg, obwohl es nicht perfekt verschachtelt ist Ich hoffe, das war eine Hilfe!

    
David Genger 17.08.2017 13:57
quelle
1

Ich habe gerade einen viel besseren Weg gefunden, dies mit Sass zu erreichen, indem ich eine Variable benutze, um den Wert des Elternselektors zu speichern. Sie können ihn auf jeder Verschachtelungsebene verwenden!

Zum Beispiel speichere ich den Selektor .card in der Variablen $ this und benutze ihn wie folgt #{$this}

Also dieser Code

%Vor%

wird nach

kompiliert %Vor%

Diese Antwort wurde von diesem Artikel auf css-tricks inspiriert. Vielen Dank an Sergey Kovalenko

    
David Genger 08.09.2017 15:54
quelle
0

Ihre Lösung sieht ziemlich gut aus, aber Sie können auch @ at-root ausprobieren.

    
tadatuta 09.06.2017 07:23
quelle
0
%Vor%

Sie können das gewünschte Ergebnis folgendermaßen erreichen:

%Vor%     
Andrey Ponomarenko 14.06.2017 11:22
quelle
0

Wenn ich das gleiche Thema durchgehe, habe ich eine Bibliothek namens Superbem erstellt, bei der es sich im Grunde um eine Reihe von SCSS-Mixins handelt, die Ihnen beim Schreiben helfen BEM deklarativer Weg. Schau es dir an:

%Vor%

Gibt Ihnen:

%Vor%

Ich hoffe, Sie finden das nützlich!

    
pittkost 16.10.2017 20:11
quelle

Tags und Links