Css 使用BEM时命名包装器元素类

Css 使用BEM时命名包装器元素类,css,naming-conventions,wrapper,nested,bem,Css,Naming Conventions,Wrapper,Nested,Bem,我理解在使用BEM时,类名不应该直接反映HTML结构,但是包装器元素应该如何命名?请忽略我的特定语法(接近);它仍然遵循边界元法,只是用不同的方法区分元素 例如: <div class="?"> <footer class="PageFooter"> <h4 class="PageFooter-brand>…</h4> <ul class="PageFooter-contactDetails">…</ul>

我理解在使用BEM时,类名不应该直接反映HTML结构,但是包装器元素应该如何命名?请忽略我的特定语法(接近);它仍然遵循边界元法,只是用不同的方法区分元素

例如:

<div class="?">
  <footer class="PageFooter">
    <h4 class="PageFooter-brand>…</h4>
    <ul class="PageFooter-contactDetails">…</ul>
  </footer>
<div>


我一直以来的处理方式是,包装应该始终是块,因此:

<div class="PageFooter">
  <footer class="PageFooter-inner">
    <h4 class="PageFooter-brand">...</h4>
    <ul class="PageFooter-contactDetails">...</ul>
  </footer>
</div>

...

B锁包含E元素,因此我没有在B锁周围有东西,而是遵循E元素原理,开始使用
内部
而不是容器我实际上成功地使用了两个类,我的模式如下:

<div class='page-section bem-block'>
    <div class='bem-block__element'>
        <!-- etc etc -->
    </div>
</div>
我发现这在实践中效果很好。
.bem块
和它的同时代人也可以从
.page节
继承


此解决方案补充了Dan Gamble的解决方案。

谢谢。这是有道理的,尽管我不喜欢包装器现在是类的顶级元素这一事实。包装器是一个完美的例子,它很容易在布局改变时变得不需要/不需要,所以像这样将它耦合到页脚对我来说是错误的。通过将其视为子元素,可以轻松地将其移除,而不影响任何其他内容。简而言之,页脚的独立性和可移植性大大降低。如果是这样的话,你可以说包装器不是特定于
PageFooter
的,而是特定于它周围的内容,因为它是基于周围事物的布局。因此,与
PageFooter
相反,将它们解耦并将包装器绑定到站点布局是有意义的。这正是我要说的。它应该是容器的子元素,而不是页脚的一部分。我经常将一个元素视为一个布局容器,其中包含子元素的插槽,因此我认为这实际上只是它的一个变体。对于容器、行、,我倾向于将它们作为自己的实体,它们通常非常通用,所以我不需要有特定的
PageFooter
容器。如果你一直在玩React,那么他们构建组件的方式似乎与我对待基于BEM的CSS的方式非常接近。我们刚开始玩React,你是对的。这两者相辅相成。既然表示容器,或者说包装本身,为什么还需要一个包装器呢?@Rob别那么迂腐。这是一个针对这个问题的例子,一点也不迂腐。这是一个由比你更有经验的人进行的技术观察。它有什么作用?@Rob下次我表现得像个傻瓜时,我会记得把它称为“技术观察”。你的推理是错误的,好像你的例子代表了一些典型的东西。事实并非如此,我试着指出这一点,但我将把它留给你。
.page-section {
    width: 100%;
}
@media screen and (min-width: 1200px) {
    margin: 0 auto;
    width: 1200px;
}