BEM命名规范中service block(服务块)的含义是什么?
BEM命名规范中的服务块(Service Block)详解
先明确BEM的核心约束:BEM不允许创建「元素的元素」,但当你需要把一个元素拆分成更小的功能单元来简化开发时,服务块就是解决这个矛盾的方案。
服务块的核心含义
服务块是一种独立、通用的功能块,它不依附于特定的父块,专门用来嵌入到其他块或元素中,替代违规的「元素嵌套元素」写法,同时保持代码的模块化和可复用性。
服务块的作用与特点
- 规避BEM层级禁忌:解决了“不能给元素再定义子元素”的问题,让复杂UI结构可以合理拆分
- 通用可复用:服务块的功能偏向通用化,比如文本组、布局容器、图标包装器这类模块,能在多个不同的块中重复使用
- 保持结构清晰:它和宿主块/元素是嵌入关系,而非从属关系,不会让命名链条变得冗长混乱
实际示例
比如你有一个card块,其内部的card__content元素需要包含标题+文本的结构:
<!-- 错误:违反BEM规则,创建了元素的元素 --> <div class="card"> <div class="card__content"> <div class="card__content__title">卡片标题</div> <div class="card__content__text">卡片文本内容</div> </div> </div> <!-- 正确:使用服务块替代嵌套元素 --> <div class="card"> <div class="card__content"> <div class="text-group"> <div class="text-group__title">卡片标题</div> <div class="text-group__text">卡片文本内容</div> </div> </div> </div>
这里的text-group就是服务块,它不仅能在card块里用,还能放到article、modal等其他块中,完全独立于宿主存在,同时严格遵循了BEM的命名规则。
内容的提问来源于stack exchange,提问作者coding journey
相关产品推荐
相关产品推荐

