重复块的包装器的 BEM 命名

gjo*_*jok 2 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>
Run Code Online (Sandbox Code Playgroud)

我觉得顶部包装器(产品列表)有点丢失。

使用类似的东西显然太深了:

products-list__product__item__image
Run Code Online (Sandbox Code Playgroud)

那么,我们如何处理 BEM中的包装器,其中子元素也是包装器

Pal*_*leo 5

有两个块.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>
Run Code Online (Sandbox Code Playgroud)

这里的元素.product-list__item与 blocks 共享节点.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>
Run Code Online (Sandbox Code Playgroud)

  • 这是有效的。同一个 DOM 节点上的一个元素和一个块(或两个块)称为“混合”。 (3认同)