迷い人

日々勉強。勉強の先に何か見つかるといいなぁ

BEMについて

この記事は自分の理解を確認するためのアウトプット

全ては書籍「CSS設計完全ガイド」に書かれているのでそちらで。

 

BEMの基本

 

Block

・特定のコンテンツに依存しない、どこでも使い回せるパーツ

・見た目を表す命名ではなく、「それが何なのか」を表すようにする

 

(例)赤いテキストにするクラス

red-text → 見た目を表すのでNG

error-text → それが何なのかを表すのでOK

 

 

Element

・Blockを構成し、Blockの外では独立して使用できない物

・Blockの名前を継承し、アンダースコアふたつを記述し、Elemmentの名前を付ける

 

block__elemment

(例)menu__item

 

・Elemmentのネストは原則禁止

 

Modifier

・BlockもしくはElemmentの見た目や状態、振る舞いを定義する物

・BlockまたはElemmentの名前を継承し、アンダースコアひとつを記述した後にModifierの名前を付けます。

 

block___elemment_midifier

(例)menu__item_actived

(例)menu__item_text_large

 

ボタンの大きさ、色をmidiferで定義するときはきちんと分ける

以下はサイズの小さな赤いボタンの例です。

 

html

<a class="button button_size_s button_theme_caution" href="#">ボタン</a>

 

css

.button_size_s { width: 160px; } .button_size_m { width: 200px; } .button_theme_caution { background-color: red; color: #fff; }

 

Mix

・ひとつのHTML要素に、役割の異なる複数のクラスがついている状態

 

以下のようなシチュエーションで威力を発揮する

 

f:id:oyaoya1123:20200403005536p:plain

 

余白の設定はBlockではなくMixで行う

 

html

<header class="header"> <div class="logo header__logo">・・・</div> <form class="search header__search">・・・</form> </header>

 

css

.logo { ブロック内で完結するスタイリングを定義 width: 200px; height: 100px; } .header__logo { 他の要素との位置関係を調整するスタイリングを定義 margin-right: 30px; }