BEM 
Block, Element, Modifier(BEM)理论是 HTML 和 CSS 中流行的class命名约定。
 由Yandex的团队开发,其目标是帮助开发人员更好地了解给定项目中HTML和CSS之间的关系。
Block 
可以重用,相对独立的页面组件。可以任意嵌套。
html
<ul class="menu"></ul>Element 
块的组成内容,不能单独使用。块可以没有元素。
html
<ul class="menu">
  <li class="menu__item"></li>
</ul>默认的命名方式是block__element,团队协商一致后可以更改连接符号__(双下划线)。
元素与元素可以任意嵌套,但不能反映到命名上,不能命名为block__elem1__elem2。
Modifier 
定义块或元素的外观、状态或行为。
html
<ul class="menu_opened">
  <li class="menu__item_active"></li>
</ul>默认的命名方式是block__element_modifier,团队协商一致后可以更改连接符号_(下划线)。
在修饰符有不同值时,可以用key_value方式命名:block__element_key_value,例如btn_size_large。
混合 
在单个DOM元素上,可以使用不同块定义的BEM类名。实现BEM的复用、扩展。
html
<header>
  <ul class="menu header__menu">
    <li class="menu__item"></li>
  </ul>
</header>