使用BEM时命名包装元素类

Und*_*ion 10 css nested naming-conventions wrapper bem

我知道在使用BEM时,类名不应该直接反映HTML结构,但是如何命名包装元素呢?请忽略我的特定语法(靠近SUIT); 它仍然遵循BEM,只是采用不同的方式来区分元素.

例如:

<div class="?">
  <footer class="PageFooter">
    <h4 class="PageFooter-brand>…</h4>
    <ul class="PageFooter-contactDetails">…</ul>
  </footer>
<div>
Run Code Online (Sandbox Code Playgroud)

我现在将这个包装器在这个实例中分类为PageFooterWrapper,但是这感觉很笨,因为包装器不是独立的 - 它纯粹存在于PageFooter.显然,为所有内容添加前缀PageFooter-是荒谬的,所以只留下将包装作为以下内容的一部分PageFooter:PageFooter-wrapper.这让我感到不安,因为有一个隐含的建议应用于此.

那么包装器的类应该是什么?

Dan*_*ble 17

我一直对待它的方式是包装应该始终是块,所以:

<div class="PageFooter">
  <footer class="PageFooter-inner">
    <h4 class="PageFooter-brand">...</h4>
    <ul class="PageFooter-contactDetails">...</ul>
  </footer>
</div>
Run Code Online (Sandbox Code Playgroud)

锁包含é lements有我周围的东西,而不是使锁我刚刚与随后沿Ë字元素原理和使用开始inner的,而不是容器

  • 谢谢。这是有道理的,尽管我认为我不喜欢包装器现在是类方面的顶级元素这一事实。包装器是在布局更改时很容易变得不需要/需要的东西的完美示例,因此将它像这样耦合到页脚对我来说是错误的。通过将其视为子元素,可以轻松删除它而不会影响任何其他内容。简而言之,您使页脚变得不那么独立且不那么便携。 (2认同)
  • 如果是这种情况,那么您可能会争辩说包装器不是特定于`PageFooter`,而是特定于它周围的内容,因为它基于周围事物的布局。因此,将它们解耦并将包装器绑定到站点的布局而不是“PageFooter”可能是有意义的? (2认同)

Ton*_*igh 5

我实际上已成功使用了两个类,我的模式如下:

<div class='page-section bem-block'>
    <div class='bem-block__element'>
        <!-- etc etc -->
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

有效地使用实用程序类来执行某些包装函数.CSS可能与此类似:

.page-section {
    width: 100%;
}
@media screen and (min-width: 1200px) {
    margin: 0 auto;
    width: 1200px;
}
Run Code Online (Sandbox Code Playgroud)

我发现这在实践中很有效.它也可能.bem-block是同时代的继承者.page-section.

这个解决方案是Dan Gamble的补充.