【问题标题】:BEM CSS with common styles具有常用样式的 BEM CSS
【发布时间】:2014-11-25 17:14:58
【问题描述】:

在使用全局样式时,我有点困惑。考虑以下几点:

假设我有一个样式表,它定义了如何制作按钮:

/* Button.CSS */
button {
  background-color: #CCC;
}

button.Blue {
  background-color: #00F;
  color: #FFF;
}

Button.Blue.Hollow {
  background-color: none;
  border: 1px solid #00F;
  color: #00F;
}

然后您将模板中的按钮与标准 BEM 表示法一起使用(我将使用 Block__Element--Modifier 表示法)

<!-- index.html -->
<ul class="Widget">
  <li class="Widget__Item">
    <button class="Widget__Button"></button>
  </li>
  <li class="Widget__Item">
    <button class="Widget__Button Blue"></button>
  </li>
  <li class="Widget__Item">
    <button class="Widget__Button Blue Hollow"></button>
  </li>
</ul>

这样混合课程是可以接受的做法吗?我觉得我违反了一些封装块样式的规则。

【问题讨论】:

    标签: css frontend bem


    【解决方案1】:

    我觉得我违反了一些封装块样式的规则。

    的确如此。 Button 应该是一个块,而不是一个元素。 BlueHollow 是修饰符。

    使用Block__Element--Modifier 语法,您的代码应该是:

    .Button {
      background-color: #CCC;
    }
    .Button--Blue {
      background-color: #00F;
      color: #FFF;
    }
    .Button--BlueHollow {
      background-color: none;
      border: 1px solid #00F;
      color: #00F;
    }
    
    <ul class="Widget">
      <li class="Widget__Item">
        <button class="Button"></button>
      </li>
      <li class="Widget__Item">
        <button class="Button Button--Blue"></button>
      </li>
      <li class="Widget__Item">
        <button class="Button Button--Blue Button--BlueHollow"></button>
      </li>
    </ul>
    

    或者,您可以使用MyBlock-myElement.myModifier 语法(更接近您的方式):

    .Button {
      background-color: #CCC;
    }
    .Button.blue {
      background-color: #00F;
      color: #FFF;
    }
    .Button.blue.hollow {
      background-color: none;
      border: 1px solid #00F;
      color: #00F;
    }
    
    <ul class="Widget">
      <li class="Widget-item">
        <button class="Button"></button>
      </li>
      <li class="Widget-item">
        <button class="Button blue"></button>
      </li>
      <li class="Widget-item">
        <button class="Button blue hollow"></button>
      </li>
    </ul>
    

    【讨论】:

    • 啊,听起来不错。如果我愿意,我仍然可以修改最后一项,对吗?说.. &lt;button class="Button Button--Blue Button--BlueHollow"&gt; 是最后一个,我可以将&lt;button class="Button Button--Blue Button--BlueHollow Widget__Button-Last"&gt;.Widget__Button-Last { color: red; } 一起附加?
    • 最好在块Button上使用修饰符。块Button 不需要知道它是否在最后一个位置。它只需要显示“红色”变体。
    • 谢谢塔尔!为了补充您的答案,这有助于:bem.info/tutorials/start-with-project-stub/…
    猜你喜欢
    • 2014-10-26
    • 2015-09-21
    • 2018-01-10
    • 2018-06-06
    • 2018-03-14
    • 2021-11-22
    • 2017-12-04
    • 2011-07-14
    相关资源
    最近更新 更多