山海科技发展网

07月09日科技常识:前端BEM命名方式的思考

导读 摘要 今天小编跟大家讲解下有关前端BEM命名方式的思考 ,相信小伙伴们对这个话题应该有所关注吧,小编也收集到了有关前端BEM命名方式的思...
摘要 今天小编跟大家讲解下有关前端BEM命名方式的思考 ,相信小伙伴们对这个话题应该有所关注吧,小编也收集到了有关前端BEM命名方式的思考 的

今天小编跟大家讲解下有关前端BEM命名方式的思考 ,相信小伙伴们对这个话题应该有所关注吧,小编也收集到了有关前端BEM命名方式的思考 的相关资料,希望小伙伴们看了有所帮助。

最初的思考

思考来源于要给切图网 qietu.com 改一次版 作为前端开发服务商 我觉得应该要有自己的一款前端css框架 并且这个框架不应该只是随便写写 最好能够用在官网上 拿官网做背书 于是在研究了火狐、adobe、微软、google amp等官网以后 写了一款quickly.css响应式前端框架并且开源 并且用在了新版网站上。

问题

在写框架的时候 定义了这么一个类 .card 它可以用在很多场合。然后 .card 下面定义了几个子元素 如下:

.card-head {}.card-body{}.card-foot{}

然后.card 本身还有很多种状态 以灵活的适应不同的场合 如下

.card-border{} /*带边框的*/.card-shadow{} /* 带阴影的*/.card-colorful{} /*彩色的*/

那么实际的运用是这样的:

<div class="card card-colorful card-shadow"><div class="card-head"></div><div class="card-body"></div></div>

综上可以发现 一般人在使用的时候很难搞清楚 .card-colorful 和 .card-body 有什么区别 其实一个是对形态的定义 一个是下面的子元素 所以问题就这样产生了。有没有办法让人通过命名一眼就能辨别 哪是子元素 哪是修饰符呢 结合脑海里的知识我首先想到了BEM 。

BEM

Bem 是块(block)、元素(element)、修饰符(modifier)的简写 由 Yandex 团队提出的一种前端 css 命名方法论。

BEM 命名约定的模式是:

.block {}.block__element {}.block–modifier {}block 代表了更高级别的抽象或组件。block__element 代表 .block 的后代 用于形成一个完整的 .block 的整体。block–modifier 代表 .block 的不同状态或不同版本。

使用两个连字符和下划线而不是一个 是为了让你自己的块可以用单个连字符来界定。如:

.sub-block__element {}.sub-block–modifier {}

好了 我们在来尝试一下 之前碰到的问题 用BEM命名方式能否解决 实际quickly框架是有命名空间的以qui开头 那么结合BEM的命名方式如下:

.qui-card{}.qui-card--colorful{}.qui-card__head{}.qui-card__body{}.qui-card__foot{}

那么问题就迎刃而解了。

来源:爱蒂网