html - scss BEM 修改器的困难

标签 html css sass bem

我很难理解如何使用 BEM 命名约定正确编写 scss。

这里我有一些 HTML:

<div class="SomeBlock">
   <div class="SomeBlock__someElement">text</div>
</div>

<div class="SomeBlock">
   <div class="SomeBlock__someElement--greenBG">text</div>
</div>

<div class="SomeBlock">
   <div class="SomeBlock__someElement--orangeBG">text</div>
</div>

以及以下 scss:

.SomeBlock {
   margin: 10px 0 0 0;
   color: white;
   width: 100px;
   height: 50px;
   background: red;

   &__someElement {
      background: blue;
      text-align: center;

      &--greenBG {
         background: green;
      }

      &--orangeBG {
         background: orange;
      }
   }
}

我希望发生的是有 3 个不同的 block ,它们都相同但具有不同颜色的 backgrounds,这就是发生的情况,除了文本没有像我期望的那样居中,因为我的元素样式有 text-align: center;

我误会了什么?我已经阅读了一些关于 scss 和 BEM 的教程,但我仍然不明白。

最佳答案

小心reference parent selectors using & in Sass因为它不做你认为它做的事。

在 SCSS 的正常嵌套中,这是:

a {
  b {
    /* styling */
  }
}

生成 a b {/* 样式 */}

但是,当您使用 & 引用父选择器时,这:

a {
  &__b {
    /* styling */
  }
}

变成:a__b {/* styling */}//注意这是一个类

BEM 提倡的是使用系统的命名类的方式来为您的文档设置样式,但是手动编写 BEM 是一场噩梦。使用 & 引用的 Sass 父选择器使编写 BEM 变得容易,但您仍然必须记住,在 Sass 中使用 & 时,您只是生成类名而不是实际嵌套.

这一切意味着,在您的情况下,您需要为要应用的各种 CSS 规则添加以下每个类:

<div class="SomeBlock SomeBlock__someElement SomeBlock__someElement--greenBG">text</div>

关于html - scss BEM 修改器的困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37221526/

相关文章:

javascript - 自定义 HTML 标记内的元素未在构造函数中初始化

javascript - 如何从复选框元素中获取默认值?

css - 有什么方法可以将通过 SASS Bourbon 编译的 SCSS 代码反编译为可读格式?

html - 带有居中 Logo 的多行导航栏

sass - Zurb F5 : changing base-font-size and rem-base is confusing

node.js - digital ocean 上的 dokku sass 错误

javascript - 在react js中将任意随机html对象转换为字符串

javascript - 将鼠标悬停在链接上时更改 div 的颜色

javascript - 使用 JavaScript 创建和附加嵌套的 div 元素

css - 将 sass 编译成 css 是否需要我不断打开 ruby​​ 命令提示符?