我对BEM有疑问。可以单独拥有.block__element
并拥有block
作为父母吗?我正在用WordPress构建一个站点,其中有许多其他主题,页面构建器和插件类,因此有时需要父block
使其有些混乱。那么,可以单独使用block__element
然后通过SCSS对其进行样式设置还是可以的,或者我应该在页脚中添加block
才能正确执行此操作吗?
HTML
<footer id="footer">
<div class="theme-class page-builder-class">
<div class="footer-block__text">Some footer element text</div>
</div>
</footer>
CSS
#footer .footer-block__text {
color: #ffffff;
}
答案 0 :(得分:3)
我的看法是否,原因有两个:
block
到block__element
继承。我当然不能肯定地说没有看到任何代码,但是block__element
的样式可能取决于从block
继承一些规则。如果库设计人员不能假设所有block__element
都有一个block
祖先,那么以这种方式构造库没有任何好处。例如,如果block
定义了display:flex
,而block__element
具有flex-grow:1
,则在没有block
父级的情况下,后者将无效。如果它是从其他祖先那里获得的display:flex
,那么您实际上并不是在进行BEM。答案 1 :(得分:1)
我我认为您可以在很多情况下将BEM类与其他类混合使用。 BEM可以与其他方法,某些旧代码甚至是中等特定的类混合使用。
例如,我曾经混合使用方法:
.u-uppercase
)相比,我更喜欢使用一种实用程序类(例如:.title--uppercase
),该实用工具类的编写时间短并且可用于每个块。 .o-container
),而不是在各处编写相同的BEM元素(例如:.header__container
)。您可以在Modular CSS at Rangle上找到有关扩展BEM的精彩演示。
根据我的经验,在构建此网站https://www.netalis.fr时,我尝试混合使用OOCSS(带有l-
前缀)和BEM类(带有p-
前缀)。起初很奇怪,但最终却非常有用且稳定。
netalis网站上的示例:
<!-- HEADER BLOCK -->
<div class="p-header p-header--hero">
<!-- NESTED BLOCK -->
<div class="p-menu"></div>
<!-- OBJECT CLASS -->
<div class="l-container">
<!-- HEADER ELEMENT -->
<div class="p-header__content"></div>
</div>
</div>
之所以有效,是因为这些外部类是:
.p-header > .l-container
混合在一起所以我的问题是:您的page-builder-class
是否孤立且不可变?