美文网首页
BEM 命名法

BEM 命名法

作者: jasmine_6aa1 | 来源:发表于2020-04-24 16:27 被阅读0次

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

1,为什么要用 BEM 命名法

  • 样式隔离, 避免css样式污染
  • 代码更易覆盖
  • 代码更易读

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{}
  • block代表更高级别的抽象或组件
  • block__element代表 block的后代,用于形成一个完整的block的整体
  • block--modifier代表block的不同状态或不同版本
常用规范

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
常用的元素名
  • 表单元素 :form form-item input select radio checkbox switch rate datePicker
  • 导航元素:nav subnav menu tab
  • 提示: alert message messageBox notification
  • 数据展示: table process tree pagiantion
  • 其他: button icon

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>

相关文章

  • 简单好用的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命名方法论之一:BEM 官方简介

    【译】前端BEM命名方法论之二:BEM中的重要概念【译】前端BEM命名方法论之三:命名惯例 Yandex 发明 B...

网友评论

      本文标题:BEM 命名法

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