BEM规范中Block能否包含可选的Elements?
BEM中Card块的可选Element处理方案
完全可以在其他场景使用不含card__tag的card块,这种做法符合BEM设计逻辑,你的原有思路没问题。
为什么可以省略card__tag?
在BEM规范里,Block是具备独立功能的实体,它内部的Elements(比如card__tag、card__title)是为Block不同功能模块服务的可选组成部分——Block的结构不需要固定包含所有定义过的Elements,而是根据实际业务场景需求,灵活组合必要的Elements即可。
比如你给出的两种结构都是合法的:
带card__tag的结构:
<div class="card"> <div class="card__tag"> </div> <div class="card__title"> </div> ... </div>
不带card__tag的结构:
<div class="card"> <div class="card__title"> </div> </div>
什么时候需要把card__tag提取为Mix?
只有当card__tag的样式、行为需要跨Block复用时,才需要把它提炼成独立的Block(比如命名为tag),然后通过Mix的方式在不同Block中复用:
<div class="card"> <div class="card__tag tag"> </div> <div class="card__title"> </div> </div>
如果这个tag只属于card的专属模块,没有在其他Block中复用的需求,完全没必要提取成Mix,保持原有的Element命名,按需省略即可。
总结
你之前“复用Block时按需包含可选元素”的做法是正确的,无需调整。只有当某个Element需要脱离当前Block独立复用时,再考虑将其转化为独立Block并通过Mix使用。
内容的提问来源于stack exchange,提问作者treblig13
相关产品推荐
相关产品推荐

