BEM

BEM 代表 Blocks, Elements and Modifiers。這是一種最初由俄羅斯科技公司 Yandex 構思的方法,但在美國和西歐的網路開發者中也獲得了相當大的吸引力。

同樣的意思是,BEM 方法論將 HTML 和 CSS 程式碼元件化為三種型別的元件:

  • 塊: 獨立實體,它們本身就是有意義的

    例如 headercontainermenucheckboxtextbox

  • 元素: 塊的一部分,沒有獨立的含義,並且在語義上與它們的塊相關聯。

    例如 menu itemlist itemcheckbox captionheader title

  • 修飾符: 塊或元素上的標誌,用於更改外觀或行為

    例如 disabledhighlightedcheckedfixedsize bigcolor yellow

BEM 的目標是保持優化 CSS 程式碼的可讀性,可維護性和靈活性。實現這一目標的方法是應用以下規則。

  • 塊樣式永遠不依賴於頁面上的其他元素
  • 塊應該有一個簡單的短名稱,並避免使用 _- 字元
  • 在樣式元素時,使用格式 blockname__elementname 的選擇器
  • 樣式修飾符時,請使用格式為 blockname--modifiernameblockname__elementname--modifiername 的選擇器
  • 具有修飾符的元素或塊應繼承其正在修改的塊或元素中的所有內容,但修飾符應修改的屬性除外

程式碼示例

如果將 BEM 應用於表單元素,則 CSS 選擇器應如下所示:

.form { }                       // Block
.form--theme-xmas { }           // Block + modifier
.form--simple { }               // Block + modifier
.form__input { }                // Block > element
.form__submit { }               // Block > element
.form__submit--disabled { }     // Block > element + modifier

相應的 HTML 應如下所示:

<form class="form form--theme-xmas form--simple">
  <input class="form__input" type="text" />
  <input class="form__submit form__submit--disabled" type="submit" />
</form>