美文网首页
BEM命名法,其实很简单

BEM命名法,其实很简单

作者: microkof | 来源:发表于2016-10-19 11:27 被阅读707次

参考文献:http://www.ibm.com/developerworks/cn/web/1512_chengfu_bem/
http://www.oschina.net/translate/thoughtful-css-architecture

BEM的本质是一个css类名命名方案。由于CSS没有作用域的概念,也不像SCSS那样可以写出层级关系,所以,如果有两个类名,比如.nav和li,虽然你知道li在.nav中,你也可以写出.nav li {}这样的选择器,但是很多情况下我们还是希望给li专门设一个类名,这时候BEM就是一个好的方案。

BEM规范详解

所谓BEM,其实是三个单词的缩写:Block(模块)、Element(元素)、Modifier(修饰符)。

1.Block(模块)

一个模块是一个独立的实体部分,就像应用的一块“积木”。一个模块既可以是简单的也可以是复合的(包含其他模块)。

命名规范:

模块名称可以由拉丁字母,数字和短划线组成。 如:.block、.form

比如搜索框和按钮组成的组件就是一个模块。

我认为的命名的最佳实践是:.xxoo,也就是用两个词组成的词组来描述这个块,比如.propertyeditor或.languageswitcher,前者意思是属性编辑器,后者是语言切换器。强行用一个词来描述的话,你会发现词根本不够用。

B和M可以直接连用,跳过E,这是允许的。

2.Element(元素)

一个元素是块的一部分,具有某种功能。元素是依赖上下文的:它们只有处于他们应该属于的块的上下文中时才是有意义的。

比如,.form的input元素和button元素都是元素。

命名规范:

元素名称可以包含拉丁字母,数字,破折号和下划线。 CSS类名写成块名称加破折号加上元素名称:.block-elem,其中elem可以是直接元素标签名,也是表义的名称。

我认为的最佳实践是:比如对话框内有一个确定按钮,这个确定按钮的类名可以是:.alert-modal__button--done,其中done是修饰符,表示是“表确定的那个按钮”。修饰符在下面讲。

3.Modifier(修饰符)

修饰符是块或元素上的标志。这些标志用来形容元素或块的外观、行为或状态。例如button、a标签上的active状态。

命名规范:

修饰符名称可以包含拉丁字母,数字,破折号和下划线。 CSS类名写成模块或元素的名称加上两个破折号:.block--mod或.block__elem--mod和.block--color-black。

示例:

.form__submit--disabled

我认为的最佳实践是:比如对话框内有一个确定按钮,这个确定按钮的类名可以是:.alertmodal__button--done,其中done是修饰符,表示是“表确定的那个按钮”。

小结:

从上面的实例中,我们不难发现BEM有以下特点:

  • 复杂的类名极大减少了类名重复的可能性。
  • 每个块里的一类元素的样式对应一个类名。如此,一类元素对应一个类名,减少了子选择器或后代选择器的使用,提升了css的性能。
  • css类名的命名更加语义化,更容易读懂。
  • 可复用性高,例如我们可以把主题类名.form__theme--xmas替换,即可对应替换为别的主题样式。

灵活运用:

BEM的精华是B、E、M,中间用几个连接符都是小事,一般单个中划线就可以了,但是,最常见的连接符是bb__ee--mm的形式,尽量遵守这种形式,当你遇到其他人写的规范的css文档的时候,可以降低阅读难度。

相关文章

  • BEM命名法,其实很简单

    参考文献:http://www.ibm.com/developerworks/cn/web/1512_chengf...

  • 简单好用的CSS命名规范

    CSS命名规范 BEM命名法 BEM(Block, Element, Modifier)是由Yandex团队提出的...

  • SCSS 基础语法

    1. 选择器扩展 1. BEM 命名法(CSS 命名) BEM 全称为 Block Element Modifi...

  • BEM命名法

    简述 试想在一个html页面中引入各种外部css样式文件,如果外部的样式的命名不能确定,那么就不能保证该html页...

  • BEM 命名法

    【前言】BEM 是一个简单又非常有用的命名约定。让前端代码更容易阅读和理解,更容易协作,更容易控制,更加健壮和明确...

  • SCSS初探-2

    SCSS选择器扩展 了解BEM 命名法 Bem 是块(Block)、元素(Element)、修饰符(Modifie...

  • Sass 基础用法(下)

    BEM命名法 Block Element Modifier Block: 主要名字 -> user-card。 E...

  • BEM CSS命名法

    BEM是Block(块) Element(元素) Modifier(修饰器)的简称。 一个独立的(语义上或视觉上)...

  • 【译】前端BEM命名方法论之二:BEM中的重要概念

    【译】前端BEM命名方法论之一:BEM 官方简介文档【译】前端BEM命名方法论之三:命名惯例 重要概念 Block...

  • 【译】前端BEM命名方法论之三:命名惯例

    【译】前端BEM命名方法论之一:BEM 官方简介文档【译】前端BEM命名方法论之二:BEM中的重要概念 使用 BE...

网友评论

      本文标题:BEM命名法,其实很简单

      本文链接:https://www.haomeiwen.com/subject/vbvwyttx.html