CSS 命名规范-BEM

文章目录

    • [BEM 介绍](#BEM 介绍)
    • [BEM 简单使用](#BEM 简单使用)

一般来说,解决 css 命名冲突的方案有三种:

  1. 命名约定
  2. css in js
  3. css modules

这里主要介绍的是通过命名约定这种方案,这种方式,就是提供一种命名的标准,来解决冲突

常见的这些标准有:BEM OOCSS AMCSS SMACSS 其他

BEM 介绍

基于组件方式的web开发方法,基本思想是将用户界面分成独立的模块

  1. BEM 是一套针对 css 类样式的命名方法

  2. BEM 的全称是:B lock E lement Modifier

  3. 一个完整的 BEM 类名:block__element--modifier 例如轮播图的下方的点,用于切换展示的图片,其中被选中的点可以命名为 banner__dot--selected

  4. __通常用于连接元素,--通常链接不同的形态

  5. BEM 具体代表什么呢?

  6. block【块】 代表:Block(块),独立的一个实体,独立的意义,通俗点理解就是一个页面中的一个大区域,例如前台首页的 header、banner、news、footer等等,每个页面都可以看做是多个 Block 组成,如图:

  7. element【元素】 代表:block 的一部分,比如一个卡片,卡片的头部和底部可以被命名为 card-header 和 card-footer

  8. modifier【修饰符】 代表:通常表示属性或状态,类似与一种标记同一个 block 或者 element 可以拥有多个 modifier,例如一个标签,可以用于警告,标记成功等等状态,tag_warning、tag_success

  9. 在某些项目中,如果使用 BEM,还可能会增加一个前缀,表示用途,例如:

  10. l:layout 表示这个样式用于布局

  11. c:component 表示这个样式是一个组件,即一个功能区域

  12. u:util 表示这个样式是一个通用的、工具性质的样式

  13. j:JavaScript 表示这个样式没有实际意义,专门提供给 js 获取元素使用的

  14. 在某些公共使用的组件,团队独立封装使用的,还是增加一个标识前缀,例如熟悉的 element-ui,前缀 el

BEM 简单使用

  1. 如果在命名的时候,需要使用多个单词或者拼接,可以使用 - 连接
  2. 在BEM中所有类名都是顶级类名,不提倡嵌套式,更倾向于组件化模式
  3. 以一个进度条组件为例
  1. block:前缀 + block

    html 复制代码
    <div class="jc-progress"></div>
  2. element:具体的元素

    html 复制代码
    <!-- 进度条模块 -->
    <div class="jc-progress">
        <!-- 进度条区域 -->
    	<div class="jc-progress-bar">
            <!-- 进度条外部元素 -->
            <div class="jc-progress-bar__outer">
                <!-- 进度条的内部元素 -->
            	<div class="jc-progress-bar__inner"></div>
        	</div> 
        </div>
        <!-- 进度条信息区域 -->
        <div class="jc-progress-info">
            <!-- 进度条文本 -->
        	<span class="jc-progress-info__text">30%</span>
        </div>
    </div>
  3. modifier:状态,例如进度条的颜色会根据进度改变进度条的颜色,70以内表示正常,70-90之间表示警告,超过90非常危险,那就可以定义三种状态 default、waring、danger,通过三个状态定义颜色值

    html 复制代码
    <!-- 进度条模块 -->
    <div class="jc-progress">
        <!-- 进度条区域 -->
    	<div class="jc-progress-bar">
            <!-- 进度条外部元素 -->
            <div class="jc-progress-bar__outer">
                <!-- 进度条的内部元素  状态为警告 -->
            	<div class="jc-progress-bar__inner--waring"></div>
        	</div> 
        </div>
        <!-- 进度条信息区域 -->
        <div class="jc-progress-info">
            <!-- 进度条文本 -->
        	<span class="jc-progress-info__text">80%</span>
        </div>
    </div>
相关推荐
韩曙亮21 分钟前
【Web APIs】元素滚动 scroll 系列属性 ② ( 右侧固定侧边栏 )
前端·javascript·bom·window·web apis·pageyoffset
珑墨22 分钟前
【浏览器】页面加载原理详解
前端·javascript·c++·node.js·edge浏览器
LYFlied1 小时前
在AI时代,前端开发者如何构建全栈开发视野与核心竞争力
前端·人工智能·后端·ai·全栈
用户47949283569151 小时前
我只是给Typescript提个 typo PR,为什么还要签协议?
前端·后端·开源
程序员爱钓鱼1 小时前
Next.js SSR 项目生产部署全攻略
前端·next.js·trae
程序员爱钓鱼1 小时前
使用Git 实现Hugo热更新部署方案(零停机、自动上线)
前端·next.js·trae
颜颜yan_2 小时前
DevUI + Vue 3 入门实战教程:从零构建AI对话应用
前端·vue.js·人工智能
暴富暴富暴富啦啦啦2 小时前
声音波浪 js+css
css·html·css3
国服第二切图仔3 小时前
DevUI Design中后台产品开源前端解决方案之Carousel 走马灯组件使用指南
前端·开源
无限大63 小时前
为什么浏览器能看懂网页代码?——从HTML到渲染引擎的奇幻之旅
前端