block 是可复用的功能单元,删掉会导致页面缺失完整功能,命名小写短横线、无位置归属暗示;modifier 仅开关样式、不新增结构,须双连字符、不可单独使用且不可继承。

它能不能脱离上下文独立存在、有没有明确功能语义,直接决定该是 Block;而 Modifier 只能描述状态或变体,永远不能单独使用、也不能改变结构。
Block 的判断标准:删掉它,页面是否缺失一个完整功能?
Block 是可复用的功能单元,不是视觉容器。比如 .search-form、.user-card,它们有明确行为(提交搜索、展示用户信息),删掉后页面会缺失对应功能;而 .main-content、.section-2 这类纯布局占位符,删掉不影响功能完整性,就不该当 Block。
- 命名必须是小写 + 短横线,如
input-field✅,InputField❌ - 不能带位置或归属暗示,如
top-banner❌(“top”是上下文)、my-button❌(“my”无复用价值) - HTML 标签名不等于 Block,
div不是div-block,Block 是抽象出来的功能模块
Modifier 的识别关键:它只开关样式,不新增结构或逻辑
Modifier 描述的是状态(button--disabled)、外观变体(card--featured)或尺寸(input-field--large),它的作用范围严格限定在它所挂载的节点上,不会影响父级或兄弟节点。
- 必须用双连字符
--分隔,button--primary✅,button-primary❌(会被当成新 Block) - 不能单独出现:
class="button--disabled"❌,必须搭配 Block 或 Element:class="button button--disabled"✅ - 不能替代结构:想让标题变红,不该写
card__title--red,而应定义card--highlighted card__title,颜色由 Block 级 Modifier 控制
常见混淆点:Element 修饰符 vs Block 修饰符
Modifier 可以挂在 Block 上,也可以挂在 Element 上,但含义不同。例如 menu--fixed 改的是整个菜单定位方式;而 menu__item--active 只改当前项的背景或文字色。两者都合法,但注意:
-
menu__item--active不能脱离menu和menu__item单独存在 - 不要写
menu__item__icon--hover—— Element 不允许嵌套,menu__item下的图标应作为新 Element:menu__item-icon,再加修饰符 - 性能上没区别,但语义错位会导致维护困难:把结构变化塞进 Modifier,后续加动画或 JS 绑定时容易误判作用域
最容易被忽略的是 Modifier 的“不可继承性”——它只改自己挂载的那个 DOM 节点,哪怕你给 card--wide 加了 width: 100%,也不会让里面的 card__title 自动变宽;宽度逻辑得靠 Block 内部布局规则来保证,而不是靠 Modifier 穿透控制子元素。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











