大厂都爱用的BEM:让CSS命名不再头疼

3,746 阅读2分钟

前言:为什么我们需要BEM?

在前端开发中,CSS命名一直是个令人头疼的问题。随着项目规模扩大,我们经常会遇到:

  • 样式冲突
  • 命名混乱
  • 维护困难 BEM(Block Element Modifier)命名规范就像一剂良药,能有效解决这些问题。今天,我们就来深入探讨这个神奇的命名方法。

一、BEM核心概念

1. Block(块)

块是独立的、可复用的组件单元。它就像乐高积木中的基础块,可以单独使用。

<!-- 一个按钮块 -->
<button class="btn">点击我</button>

2. Element(元素)

元素是块的组成部分,不能独立存在。命名格式为: block__element

<!-- 搜索框块中的输入元素 -->
<div class="search">
  <input class="search__input" type="text">
  <button class="search__button">搜索</button>
</div>

3. Modifier(修饰符)

修饰符定义块或元素的状态或变体。命名格式为: block_modifier 或 block__element_modifier

<!-- 不同状态的按钮 -->
<button class="btn btn_primary">主要按钮</button>
<button class="btn btn_disabled">禁用按钮</button>

二、BEM命名规范详解

1. 命名规则

  • 使用小写字母
  • 单词间用连字符 - 连接
  • 元素用双下划线 __ 连接
  • 修饰符用单个下划线 _ 连接

2. 实际案例

<!-- Block -->
    <!-- Block weui-page-->
    <div class="weui-page">
        <!-- Element header-->
        <header class="weui-page__header">
            <!-- Element title-->
            <h1 class="weui__title">Button</h1>
            <!-- Element desc-->
            <p class="weui-page__desc">按钮</p>
        </header>
        <!-- Element body-->
        <main class="weui-page__body">
            <div class="button-sp-area">
                <a href="" class="weui-btn weui-btn_primary">主要操作</a>
                <a href="" class="weui-btn weui-btn_default">次要操作</a>
            </div>
            <div class="weui-cells">
                <h3 class="weui-cells__title">个人信息</h3>
                <div class="weui-cell">
                    <div class="weui-cell__hd"></div>
                    <div class="weui-cell__bd">
                        <p>标题文字</p>
                    </div>
                    <div class="weui-cell__ft">
                        说明文字
                    </div>
                </div>
                <div class="weui-cell">
                    <div class="weui-cell__hd"></div>
                    <div class="weui-cell__bd">
                        <p>标题文字</p>
                    </div>
                    <div class="weui-cell__ft">
                        说明文字
                    </div>
                </div>
            </div>
            <div class="weui-form">
                <div class="weui-form__hd"></div>
                <div class="weui-form__bd"></div>
                <div class="weui-form__ft"></div>
            </div>
        </main>
    </div>

三、BEM最佳实践

1. 避免过度嵌套

BEM不鼓励深度嵌套,一般不超过3层:

<!-- 不推荐 -->
<div class="block">
  <div class="block__element1">
    <div class="block__element1__element2">
      <!-- 内容 -->
    </div>
  </div>
</div>

2. 保持命名简洁

命名要能清晰表达功能,但不要过于冗长:

<!-- 推荐 -->
<div class="user-profile">
  <img class="user-profile__avatar" src="...">
</div>

<!-- 不推荐 -->
<div class="user-profile-container-wrapper">
  <img class="user-profile-container-wrapper-avatar-image" src="...">
</div>

四、BEM在大型项目中的优势

  1. 可维护性高 :清晰的命名结构让代码更易维护
  2. 可复用性强 :组件化开发,减少重复代码
  3. 团队协作顺畅 :统一的命名规范减少沟通成本

五、总结

BEM是一种简单但强大的CSS命名方法论。通过将界面分解为块、元素和修饰符,它能帮助我们:

  • 创建可维护的CSS代码
  • 避免样式冲突
  • 提高开发效率 记住这个简单的公式:
.block {}
.block__element {}
.block_modifier {}