初识 BEM 命名规范与 WeUI 框架的组件化开发

在前端开发中,随着项目越来越大,多人协作越来越频繁,类名命名混乱、样式冲突、组件难以复用等问题也逐渐浮现。为了解决这些问题,BEM(Block-Element-Modifier) 这种命名规范应运而生。

本文将带你初步认识 BEM 的基本概念,并结合微信开源 UI 框架 WeUI,了解它是如何利用 BEM 来组织代码结构和实现组件化的。


一、什么是 BEM?

BEM 是一种用于 HTML 和 CSS 类名命名的方法论,全称为:

B lock - E lement - Modifier

它通过清晰的命名规则,帮助开发者构建可维护、可复用的 UI 组件。

1. Block(块)

  • 表示一个独立的功能模块或组件。
  • 它是顶级容器,具有语义上的独立性。
  • 命名格式:.block-name

例如:

html 复制代码
<div class="weui-page">...</div>

这里 .weui-page 就是一个 Block,表示一个页面级别的组件。

2. Element(元素)

  • 表示 Block 中的一个组成部分。
  • 必须依附于某个 Block,不能单独存在。
  • 命名格式:.block-name__element-name

例如:

html 复制代码
<h1 class="weui-page__title">标题</h1>
<p class="weui-page__desc">描述信息</p>

这里的 __title 和 __desc 都是 .weui-page 这个 Block 的子元素。

3. Modifier(修饰符)

  • 表示 Block 或 Element 的状态或变体。
  • 通常用于控制样式的变化,如主题、禁用状态等。
  • 命名格式:.block-name_modifier-name 或 .block-name__element-name_modifier-name

例如:

html 复制代码
<button class="weui-btn weui-btn_primary">主要按钮</button>
<button class="weui-btn weui-btn_default">默认按钮</button>

这里的 _primary 和 _default 是 .weui-btn 这个 Block 的不同修饰符,代表不同的样式状态。


二、WeUI 中的 BEM 实践

WeUI 是微信官方出品的一套 UI 样式库,模仿了 iOS 和 Android 原生 UI 效果。它的源码很好地遵循了 BEM 命名规范,使得组件结构清晰、易于理解和扩展。

示例:WeUI Button 组件

html 复制代码
<button class="weui-btn weui-btn_primary">主要按钮</button>
<button class="weui-btn weui-btn_default">默认按钮</button>
  • .weui-btn 是 Block,表示一个按钮组件。
  • .weui-btn_primary 和 .weui-btn_default 是该 Block 的 Modifier,表示不同的样式状态。

这种命名方式不仅让开发者一眼看出按钮的类型和状态,也方便后期维护和重构。


三、BEM 在组件化开发中的优势

1. 提升代码可读性

通过统一的命名规则,即使是不熟悉项目的开发者也能快速理解 DOM 结构和样式意图。

2. 提高组件复用性

每个 Block 都是独立的,可以在多个页面中复用。例如 .weui-cell 可以在表单页、设置页等多个场景下使用。

3. 减少命名冲突

传统的命名方式容易出现类名重复的问题(如 .title, .header),而 BEM 的命名方式几乎可以避免这种情况。

4. 支持团队协作

BEM 提供了一种标准化的沟通语言,使得多人协作更加高效。无论你是写模板、样式还是逻辑,都能清楚地知道某一块属于哪个组件。


四、从 WeUI 学习到的最佳实践

1. 页面由多个 Blocks 构成

WeUI 的页面结构通常是多个 Block 的组合,比如:

html 复制代码
<div class="weui-page">
  <div class="weui-header">头部</div>
  <div class="weui-content">内容区域</div>
  <div class="weui-footer">底部</div>
</div>

每个 Block 独立开发、测试、复用,实现了真正的组件化开发。

2. Block 包含 Elements

每一个 Block 内部又包含多个 Elements,构成完整的 UI 结构:

html 复制代码
<div class="weui-cell">
  <div class="weui-cell__bd">左侧内容</div>
  <div class="weui-cell__ft">右侧内容</div>
</div>

这样可以让结构更清晰,便于样式管理和维护。

3. Modifier 控制状态和样式变化

通过 Modifier 来控制组件的不同状态,例如禁用、加载中、错误提示等:

html 复制代码
<input class="weui-input_weui-input_disabled" disabled />
<span class="weui-loading"></span>

五、总结

BEM 不仅仅是一种 CSS 命名规范,更是一种前端工程化的思维方式。它通过清晰的层级划分和命名规则,帮助我们构建出结构清晰、易于维护、高度复用的组件系统。

WeUI 作为一套优秀的 UI 框架,完美诠释了 BEM 的精髓。学习并实践 WeUI 的源码结构和命名方式,不仅能提升我们的编码质量,更能让我们在大型项目中游刃有余地进行协作开发。

如果你也希望写出"大厂级"的代码,不妨从今天开始尝试使用 BEM 规范来重构你的项目吧!

相关推荐
w2sfot2 小时前
【JS加密在线】jsjiami.online(让JavaScript 更安全!)
开发语言·javascript·安全
拆房老料3 小时前
ONLYOFFICE也能像Microsoft Word和WPS一样分别设置中西文字体
前端·html·word·开源软件·wps
xy34534 小时前
Axure 9.0 动态面板基本操作
前端·ui·html·axure·原型·产品设计
一水鉴天5 小时前
统一对象拓扑(UOT)设计全链定稿:从三件事分离到三继承 之1 20261010(豆包“查看聊天内容”继续)
前端·css
杨杰3986 小时前
我给嵌入式设备写了个 6MB 的 JavaScript 运行时(xuan)
javascript
qq_369173636 小时前
如何将 AI 生成的 HTML 网页发布成在线链接?不用自己搭建服务器
前端·人工智能·html·效率工具·html 发布
只睡四小时7 小时前
AI 生成 PPTX:11 页课件编译出 429 个形状
javascript·python·pptx·ai生成ppt·ooxml
小凯在掘金7 小时前
Shadow DOM 和 Virtual DOM ?别再傻傻分不清
前端·html
shmily麻瓜小菜鸡7 小时前
Axios 中 params 与 data 的区别与原理
javascript·typescript
isha8 小时前
Univer拆解——从类与方法的视角分析
前端·javascript