You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用BEM规范时的样式方案选择:直接样式元素还是添加额外类?

BEM规范下的样式实现:两种写法的适用场景

嘿,这个问题问到了BEM实践里的常见困惑——其实BEM的核心是模块化、可维护性和样式隔离,所以这两种写法没有绝对的“必须”,而是要看具体的使用场景:

1. 父类直接选择内部元素(无额外类名)

比如你写的:

.news-section {
  a { color: blue; }
}

这种写法适合非常基础、无独立复用需求、也不会和嵌套模块冲突的内部元素:

  • 比如区块里的默认段落、普通链接,这些元素的样式完全依附于父区块,不会在其他地方单独出现;
  • 好处是减少冗余类名,代码更简洁。

但要警惕一个坑:如果你的.news-section里嵌套了其他BEM模块(比如一个.card组件),这种写法会意外污染子模块的同名元素。比如.card里的<a>也会被这个样式影响,破坏了BEM的隔离性原则。所以如果区块有嵌套其他模块的可能,这种写法就不太安全。

2. 为元素添加BEM命名类(标准写法)

比如:

<section class="news-section">
  <a class="news-section__link">link</a>
</section>
.news-section__link {
  color: blue;
}

这是BEM官方推荐的标准实践,尤其适合以下场景:

  • 元素有独立的样式需求(比如hover状态、特殊排版、响应式调整);
  • 元素可能被单独复用(比如把这个链接样式用到其他区块);
  • 需要避免样式冲突,尤其是区块嵌套了其他模块的时候,这种写法完全隔离,不会影响外部元素。

另外,这种写法的可读性更强——其他开发者一看.news-section__link就知道这是.news-section区块下的链接元素,维护起来更清晰。

总结一下

  • 没有绝对的对错,但要根据场景选择:
    • 简单、无复用、无嵌套风险的内部元素,可以用父类直接选择;
    • 复杂、有独立样式、需要隔离或复用的元素,一定要用BEM元素类名。
  • 最重要的是团队统一规范——如果你们团队约定所有元素都要加BEM类,那就统一遵守,代码一致性比单一写法的优劣更重要。

内容的提问来源于stack exchange,提问作者Paran0a

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:43:23