# BEM
2 min read
Table of Contents
BEM 是 CSS 一种命名规范,BEM 是由 Block, Element, Modifier 组合成的缩写。
BEM 其实是由 Yandex 公司出品的,但是却产生了两份规范,一份是由 Yandex 的规范 bem.info,一个是由 getbem 规范的 getbem,产生的原因可以参考 getbem: Project goals
Yandex 的命名规范:block-name__element-name_modifier-name
getbem 的命名规则:block-name__element-name—modifier-name
Block
块可以内嵌,为了保证复用块的时候:
- 块描述的是目的,而不是状态。如 menu,button 而不是 red,big。
- 块不应该受环境影响,意味着你不应该设置额外的 margin 或者指定位置。
- 使用 BEM 时不应该使用 CSS 标签或者 ID 选择器。
<header class="header"> <div class="logo"></div> <form class="search-for"></form></header>Element
元素不可单独使用的块的复合部分,元素可以相互内嵌。元素应该也是描述的是目的,而不是状态。
元素总是属于块的一部分,所以我们不能定义类似 block__elem1__elem2 的元素名称。
<form class="search-form"> <div class="search-form__content"> <input class="search-form__input" />
<button class="search-form__button">Search</button> </div></form>Modifier
由于两份规范的不同,我们采用了应用更广的 getbem 的规范.
修饰符定义了元素或块的外观,状态或者行为,如 size—s,disabled,focused 或者 derections—left-top.
修饰符有两种命名模式:
- block-name—modifier-name
- block-name__element-name—modifier-name
<form class="search-form search-form--focused"> <button class="search-form__button search-form--disabled">Search</button> <form></form></form>