2016-04-27 26 views
0

Mit BEM CSS-Klasse Syntax können, sage ich mit der folgenden Klasse ein Element haben:Wie wird der Status mit BEM angegeben?

... 
<div class="purchase__module2__heading__tooltip">...</div> 
... 

können nun sagen, es ist ein Ereignis, oder etwas, wo diese „Tooltip“ aktiv oder sichtbar wird. Was ist der richtige Weg, dies mit BEM auszudrücken? Muss ich die aktuelle Klasse ersetzen, so jetzt wird es:

... 
<div class="purchase__module2__heading__tooltip--active">...</div> 
... 

oder füge ich es

... 
<div class="purchase__module2__heading__tooltip purchase__module2__heading__tooltip--active">...</div> 
... 

Oder kann ich so nur einfach etwas tun:

... 
<div class="purchase__module2__heading__tooltip active">...</div> 
... 

Ich denke, das Antwort ist # 2, aber es scheint sehr langgezogen zu sein. # 3 ist nett und einfach, aber ich kann nicht sagen, ob dies den richtigen BEM-Richtlinien entspricht oder nicht.

+0

Die tiefe Verschachtelung in BEM ist ein Zeichen dafür, dass Sie Ihre Blöcke nicht ordnungsgemäß reduziert haben. – zzzzBov

Antwort

1

Wenn Sie einen Block oder ein Element ändern, müssen Sie auch die Basisklasse hinzufügen.

Zum Beispiel

<div class="block"> 
    <div class="block__element">...</div> 
</div> 

der Block geändert haben könnte wie:

<div class="block block--modifier"> 
    <div class="block__element block--modifier__element">...</div> 
</div> 

oder das Element modifiziert:

<div class="block"> 
    <div class="block__element block__element--modifier">...</div> 
</div> 

In jedem Fall, dass Sie mehrere Klassen zu verwenden beginnen benötigen .


Mit Blick auf Ihr Beispiel:

<div class="purchase__module2__heading__tooltip"> 

Es ist klar, dass man zu tief sind nisten, sich zu verhindern, dass in der Lage, die Mehrheit des Codes wiederzuverwenden.

die Namen Gegeben Sie verwenden, ich denke, würde, dass Sie eigentlich, was haben ist:

  • ein Kauf-Modul (.purchase-module)
    • mit einer Überschrift (.purchase-module__heading)
  • ein Tooltip (.tooltip)

Das Markup könnte ungefähr so ​​aussehen:

<article class="purchase-module"> 
    <h1 class="purchase-module__heading"> 
    ...heading text... 
    <span class="tooltip">...</span> 
    </h1> 
</article> 

Beachten Sie, wie macht die Tooltip aktiv jetzt erfordert nur einen kurzen Klassenwechsel:

<span class="tooltip tooltip--active">...</span> 

, dass das Ideal mit BEM ist.

+0

Danke. Das scheint zu allgemein zu sein ... Ich hätte Angst, dass ich an anderer Stelle einen '.tooltip 'haben könnte, der völlig andere Stile als dieser Tooltip benötigt, also muss ich die Stile von' .tooltip' überschreiben. Oder würde ich einen getesteten Selektor für die Stile verwenden? Ex. '.kauf-Modul .tooltip'? –

+0

Wenn Sie Angst haben, Stile wiederzuverwenden, tun Sie es falsch. Wenn sie unterschiedliche Stile benötigen, sind sie unterschiedliche Dinge und erfordern unterschiedliche Namen. Wenn Sie BEM verwenden, sollten Sie keine Selektoren wie '.purchase-module .tooltip' verwenden. – zzzzBov

+0

@JakeWilson, denke darüber nach. Stellen Sie sich vor, Sie erstellen ein "Auto", und dann brauchen Sie ein anderes, aber es muss eine Menge Zeug tragen, und die Hälfte davon muss flach sein, um Zeug zu tragen. Sie ändern nicht "Auto", Sie erstellen einen "LKW". Für die Sachen, die geteilt werden, könntest du umgestalten, damit "Auto" und "LKW" 'Fahrzeug' verlängern. All dies kann mit einem CSS-Präprozessor durchgeführt werden. – zzzzBov

Verwandte Themen