BEM 命名法

2020-04-24  本文已影响0人  jasmine_6aa1

【前言】
BEM 是一个简单又非常有用的命名约定。让前端代码更容易阅读和理解,更容易协作,更容易控制,更加健壮和明确,而且更加严密.这里主要介绍了CSS BEM 命名规范简介

1,为什么要用 BEM 命名法

css 样式污染的根本原因,是因为css没有作用域。BEM通过特殊的命名方式,给css创造一个“作用域”,就能有效避免css样式全局污染。例如上面的例子,给输入框命名
普通的命名法, 会作用于所有class='content' 的后代元素。 本来你只想给当前元素加样式,结果不小心影响了其他元素,这就是样式污染。
BEM命名法,只会作用于class='content-input__inner'的元素, 达到样式隔离。 不会影响其他元素。

# 普通
.content input {}

# BEM命名法
.content-input__inner {}

2,什么是 BEM 命名法?

BEM其实是块(block)、元素(element)、修饰符(modifier)的缩写,利用不同的块,功能以及样式来给元素命名。这三个部分使用__与--连接(这里用两个而不是一个是为了留下用于块的命名)。命名约定的模式如下:

.block{}
.block__element{}
.block--modifier{}
常用规范

1,block element modifier包含多个单词时, 用一个中划线-链接,例如

el-dropdown-menuel-button

2,block和element用双下划线__链接, 例如

表单项 form__item
导航项 menu__item

3,element和modifier用双中划线--链接, 如表示按钮的不同状态,例如

默认:el-button--default
成功:el-button--success

4,用js控制样式时,css命名用is-开头,例如

is-success、is-failed、is-disabled
常用的元素名

3. 如何用好BEM命名法

案例:
<div class="box">
    <div class="box__header">
        <h2 class="box__title">标题</h2>
    </div>
    <div class="box__body">
        <div class="box__content">
            内容
        </div>
        <button class="button button--state-danger">
            Danger button
        </button>
    </div>
</div>
常见的优化

避免 .blockel1el2

// bad
<div class='block'>
    <div class='block__elem1'>
        <div class='block__elem1__elem2'>
            <div class='block__elem1__elem2__elem3'></div>
        </div>
    </div>
</div>

// good
<div class='block'>
    <div class='block__elem1'>
       <div class='block__elem2'>
            <div class='block__elem3'></div>
        </div>
    </div>
</div>
modify 影响元素的写法

避免⽤ block-name–-modifier-name__element-name 的写法

// bad
<div class="block block--xmas">
    <button class="block__btn block--xmas__btn"></button>
</div>

// good
<div class="block block--xmas">
    <button class="block__btn"></button>
</div>

.block--xmas .block__button {
/* Jingle bells, jingle bells, jingle all the way.*/
}
组件下的组件

避免⽤ block-name__block2-name 的写法

// bad
<div class='block'>
    <div class='block__block2'>
        <div class='block__block2__elem'>
        </div>
    </div>
</div>

// good
<div class='block'>
    <div class='block2 block2--modifier'>
        <div class='block2__elem'>
    </div>
</div>
上一篇 下一篇

猜你喜欢

热点阅读