2015-08-27 40 views
0

我不确定命名我的BEM块,他们需要包装的最佳方式。 例如,假设下面的标记:BEM命名包装重复块

<div class="products-list"> 

    <div class="product__item"> 
    <div class="product__item__title">Product 1</div> 
    <img class="product__item__image" /> 
    </div> 

    <div class="product__item"> 
    <div class="product__item__title">Product 2</div> 
    <img class="product__item__image" /> 
    </div> 

</div> 

我觉得上面的包装(产品列表)是种损失。

这显然太深,使用这样的:

products-list__product__item__image 

那么,我们应该如何处理在BEM 包装里子元素也包装器

+0

的元素'.product__item__title'是无效的。如果你想把所有的东西都保存在一个''.product'中,那么你必须使用一个扁平的命名约定:'.product__item','.product__item-title','.product__item-image'。因为在BEM树中,元素'item','.item-title','.item-image'都是兄弟(独立于它们在DOM树中的关系)。 – Paleo

回答

3

用两个块.product-listproduct-item

<div class="product-list"> 
    <div class="product-list__item product-item"> 
    <div class="product-item__title">Product 1</div> 
    <img class="product-item__image" /> 
    </div> 
    <div class="product-list__item product-item"> 
    <div class="product-item__title">Product 2</div> 
    <img class="product-item__image" /> 
    </div> 
</div> 

在这里,元件.product-list__item共享块.product-item的节点。

或者,如果列表中的CSS规则可以在你的设计中重复使用,你可以重命名.product-list到一个更通用.list

<div class="list"> 
    <div class="list__item product-item"> 
    <div class="product-item__title">Product 1</div> 
    <img class="product-item__image" /> 
    </div> 
    <div class="list__item product-item"> 
    <div class="product-item__title">Product 2</div> 
    <img class="product-item__image" /> 
    </div> 
</div> 
+0

啊!我喜欢它 - 一种桥接两者的重叠。 这是'官方'的方式吗? – gjok

+2

它是有效的。同一DOM节点上的元素和块(或两个块)称为“混合”。 – Paleo