2016-04-27 82 views
0

使用BEM CSS類語法,可以說我有下面的類的元素:如何用BEM指定狀態?

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

現在讓我們說有一個事件或者一些地方讓這個「工具提示」成爲活動或可見。用BEM表達這一點的正確方法是什麼?我所以現在取代目前的類就變成:

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

還是做我將其添加

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

或者,我可以做這樣簡單的東西:

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

我覺得答案是#2,但它似乎很抽象。 #3很好,很簡單,但我不能說這是否遵循適當的BEM指導方針。

+0

BEM中的深嵌套表示您沒有正確減少塊。 – zzzzBov

回答

1

如果您要修改塊或元素,則還必須包含基類。

例如

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

可能塊修改爲:

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

或元件修改爲:

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

在你開始需要使用多個類任一情況下。


尋找你的例子:

<div class="purchase__module2__heading__tooltip"> 

很明顯,你是嵌套太深,妨礙自己從能夠重複使用您的大部分代碼。

鑑於您在使用,我猜你確實有什麼名稱:

  • 購買模塊(.purchase-module
    • 一個標題(.purchase-module__heading
  • 工具提示(.tooltip

的標記可能看起來是這樣的:

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

注意如何使工具提示活躍現在只需要改變一個簡短類:

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

這與BEM理想。

+0

謝謝。這似乎太泛泛......我擔心我可以在其他地方有一個'.tooltip',它需要與此工具提示完全不同的樣式,所以我必須覆蓋'.tooltip'的樣式。或者我會爲樣式使用經過測試的選擇器?防爆。 '.purchase-module .tooltip'? –

+0

如果你害怕重複使用樣式,你做錯了。如果他們需要不同的風格,他們是不同的東西,需要不同的名字。如果你使用的是BEM,你不應該使用像'.purchase-module .tooltip'這樣的選擇器。 – zzzzBov

+0

@JakeWilson,想想這樣吧。想象一下,你創建一個「汽車」,然後你需要另一個,但它必須攜帶一堆東西,其中一半需要平坦來攜帶東西。你不改變'汽車',你創造一個'卡車'。對於那些共享的東西,你可能會重構,以使「汽車」和「卡車」延伸到「交通工具」。所有這些都可以使用CSS預處理器完成。 – zzzzBov