一个组件是否该拆为独立 block,取决于它能否脱离父容器独立存在:语义完整、样式自洽、状态可控、可复用。需验证其渲染完整性、modifier 自治性、多场景适用性,并通过 storybook 隔离测试确认。

看它能不能脱离父容器独立存在
一个组件是否该拆成新 block,最直接的判断标准是:把它单独拿出来,不依赖任何父级 class,能不能正常渲染、语义完整、样式自洽。比如 user-card 里有个搜索框,如果去掉 user-card 容器后,search-bar 自己仍能显示 placeholder、响应点击、有合理 padding 和 border,那它就该是独立 block;如果一抽出来就塌缩、字号错乱、按钮消失,说明它目前只是 user-card__search 这种 element,还没达到 block 级别。
常见错误是把视觉上“嵌在某区域里”的元素强行提为 block,结果发现它根本没法复用——因为它的 margin、font-size、颜色全靠父级 class 注入。这种情况下,先抽离样式逻辑,再评估。
检查它有没有自己的状态和变体
真正可复用的 block 应该有自己的 modifier 集合,而不是靠外部 class 控制。比如 footer-nav 能自己支持 footer-nav--3-col、footer-nav--compact,而不是由 footer 统一加 footer--mobile 去间接影响子元素。
-
copyright有copyright--small和copyright--with-year,说明它是独立 block -
header__logo-link只有header__logo-link--dark,且这个 dark 本质是适配 header 主题,不是 logo-link 自身的变体 → 应该提为logo-linkblock,用logo-link--dark - 第三方组件如
el-button不要硬套form-actions__submit-btn这种写法,而是用 wrapper block(如form-actions__submit)包裹,让它承担上下文角色
验证它是否被多处复用或可能被复用
BEM 的 block 不是“现在用没用”,而是“有没有复用潜力”。比如页脚里的 contact-info,哪怕当前只出现在 footer,只要它包含邮箱、电话、地址图标等完整信息结构,且样式不依赖 footer 的 flex 设置,就值得单独拆出。后续弹窗底部、侧边栏联系栏都能直接引用。
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
容易踩的坑:
- 把
page-header__logo当作通用 logo 使用,结果在 modal 里复用时颜色/尺寸全乱 —— 因为它本质是page-header的 element,不是独立 block - 给 block 命名太泛,比如叫
section或container,导致不同业务模块的 section 冲突,无法并存 - 误以为“有 JS 行为”就一定是 block —— 有些交互逻辑只是增强,不影响样式结构,比如 hover 效果,不需要单独拆块
用 Storybook 快速验证拆分合理性
在 Storybook 里新建一个 story,只渲染那个候选组件,不带任何父容器。如果它:
- 能正确显示所有内容
- 没有意外继承的字体、颜色、间距
- modifier 切换生效且不破坏布局
- 没有报 CSS 类名未定义或样式缺失警告
那基本可以确认它是合格的 block。反之,如果 story 里它显示异常,但塞进真实页面又“刚好好”,说明它还深度耦合,得先解耦样式再考虑拆分。
复杂点往往不在命名规则本身,而在判断“这个东西到底算不算一个功能单元”——它既不是纯视觉区块,也不是技术实现粒度,而是业务语义+复用边界+样式自治三者的交集。稍不注意,就会把本该独立的版权信息锁死在 footer 里,或者把本该内聚的用户卡片拆得支离破碎。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










