美文网首页
CSS命名——BEM

CSS命名——BEM

作者: 依然还是或者其他 | 来源:发表于2020-11-18 22:57 被阅读0次

前言

详情见参考,下面的只是部分摘要

BEM是什么

BEM是一种CSS命名规范。
BEM代表 “块(block),元素(element),修饰符(modifier)”。
在选择器中,由以下三种符号来表示扩展的关系:

-   中划线 :仅作为连字符使用,表示某个块或者某个子元素的多单词之间的连接记号。
__  双下划线:双下划线用来连接块和块的子元素
_   单下划线:单下划线用来描述一个块或者块的子元素的一种状态 

type-block__element_modifier

Block

块是设计或布局的一部分,它有具体且唯一地意义 ,要么是语义上的要么是视觉上的。

一个块的正式(实际上是半正式的)定义有下面三个基本原则:

  • CSS中只能使用类名(不能是ID)。
  • 每一个块名应该有一个命名空间(前缀)
  • 每一条CSS规则必须属于一个块。

Element

块中的子元素是块的子元素,
并且子元素的子元素在 bem 里也被认为是块的直接子元素
一个块中元素的类名必须用父级块的名称作为前缀。

.list{}
.list .item{}

.list{}
.list__item{}

Modifier

一个“修饰符”可以理解为一个块的特定状态,标识着它持有一个特定的属性。

.list{}
.list.select{}
.list .item{}
.list .item.active{}
  
.list{}
.list_select{}
.list__item{}
.list__item_active{}

误区

使用BEM的常见误区

  • 孙子选择器
<div class="card">
        <div class="card__header">
            
            <h2 class="card__header__title">Title text here</h2>
        
        </div>
        <div class="card__body">
            
            <img class="card__body__img" src="some-img.png">
            
            <p class="card__body__text">Lorem ipsum dolor sit amet, consectetur</p>
            <p class="card__body__text">Adipiscing elit.
                <a href="/somelink.html" class="card__body__text__link">Pellentesque amet</a>
            </p>
    
        </div>
</div>

这种嵌套很容易造成类目越来越累赘,基于之前子元素的子元素在 bem 里也被认为是块的直接子元素的原则。
应该这样

<div class="card">
        <div class="card__header">
            
            <h2 class="card__title">Title text here</h2>
        
        </div>
        <div class="card__body">
            
            <img class="card__img" src="some-img.png">
            
            <p class="card__text">Lorem ipsum dolor sit amet, consectetur</p>
            <p class="card__text">Adipiscing elit.
                <a href="/somelink.html" class="card__link">Pellentesque amet</a>
            </p>
    
        </div>
</div>
  • 跨组件间的样式问题
  • 是用修饰符还是新组件
  • 对于wrappers / containers应该怎么处理
  • 关于状态

优点

组件之间的完全解耦,不会造成命名空间的污染,如:.mod-xxx ul li 的写法带来的潜在的嵌套风险。

参考

1.CSS BEM 书写规范
2.BEM Methodology In CSS: A Quick Start Guide
BEM Visually Explained
3.Battling BEM – 5 common problems and how to avoid them

相关文章

  • 简单好用的CSS命名规范

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

  • SCSS 基础语法

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

  • web前端经验分享

    CSS技巧 解决css样式污染方案 命名约定 BEM命名规范 使用CSS Modules css实现新手引导效果 ...

  • CSS BEM 命名简介

    BEM是一种CSS命名规范,旨在使用严格的命名约定,使得CSS类的命名更加透明,能直接了解上下文含义。BEM分别代...

  • CSS命名方法之BEM

    转自BEM —— 源自Yandex的CSS 命名方法论 BEM的意思就是块(block)、元素(element)、...

  • CSS命名方法之BEM

    转自BEM —— 源自Yandex的CSS 命名方法论 BEM的意思就是块(block)、元素(element)、...

  • CSS命名——BEM

    前言 详情见参考,下面的只是部分摘要 BEM是什么 BEM是一种CSS命名规范。BEM代表 “块(block),元...

  • Scss

    Scss 1.BEM命名方式 BEM是css的一种命名方式。B既Block,模块的意思;E既Element,元素的...

  • CSS架构(命名组织方式)札记

    css组织命名方式(CSS架构)主要有OOCSS,BEM,SMACSS,MVCSS等。关于css framewor...

  • css-BEM OOCSS

    BEM是什么? 关于BEM 简单来说 理解成css的命名一种规范。 B E M分别指:Block Element ...

网友评论

      本文标题:CSS命名——BEM

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