CSS命名何去何从?——BEM实践

栏目: CSS · 发布时间: 6年前

内容简介:没有太重视“命名”这个似乎不在技术范畴之内的东西,随着项目更新迭代变得庞大,维护起来欲哭无泪。尤其是在CSS中,一个高效的命名规范到底有多重要?之前看到过一种丑丑的命名("__"和"--")不以为然,这正是本文探讨的主题——BEM命名规范。BEM(Block Element Modifier)是由Yandex(俄罗斯的网络服务门户之一)团队提出的一种前端命名规范,这里讲的BEM风格是经过改良的(没有具体阅读过相关文章,不探讨有关如何改良的细节):

  没有太重视“命名”这个似乎不在技术范畴之内的东西,随着项目更新迭代变得庞大,维护起来欲哭无泪。尤其是在CSS中,一个高效的命名规范到底有多重要?

  • 代码结构更加清晰有意义
  • 维护变得简单
  • 同事看代码的时候不骂街了

  之前看到过一种丑丑的命名("__"和"--")不以为然,这正是本文探讨的主题——BEM命名规范。

1. BEM简介

  BEM(Block Element Modifier)是由Yandex(俄罗斯的网络服务门户之一)团队提出的一种前端命名规范,这里讲的BEM风格是经过改良的(没有具体阅读过相关文章,不探讨有关如何改良的细节):

  • Block:块
  • Element:元素——块的组成部分
  • Modifier:修饰符——表示一种形态/状态
.block {}
.block__element {}
.block--modifier
复制代码

  举一个很好理解的例子:

人            #Block
人__手          #Element
人__手--小手      #Modifier
人__手--大手      #Modifier
人__脚          #Element

人--男人        #Modifier
人--男人__手      #Element
人--男人__脚      #Element

人--女人        #Modifier
人--女人__手      #Element
人--女人__脚      #Element
复制代码

2. BEM命名 vs 传统命名

  好与不好,代码为证:

2.1 BEM命名

<!-- app.vue -->
<aside class="aside">
  <!-- 显示/隐藏侧边栏 -->
  <img :class="['aside__toggle--show', {'aside__img--hide': isHide}]" />
  <ul class="aside__menu">
    <li class="aside__menu__item">首页</li>
  </ul>
</aside>
复制代码
/*css*/
.aside {}
.aside__toggle--show {}
.aside__toggle--hide {}
.aside__menu {}
.aside__menu__item {}
复制代码
/*scss或less*/
.aside {
  &__toggle {
    &--show {}
    &--hide {}
  }

  &__menu {
    &__item {}
  }
}
复制代码

2.2 传统命名

<!-- app.vue -->
<aside class="aside">
  <!-- 显示/隐藏侧边栏 -->
  <img :class="['toggle', {'hide': isHide}]" />
  <ul class="menu">
    <li class="item">首页</li>
  </ul>
</aside>
复制代码
.aside {}
.toggle {}
.menu {}
.item {}
复制代码

  当然也有一些针对传统命名的优化,尽管看起来清晰很多,但意图的表达仍然有些不明确

<!-- app.vue -->
<aside class="aside">
  <!-- 显示/隐藏侧边栏 -->
  <img :class="['aside-toggle-show', {'aside-toggle-hide': isHide}]" />
  <ul class="aside-menu">
    <li class="aside-menu-item">首页</li>
  </ul>
</aside>
复制代码
/*css*/
.aside {}
.aside-toggle-show {}
.aside-toggle-hide {}
.aside-menu {}
.aside-menu-item {}
复制代码
/*scss或less*/
.aside {
  &-toggle {
    &-show {}
    &-hide {}
  }
  &-menu {
    &-item {}
  }
}
复制代码

通过对比可以看到,BEM命名使得代码结构清晰多了,并且能把代码的意图表达得很明确。

3. 正确地使用BEM

  举一个例子,你的手里拿着一本书,但你不能说这本书是人的一部分。这就好比在代码中,有一个元素刚好某个块中,但它本身并不属于这个块,按照BEM原则,此元素的命名不该包含进去:

<nav class="nav">
  <ul class="nav__menu">
    <li class="nav__menu__item">首页</li>
  </ul>
  <!-- 显示用户名 -->
  <span class="username">XXX 你好!</span>
</nav>
复制代码

以上所述就是小编给大家介绍的《CSS命名何去何从?——BEM实践》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

算法笔记

算法笔记

胡凡、曾磊 / 机械工业出版社 / 2016-7 / 65

这是一本零基础就能读懂的算法书籍,读者不需要因为自己没有语言基础而畏惧。书籍的第2章便是一个C语言的入门教程,内容非常易懂,并且十分实用,阅读完这章就可以对本书需要的C语言基础有一个较好的掌握。 本书已经覆盖了大部分基础经典算法,不仅可以作为考研机试和PAT的学习教材,对其他的一些算法考试(例如CCF的CSP考试)或者考研初试的数据结构科目的学习和理解也很有帮助,甚至仅仅想学习经典算法的读者......一起来看看 《算法笔记》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试