首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BEM中的继承

BEM中的继承
EN

Stack Overflow用户
提问于 2021-06-24 17:18:03
回答 2查看 36关注 0票数 0

我手头上有几个滥用BEM的案例,其中块的层次结构从一开始就搞砸了,这导致了很难维护的湿CSS代码。

简单地说:

代码语言:javascript
复制
.about-us {
  &__title {
    font-size: ...; // Same
    font-weight: ...; // Same
  }
  &__content {
    font-size: ...; // Same
  }

  &__faces { ... } // Different;
}

.catalogue {
  &__title {
    font-size: ...; // Same
    font-weight: ...;  // Same
  }
  &__content {
    font-size: ...;  // Same

    &-features { ... } // Different
  }
  ...
}

.catalogue-item {
  &__title {
    font-size: ...; // Same
    font-weight: ...;  // Same
    text-align: ...; // Different
  }
  &__content {
    font-size: ...;  // Same
  }
  ...
}

它假设不同页面的样式可能不同,但几乎所有负责总体网站外观(排版等)的样式都有效地保持不变-或者至少应该保持不变。

特定的样式是否应该继承自常见的样式?E.g

代码语言:javascript
复制
.catalogue {
  &__title {
    @extends .page__title;
    ...

它们应该共存吗?例如。

代码语言:javascript
复制
<div class="page catalogue">
  <h1 class="page__title catalogue__title">...

真实的示例要复杂得多,因此针对代码的特定修复将不起作用。我想知道的是,BEM方法通常是如何解决这种情况的,以及解决这个问题的常见方法是什么。

EN

回答 2

Stack Overflow用户

发布于 2021-06-24 17:29:39

不,在我的书里没有。这首先会违背BEM的宗旨。

您看,您应该坚持使用BEM的主要原因是:分离关注点。您可以将其称为封装。

如果你开始使用一般的CSS类,你将打破封装,CSS规则将无处不在。这不是你想要的。它将更难维护,因为它将使测试非常,非常,非常 aufwendig和错误容易。

因为您使用的是SASS,所以您可能想要这样做。

代码语言:javascript
复制
$global-font-size-normal: X;
$global-font-weight-normal: Y;
$global-font-size-extra: A;
$global-font-weight-extra: B;

// ...

$about_us-font-size: $global-font-size-normal;
$about_us-font-weight: $global-font-weight-normal;
$about_us_faces-font-size: $global-font-size-extra;

.about-us {
  &__title {
    font-size: $about_us-font-size;
    font-weight: $about_us-font-weight;
  }
  &__content {
    font-size: $about_us-font-size;
  }

  &__faces { 
    font-size: $about_us_faces-font-size;
  };
}

// ... etc.
票数 2
EN

Stack Overflow用户

发布于 2021-06-24 17:27:23

BEM只描述了你的类名应该是什么;你可以随心所欲地安排你的CSS。正如您已经发现的,使用样式继承将常见样式添加到特定类中效果很好。

代码语言:javascript
复制
<div class="page catalogue">
  <h1 class="page__title catalogue__title">...

在本例中,您的<h1>应该只有catalogue__title类。如果你想要一个看起来像page__titlecatalogue__title,你可以在你的CSS中描述它--例如,使用继承。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68112955

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档