css - BEM和继承其他类的属性

标签 css bem

我在使用 BEM 时遇到了一些问题。我有以下内容:

<ul className="AppHeader__subnav-links">
  <li className="AppHeader__subnav-link--active">Details</li>
  <li className="AppHeader__subnav-link">Conditions</li>
  <li className="AppHeader__subnav-link">Actions</li>
  <li className="AppHeader__subnav-link">Assets</li>
</ul>

这个想法是事件链接下面有一个下划线。但问题在于,由于 BEM 类都是“独立的”并且不级联,AppHeader__subnav-link--active 不会从 AppHeader__subnav-link 继承任何东西(显然).我有更好的方法来构建它吗?或者我只需要采取以下措施:

&__subnav-link {
  // properties

  &--active {
    @extend .AppHeader__subnav-link;
    // properties
  }
}

最佳答案

BEM 要求将修饰符添加到基类。

您的标记的更正版本是:

<ul className="AppHeader__subnav-links">
  <li className="AppHeader__subnav-link AppHeader__subnav-link--active">Details</li>
  <li className="AppHeader__subnav-link">Conditions</li>
  <li className="AppHeader__subnav-link">Actions</li>
  <li className="AppHeader__subnav-link">Assets</li>
</ul>

…since BEM classes are all “standalone,” and do not cascade…

我不同意这种说法。 BEM 类在很大程度上依赖于修饰符的级联。预计将使用基类,随后将使用修饰符来覆盖该特定状态的必要样式。

考虑以下 CSS:

.widget {
    border-color: gray;
}
.widget--active {
    border-color: black;
}

如果顺序互换,修改器将不再正常工作。 BEM 依赖于级联,但试图保持较低的特异性以充分利用它。

关于css - BEM和继承其他类的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37036557/

相关文章:

css - 如何让包装器 div 的背景色随高度扩展

html - 响应式 CSS Div 宽度

css - 如何使用 BEM CSS 修改 block 的多个元素

html - block 元素修饰符 - 使用 BEM 而不使用 'Element' ?

jquery - 将 div 框堆叠成两列。但是当右边的盒子被移除时,它后面的所有盒子应该相应地排列起来

html - IE 条件注释会减慢页面加载速度吗?

javascript - 使用Javascript根据其他DIV(方法)设置相同的DIV高度

html - 我可以在 BEM CSS 中嵌套 block 或元素内部修饰符吗?

css - BEM: block 中的独立 block

css - 如何使用 BEM 命名导航栏结构?