CSS 命名规范 - BEM

CSS 命名规范 - BEM

规范化命名

CSS 的选择器按照规范命名的优点:

  1. 提高代码的 可读性可维护性
  2. 提高 可重用性
  3. 可以有效地避免组件或模块间样式的相互污染,减少嵌套层级

BEM 格式

[prefix]-[block]__[element]--[modifier]
  • Prefix。全局前缀,比如 ElementUI 的前缀为 el
  • 块(Block):块是指页面上的独立组件或模块,它们是页面的一部分并且有自己的意义。比如,一个导航栏、一个按钮、一个表单等都可以作为一个块。
  • 元素(Element):元素是块的组成部分,它们不能单独存在,并且依赖于块的存在。元素在块的范围内起作用,用以描述块的不同部分。比如,导航栏的链接、按钮的图标等都可以作为元素。
  • 修饰符(Modifier):修饰符用于定义块或元素的外观、状态或行为的变化。它们允许我们为相同的块或元素提供不同的变体,而无需改变其名称。比如,按钮可以有不同的大小、颜色或状态(如激活或禁用),这些可以通过修饰符来表示。

BEM 命名规则

以示例讲述

1. 无子元素和修饰类的块

<style>
.el-btn {}
</style>

<button class="el-btn"></button>

2. 包含子元素的元素

稍微复杂的结构通常有子元素。

  • 每个需要设置样式的子元素必须包含一个类名。
  • 不要省略 HTML 中子元素的类名,否则会对组件中的元素使用更高权重的选择器。BEM 目的之一是保持样式一致和较低的权重值
  • 如果结构具有多个层级的子元素,类名无需反映出每个层级,表示组件中子元素的 BEM 类名只需包含块名和元素名
<!-- GOOD -->
<style>
  .el-card { }
  .el-card__title { }
  .el-card__description { }
</style>
<div class="el-card">
  <h1 class="el-card__title"></h1>
  <p class="el-card__description"></p>
</div>
<!-- BAD -->
<style>
  .el-card { }
  .el-card h1 { }
  .el-card p { }
</style>
<div class="el-card">
  <h1></p>
  <p></p>
</div>

3. 含修饰类的元素

在某些情况下,你可能希望更改组件中的单个元素的样式,基于修饰类调整元素样式。在这种情况下,可以在元素上添加修饰类。

修饰类不能单独使用。修饰类旨在增强而非替代基类。

<style>
  .el-card { }
  .el-card__title { }
  .el-card__title--big { }
</style>

<div class="el-card">
  <h1 class="el-card__title el-card__title--big"></h1>
</div>

4. 状态

很多组件具有多种状态,比如 tab 组件有激活状态、禁用状态。

  • 使用独立的状态钩子来表示状态,状态类名以 el-is- 开头,推荐使用的状态类名(见附)供君选用
  • 设置状态样式时,状态类名必须与其作用的元素类名或者块类名联合使用 (.a.b 形式),不能使用后代选择器、子选择器等其他方式设置样式,以减小对全局样式的污染
  • 修饰类的作用是用来表示组件的另外一个变体,而非另外一种状态,所以状态 不使用 修饰符的形式(如 el-tabs__tab-disabled)
<!-- GOOD -->
<style>
  .el-tabs { }
  .el-tabs__tab { }
  .el-tabs__tab-name.el-is-active { }
  .el-tabs__tab-name.el-is-disabled { }
</style>
<ul class="el-tabs">
    <li class="el-tabs__item">
        <a href="" class="el-tabs__tab-name el-is-active">tab 1</a>
    </li>
    <li class="el-tabs__item">
        <a href="" class="el-tabstab-name el-is-disabled">tab 2</a>
    </li>
    <li class="el-tabs__item">
        <a href="" class="el-tabstab-name">tab 3</a>
    </li>
</ul>

常见类名

状态类

状态 类名
加载 el-is-loading
禁用 el-is-disabled
成功 el-is-success
报错 el-is-error
警告 el-is-warning
聚焦 el-is-focused
选中 el-is-selected
勾选 el-is-checked
关闭 el-is-closable
激活 el-is-active
当前项 el-is-current
隐藏/显示 el-is-hidden/el-is-visible
展开/折叠 el-is-expanded/el-is-collapsed
对齐方式 el-align-center/el-align-left/el-align-right

尺寸类

尺寸 类名
较小 el-size-xs
el-size-s
中(默认) el-size-m
el-size-l
较大 el-size-xl
高度100% el-size-full-height
宽度100% el-size-full-width
宽度自适应 el-size-auto-width

相关推荐

  1. CSS 命名规范-BEM

    2024-04-23 17:30:03       54 阅读
  2. CSS 命名规范 - BEM

    2024-04-23 17:30:03       36 阅读
  3. 前端代码规范-命名规范

    2024-04-23 17:30:03       38 阅读
  4. Redis key命名规范

    2024-04-23 17:30:03       52 阅读
  5. C++命名规范

    2024-04-23 17:30:03       26 阅读
  6. 前端开发中需要注意的CSS命名规则以及书写顺序

    2024-04-23 17:30:03       58 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-23 17:30:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-23 17:30:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-23 17:30:03       87 阅读
  4. Python语言-面向对象

    2024-04-23 17:30:03       96 阅读

热门阅读

  1. 【QT进阶】Qt http编程之websocket的简单介绍

    2024-04-23 17:30:03       40 阅读
  2. DBever SQL编辑器的高级应用:如何用变量快速查询

    2024-04-23 17:30:03       30 阅读
  3. Leetcode 605. Can Place Flowers

    2024-04-23 17:30:03       34 阅读
  4. php常见图片处理方法

    2024-04-23 17:30:03       37 阅读
  5. SpringBoot学习路线推荐

    2024-04-23 17:30:03       39 阅读
  6. 算法刷题记录 Day51

    2024-04-23 17:30:03       33 阅读
  7. 在线办公:巨头通往新质生产力的一把利剑

    2024-04-23 17:30:03       33 阅读