【H5 前端开发笔记】第 22 期:CSS 选择器 (7) CSS选择器命名规范与神级命名技巧

【H5 前端开发笔记】第 22 期:CSS 选择器 (7) —— CSS 选择器命名规范与神级命名技巧

前面六期我们把 CSS 选择器的“语法武器库”基本讲完了,从基础到高级、从结构到状态、从兄弟到否定……

但真正让项目“活得久、不爆炸”的,往往不是你会不会 :has():nth-child(3n+1),而是类名起得怎么样

今天这一期聊聊命名规范(Naming Conventions)和一些实战中被验证过的“神级”技巧(2025-2026 年视角)。

一、主流命名规范对比(2026 年真实使用情况)

规范全称核心思想类名示例优点缺点2026 年流行度(大中型项目)推荐场景
BEMBlock Element Modifier块-元素-修饰符.card__title--large可读性极强、防覆盖、组件化友好类名长、初学者觉得啰嗦★★★★★ (最高)组件库、中大型 SPA、团队协作
SMACSSScalable & Modular Architecture按类别分文件/命名.l-grid .is-hidden .btn-primary分类清晰、易扩展依赖文件拆分、状态类泛滥易乱★★★☆☆中型项目、传统多页应用
OOCSSObject-Oriented CSS对象化 + 皮肤分离.media .media--img-right高度复用、减少代码量语义不强、类名抽象★★☆☆☆追求极致原子化的项目
ITCSSInverted Triangle CSS倒三角分层(不强制定名)配合 BEM 或其他特异性控制极好更像架构而非命名★★★★☆与 BEM 结合、大型设计系统
ACSS / Utility-FirstAtomic / Utility CSS (Tailwind)原子类 / 工具类bg-blue-500 p-4 rounded-lg开发极快、无需写 CSS 文件HTML 爆炸、学习曲线陡(初期)★★★★★ (激增)快速原型、现代组件化、内部系统
普通语义类Semantic / 自描述见名知意.primary-button .user-avatar-large简单直观容易冲突、扩展性差★★★☆☆小型项目、个人/创业项目

2026 年共识推荐顺序(按项目规模):

  • 小型/个人项目 → 语义类Tailwind Utility
  • 中型团队项目 → BEM(或 BEM + ITCSS)
  • 大型/设计系统/组件库 → BEM + ITCSS + @layerTailwind + 自定义组件类
  • 追求极致速度/初创 → Tailwind CSS(或 UnoCSS、PicoCSS 等)

二、BEM 终极写法 & 神级技巧(最推荐掌握)

标准 BEM
.block
.block__element
.block--modifier
.block__element--modifier

进阶/神级变体(很多大厂/组件库真实用法)

  1. 多级元素(允许,但控制深度 ≤ 3)
   .dropdown
   .dropdown__trigger
   .dropdown__menu
   .dropdown__menu__item
   .dropdown__menu__item--active
  1. 状态前缀(比 -- 更清晰,常用于 JS 控制)
   .is-hidden      {}
   .is-loading     {}
   .is-disabled    {}
   .is-expanded    {}
  1. 主题/皮肤前缀(暗黑模式、品牌切换神器)
   .theme-dark .btn {}
   .brand-apple .card {}
  1. 组件命名 + 作用域前缀(大型 monorepo 必备)
   .ui-button          /* 组件库通用按钮 */
   .app-header         /* 业务应用头部 */
   .admin-sidebar      /* 后台专用 */
  1. data-* 属性辅助(减少类爆炸)
   <button data-variant="primary" data-size="lg">按钮</button>
   [data-variant="primary"] { background: blue; }
   [data-size="lg"] { padding: 16px 32px; }
  1. :where() 降低特异性(2024年后神器)
   :where(.card) .title { font-size: 1.5rem; }  /* 特异性 0,0,0 */

三、Tailwind + 自定义类混合(2026 年最香写法之一)

<!-- 纯 Tailwind -->
<button class="bg-blue-600 hover:bg-blue-700 text-white px-6 py-3 rounded-lg font-medium transition">

<!-- 混合写法(推荐) -->
<button class="btn btn-primary btn-lg">
  <!-- Tailwind 兜底 + 少量自定义 -->
  bg-blue-600 hover:bg-blue-700 text-white px-6 py-3 rounded-lg font-medium transition
</button>
/* components.css 或 app.css */
@layer components {
  .btn {
    @apply inline-flex items-center justify-center font-medium transition focus:outline-none focus-visible:ring-2;
  }
  .btn-primary {
    @apply bg-blue-600 text-white hover:bg-blue-700 focus-visible:ring-blue-500;
  }
  .btn-lg {
    @apply px-6 py-3 text-lg rounded-lg;
  }
}

四、命名规范 checklist(贴墙上用)

  • [ ] 全小写字母 + 连字符 -(除 BEM 外)
  • [ ] 见名知意:.user-profile-avatar > .up-ava
  • [ ] 避免颜色/状态出现在类名:.btn-red × → 用 --dangerdata-variant="danger"
  • [ ] 组件名前缀统一:ui-app-c-m-(module)等
  • [ ] 状态用 is- / has- 前缀
  • [ ] 布局相关用 l- / layout- 前缀
  • [ ] 禁止 !important 除非 reset 或第三方覆盖
  • [ ] 禁止 id 选择器写业务样式(特异性太高)
  • [ ] 禁止元素选择器写业务样式(污染全局)

五、终极建议(2026 年)

  1. 团队 < 8 人 & 追求速度Tailwind CSS(或 UnoCSS) + 少量组件类
  2. 中大型项目 & 需要严格组件化BEM + ITCSS 分层 + @layer
  3. 设计系统 / 组件库BEM + 命名空间 + CSS 变量 + :where()
  4. 旧项目重构 → 先 SMACSS 分类 → 逐步向 BEM 迁移

下一期预告:伪类与伪元素(下)—— 交互、表单、链接状态全家桶(:hover / :focus-visible / :checked / :valid / :invalid / :link / :visited / :target …)

有自己总结的“神级”类名技巧或项目中踩过的命名坑,欢迎留言分享~
祝大家类名起得又准又爽,CSS 再也不打架!🛡️

文章已创建 5186

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部