BEMの命名仕様
3703 ワード
基本概念
CSSの命名規範はBEM規範とも呼ばれ、混乱を終わらせる命名方式であり、意味化されたCSS命名方式に達する.BEMは3つの単語の略語である:Block(ブロック)はより高いレベルの抽象またはコンポーネント、Element(要素)Blockの子孫、およびModifier(修飾)の異なる状態の修飾子を表す.
命名方法:
.block__element--modifier { display: flex; } .block--modifier { display: flex; } .block__element { display: flex; }
通过BEM的命名规范我们可以达到一个什么目的呢?就是有一个清晰的描述,从上面的代码中我们可以看到一层一层的清晰明了,而且有一个清晰的结构。
1 block
block 代表一个更高级别的抽象或者是一个组件,它仅仅作为一个边界。它主要的功能有下面三点:
负责描述功能的,不应该包含状态。
/* correct */
.header {
}
/* wrong */
.header--select {
}
自分のレイアウトに影響しないで、具体的なスタイルを含まないで、つまりblockの中でスタイルを加えるべきではありません
/* correct */
.header {
}
/* wrong */
.header {
margin-top: 50px;
}
エレメントセレクタとIDセレクタは使用できません
/* correct */
.header {
}
/* wrong */
.header a {
margin-top: 50px;
}
2 Element
二重下線で区切られています
/* correct */
.header__body {
margin-top: 50px;
}
/* wrong */
.header .body {
margin-top: 50px;
}
ステータスではなく目的を表します.次の例では、ヘッダーの下に3つの領域body、logo、titleを定義することを目的としていますが、ステータスは指定されていません.
.header__body {
margin-top: 50px;
}
.header__logo {
margin-top: 50px;
}
.header__title {
margin-top: 50px;
}
Blockの親から独立して使用できません
/* correct */
3 Modifier
表示的是一个状态,是用双横杠分开的。
.header__button--default {
background: none;
}
Boolean
.header__button--select {
background: none;
}
.header__button--primary {
background: #329FD9;
}
単独では使用できません
/* correct */
BEMのプリプロセッサ言語での使用
在Sass中的使用
.header {
&__body {
padding: 20px;
}
&__button {
&--primary {
background: #329FD9;
}
&--default {
background: none;
}
}
}
Lessでの使用
@classname: header;
.@{classname} {
.@{classname}__body {
padding: 20px;
}
.@{classname}__button {
.@{classname}__button--primary {
background: #329FD9;
}
.@{classname}__button--default {
background: none;
}
}
}