【问题标题】:BEM Confusions with naming elements [closed]BEM与命名元素混淆[关闭]
【发布时间】:2013-11-04 21:13:01
【问题描述】:

我一直在一个项目中使用 BEM,以使我的 CSS 更加模块化,遇到了一些我觉得需要澄清一下的情况:

上下文相关的样式。我不断遇到需要根据父项上的类更改模块/组件的样式。

假设我正在设计产品列表。我有我的.product-list 组件,里面有我所有的.product-list__item.product-list__item 的内部可能有一个 <h3> 作为产品标题。

我的问题是:

  • .product-list__item 是否也应该有 .item 的类?

  • 产品内的标题是否应具有以下类:

    • .item__title?
    • .product-list__item__title ?

假设该商品内部还有一个描述框,其中包含价格:

  • 描述是否应该:
    • .item__description ?
    • .product-list__item__description?
  • 价格应该有:

    • .item__description__price?
    • .description__price?
    • .price?

我做子组件有点需要单独添加自己的组件名称,即:.item.description。我猜他们需要它们,因为他们在哪里可以应用他们的样式?

另外,如果我有上述内容,我将有一个 .product-list 组件,听起来不错,但如果子组件有自己的组件名称添加为类,例如 .item,那么它本身就不是很具有描述性是吗?

我知道它们听起来可能很复杂,但我很想在这里感到困惑,并且很想听听您的意见。我已经阅读了大量关于 BEM 的文章,但没有一篇解释过这类事情。

尼尔

【问题讨论】:

  • 命名约定是个人选择:做对您的项目有意义的事情。这类问题只会产生固执己见的答案。
  • 那你问错地方了。 stackoverflow.com/help/dont-ask
  • @cimmanon BEM(几乎)都是关于命名约定的,所以我认为这是一个有效的问题:它询问如何将定义明确的方法应用于项目。
  • 从表面上看,BEM 似乎只是一个命名约定,但应用它有正确的方法和错误的方法,所以关于如何应用它的问题不是我应该如何命名东西的问题 -再次关闭一个问题,因为用户看不到细微差别,这是 Stack Overflow 审核过程的失败
  • 我不明白为什么它被关闭了。提出的问题不是基于意见的。这是一个严格的命名约定,有正确和错误的做事方式。如果他问“我应该如何对这些元素进行分类?”好的。那本来是基于意见的,但他专门要求 BEM。

标签: css sass components bem


【解决方案1】:

根据 BEM 方法,没有元素的元素,因此您应该使用 product-list__item__title 而不是 product-list__item-title

至于与上下文相关的样式,您可以使用级联(并将样式放置到父文件)或像您的示例中那样混合。规则很简单:一旦你发现自己在某处使用了一些 item 而没有其父级 block - 将其设为单独的块并使用混合,但如果没有父级的项目绝对无用,则使用级联更有意义。

【讨论】:

    猜你喜欢
    • 2013-02-24
    • 2015-09-21
    • 2012-12-14
    • 2021-10-10
    • 1970-01-01
    • 2014-04-14
    • 1970-01-01
    • 1970-01-01
    • 2015-01-17
    相关资源
    最近更新 更多