使用边界元法进行大型布景设计

Using BEM for large set design

提问人:Mykyta Severyn 提问时间:9/23/2023 最后编辑:Mykyta Severyn 更新时间:11/8/2023 访问量:27

问:

我对如何解决类的名称问题很感兴趣。例如,第一部分(英雄)我有 30+ 个选项。它们内部具有不同的结构和不同的块。

一方面,它们是完全不同的块,它们的样式可能与第一个变体完全不同。从用户的角度来看,它看起来像一个块的变体。

我倾向于这样称呼这些部分:

  • .hero01
  • .hero01__container
  • .hero02
  • .hero02__container

但是如此大量的新类只是令人困惑。另一方面,我不希望有人不小心更改所有容器的样式,而只更改本节中使用的样式。

我想弄清楚什么最适合用于具有不同结构的变体名称。

CSS 前端 命名约定 bem

评论

0赞 Apodemus 9/25/2023
如果这些元素可以完全不同,那么最好不要让它们共享相似的类名以避免混淆?
0赞 Apodemus 9/25/2023
另外,请举例说明你的代码,“它不同”没什么好说的。
0赞 Mykyta Severyn 10/2/2023
@Apodemus我不是来自代码,而是来自结构。在某个地方,左边会有经典文字,右边有图片。但是侧面可以有图片,中间可以有文字。然后可以有视频背景、滑块等。我不知道想出 30+ 个不同的职业来描述第一个英雄部分有多现实。+ 收藏可能会增长甚至更多。

答:

0赞 Marina Petrova 11/8/2023 #1

BEM 不赞成使用非描述性类名,例如 ,您提出此类问题是正确的。.hero01

如果我正确理解了您的困境,我建议使用 BEM 混合。这意味着,您可以在一个节点上混合不同的类名。

将所有英雄变体的常见样式移动到一个类中,为了简单起见,我们称之为 - 我相信不会有太多,也许会有一些类似的填充、显示、定位、文本属性、默认背景......你的名字。.hero

然后根据需要创建任意数量的类,以设置所有英雄变体的样式。

  • 它们的名称可能完全无关——想象一下,您将能够在另一个地方重用此结构,因此请有意义地命名它们,例如:、、。hero.picture-text.video-hero.slider
  • 它们应该包含更具体的 CSS:间隙、大小、颜色等。这个CSS可以覆盖你为主要内容设置的一些默认样式(所以它们的描述应该在类之后,而不是之前)。.hero.hero
  • 要使用这种方法,只需将两个类添加到一个 HTML 节点中,如下所示: — 因此,两组 CSS 规则都将应用于一个元素。<section class="hero slider">
  • 不要犹豫,对嵌套节点执行相同的操作,例如:
<section class="hero picture-text">
  <div class="hero__container picture-text__container">
    <h2 class="picture-text__title">Title</h2>
    ...
  </div>
</section>

不要忘记使您的标记和样式灵活且可调整。这样一来,你就可以简单地将不同数量的文本块或图像插入到同一个容器中,并且UI不会中断,需要立即进行重大重构。

希望对您有所帮助!让我知道任何问题。

评论

0赞 Mykyta Severyn 11/9/2023
这看起来很棒!它将帮助我保持类的长度,而不是重复样式。