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>