css - 如何使用 Sass 和 BEM 编写修饰符

标签 css sass bem

我真的很困惑如何使用 Sass 和 BEM 约定的范围。

我有以下代码:

<div className="page">
   <div className="page__main-content">
    </div>
</div>

我有一个条件,有时会将上面的以下代码转换为:

   <div className="page">
       <div className="page__main-content main-content--active">
        </div>
    </div>

现在我想在 sass 中表示我做了以下事情:

.page{
  &__main-content{
    min-height: 100vh;
    width: calc(100% - 20em);
    margin-left: 10.9em;
    &--active {
      width: calc(100% - 5em);
    }
  }
}

但是宽度没有变化。查看转译后的代码,它看起来像这样:

page__main-content main-content--active

我如何在 Sass 中显示它?

我还想覆盖宽度(在事件和非事件状态下)

@media (max-width: 800px) {
  .page{
    &__main-content {
      width: 100% !important;
    }
  }
}

最佳答案

这是你应该在 SASS 中设置它的方式:

.page{
  &__main-content{
    min-height: 100vh;
    width: calc(100% - 20em);
    margin-left: 10.9em;

    &.main-content {
      &--active {
        width: calc(100% - 5em);
      }
    }
  }
}

编译为:

.page__main-content {
  min-height: 100vh;
  width: calc(100% - 20em);
  margin-left: 10.9em;
}
.page__main-content.main-content--active {
  width: calc(100% - 5em);
}

你基本上需要用另一个类 .main-content.page__main-content

这是展示它工作的 fiddle : https://jsfiddle.net/nbqfjcwh/

此外,您的 React 编译器应该将 className 编译为 class - 这就是我认为您看不到结果的原因。

关于css - 如何使用 Sass 和 BEM 编写修饰符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56692528/

相关文章:

html - BEM元素嵌套命名和sass规则

html - 空间 <td> 表均匀不均匀

html - 由于 KB2898785 IE6 不会为远程传送的页面加载本地来源的 CSS——如何更正?

css - 主容器上带有 flexgrow 的水平可滚动 div

javascript - 如何使用模板和 BEM 方法来组织 javascript 表单生成器的架构?

sass - 如何使 YouTube 缩略图图像纵横比为 21 :9

android - 笔记本电脑和手机在应用响应式网页设计方面的差异

java - CSS 未在 GXT 文本区域中更新

javascript - 为什么我的 Superfish 菜单在 Firefox 中不能正常工作?

iphone - iPhone 和 iPad 中的 SASS 后台问题