编写模块化CSS:BEM

你是否做过多页面的大型网站或者其中一部分?如果你做过,你可能意识到CSS架构不够强大所带来的恐惧。你可能还会研究如何编写可维护的CSS。

由于我们的行业很棒,我们有很多推荐的解决方案。因为专家们的纷纷加入,于是我们有BEM,OOCSS,SMACSS,Atomic Design等许多选择。

现在,问题不是痛苦“我不知道该怎么办”,而是“有这么多方法,我应该尝试哪个?我是不是应该把所有的都用一遍,是不是只有一种方法才适合我,或者我是不是应该参考它们做一个自己的架构?”

当我在寻找一个出色的CSS架构时我究竟在找什么

当我将不同的方法拼凑在一起以形成我自己的习惯时,我会寻找一下四个特点:

  • 我必须 立即知道编辑一个 class 是否安全,会不会干扰其他CSS。这是最重要的,特别是当我需要在短时间内进行修改时。我不想因改变一处而破坏别的东西。
  • 我必须 立即知道一个 class 放在这个伟大工程的什么地方,以防止大脑过载,这样我就可以快速修改 style,而不必在整个工程里前后引用。
  • class 必须 尽可能少,因为看到一长串的 class 我头很晕。
  • 我必须 立即知道一个组件是否使用了 JavaScript,所以如果我改变了它的CSS,我不会以外的破坏了任何组件。

在我的探索中,我发现 BEM命名空间 符合我寻找的标准

从BEM开始

BEM 是我的方法的基础。如果你以前从未听说过BEM,它代表 blockelementmodifier 。当你第一次接触它的时候,他看起来是那么的难看。

.block {/* styles */}
.block__element {/* styles */}
.block--modifier {/* styles */}

当我第一次看见 BEM 的时候,我就很讨厌他,甚至没有给他一次机会。我不记得是什么驱使我尝试 BEM 的,但我现在深深地知道他有多么的强大。让我来完整的解释一下 BEM 是什么(当然,包括了我自己的理解)。

一个块就是一个组件。这有点抽象,让我们用示例来学习。

假设您在建立一个联系表单。在这种情况下,这个表单可以是一个块。在 BEM 中块被写为像 class 的名字一样,如下所示:

.form {/* styles */}

BEM 使用 .form 而不是

元素的原因是因为 类允许无限的可重用性,而即使是最基本的元素也可能改变样式。

按钮很好的阐释了可以包含不同样式的块。如果将

你可能感兴趣的:(编写模块化CSS:BEM)