😄
前端学习
  • 👋Welcome
  • 📖前端基础
    • HTML
      • 基础知识
      • 进阶知识
      • HTML5
    • CSS
      • 基础知识
      • 进阶知识
      • CSS 专题
        • CSS 选择器
        • CSS 布局
        • CSS 动画
        • CSS 画图
        • 响应式方案
        • CSS BEM 规范
        • CSS 案例
    • JavaScript
      • 基础知识
      • 进阶知识
      • 常用内置对象
        • Array 对象
        • String 对象
        • Number 对象
        • Boolean 对象
        • Math 对象
        • Date 对象
        • RegExp 对象
        • Object 对象
      • JS 专题
        • 数据类型
        • 原型链/继承
        • 对象赋值与拷贝
        • this 的指向
        • 异步操作
        • 模块化
        • 设计模式
    • 浏览器
      • 浏览器模型
      • 事件
      • 位置属性
      • Web 缓存
      • 本地存储
    • 综合内容
      • 前端跨域
      • 登录鉴权
      • 文件上传与下载
  • 🏗️前端框架
    • Vue.js
      • 基础知识
      • Vue 组件通信
      • Vuex 使用指南
      • Vue 动画
      • 静态网站框架 VuePress
    • React.js
      • 基础知识
      • 组件通信
  • 📦计算机基础/后端
    • 图解计算机网络
    • HTTP/HTTPS
    • TCP/UDP
    • Node.js
    • MongoDB
  • 🛠️开发工具
    • 版本控制工具-Git
      • git submodule
    • 构建工具-Webpack
    • 错误监控工具-Sentry
    • 单元测试工具-Jest
    • 包管理工具-NPM
    • 代码编辑器-VSCode
  • 🤔专题内容
    • 前端工程化
    • 代码规范
      • JavaScript 代码规范
      • CSS 代码规范
      • Vue 代码规范
      • Git Commit 规范
      • 代码规范配置
    • 网络安全与防御
    • 性能优化
    • 算法编程
    • 数据可视化
  • 🧑‍💻 面试相关
    • 面试知识总结
    • 面试问题总结
    • 面试常见编程
    • 面试资源汇总
  • 🍭其他
    • 项目经验❗️
    • 踩坑指南❗️
      • JavaScript 踩坑指南
      • CSS 踩坑指南
      • Vue 踩坑指南
    • 学习资源
    • 综合收藏夹
由 GitBook 提供支持
在本页
  • 1. 什么时候用 BEM 格式?
  • 2. 命名模式
  • 2.1 Block 块
  • 2.2 Element 元素
  • 2.3 Modifier修饰符

这有帮助吗?

  1. 前端基础
  2. CSS
  3. CSS 专题

CSS BEM 规范

上一页响应式方案下一页CSS 案例

最后更新于4年前

这有帮助吗?

参考链接:

1. 什么时候用 BEM 格式?

在具体应用中并不是每个地方都应该使用 BEM 命名方式。当需要明确关联性的模块关系时,应当使用 BEM 格式,比如只是一条公共的单独的样式,就没有使用 BEM 格式的意义:

.hide {
    display: none !important;
}

此外,因为某些东西确实是位于一个块的内部,但这并不意味它就是BEM中所说的元素,BEM最难的部分之一是明确作用域是从哪开始和到哪结束的,以及什么时候使用(不使用)它。

2. 命名模式

BEM由Block、Element、Modifier组成,为的是结束混乱的命名方式,达到一个语义化的CSS命名方式,其命名方法:

  • block-name--modifier-name

  • block-name__element-name

  • block-name__element-name--modifier-name

  • block-name__element-name--modifier-name--modifier-name

scss 写法举例:

.header {
  &__body {
    padding: 20px;
  }
  &__button {
    &--primary {
      background: #329FD9;
    }
    &--default {
      background: none;
    }
  }
}

2.1 Block 块

  • 负责描述功能的,不应该包含状态(如 header、menu、button等)

  • 不影响自身布局,不包含具体的样式(如不能为块设置 margin 或 position)

  • 只能使用class命名选择器,而不能使用标签或id选择器

  • 不依赖于页面内其他块或元素

<div class="header">
    <div class="logo"></div>
    <div class="search"></div>
</div>

2.2 Element 元素

  • 表示的是目的(如.header__body、.header__logo、 .header__title)

  • 元素总是属于块的一部分,不能脱离 Block 父级单独使用

  • 元素之间是可以嵌套的,但并不意味着可以出现 block-name__element-name__element-name 命名情况

<div class="header">
    <div class="header__item">
        <span>
            <img src=" " alt="" class="header__icon">
        </span>
        <p class="header__label"></p>
    </div>
</div>

2.3 Modifier修饰符

  • Modifier是Block或Element上的标记,使用它们来改变样式,行为或状态。

  • 不能单独使用

<div class="weui-tabbar weui-tabbar--focused">
    <div class="weui-tabbar__item weui-tabbar__item--on"></div>
</div>

如果你对内容有任何疑问,欢迎提交 或

📖
GetBEM
CSS BEM 书写规范
❕issues
✉️ email