0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【備忘録】BEM記法について

Posted at

はじめに

BEM記法でマークアップする機会があった。
BEMの備忘録。

BEMとは

BEMはCSSの設計手法のひとつ。
もともとロシアのYandex社が開発した「BEM Tools」のこと指すらしい。

いいCSSは、予測がしやすくて拡張性があり保守性があることが重要だと言われていて、比較的大規模なプロジェクトだと、複数人で作業することが多く、その際に作業の効率化や品質を担保が出来る。

BEMは、webサイトの各要素をブロック(Block)として考える。
各ブロックの中にはタイトルやテキスト、ボタンなどさまざまな要素(Element)があり、Elementの組み合わせでブロックを構成する。
ブロックやElementは装飾や動作のパターンをModifierというルールで設定する。

CSSの設計手法にはBEM以外にも

  • OOCSS  
  • SMACSS
  • FLOCSS
    などがある。

BEMの書き方(ルール)

先述の通り、BEMはブロックと要素(エレメント)と装飾を組み合わせて下記のようにクラスを定義する。

Block__Element--Modifier

例えばヘッダー(.header)をブロックとして定義して、その中にメニュー(.menu)があるとすると。

header__menu(Block__Element)

というように書く。

menuはヘッダーを構成するelementにもなるが、menu自体がブロックであると定義もできる。
例えば、下記のようなHTML構造の場合。

<header class="header">
    <div class="menu">
        <ul class="list">
            <li class="listitem"><a href="menu1">メニュー</a></li>
            <li class="listitem"><a href="menu2">メニュー</a></li>
            <li class="listitem"><a href="menu3">メニュー</a></li>
        </ul>
    </div>
</header>

BEMだとこう書く。

<header class="header">
    <div class="header__menu">
        <ul class="header__list">
            <li class="header__listitem"><a href="menu1">メニュー</a></li>
            <li class="header__listitem"><a href="menu2">メニュー</a></li>
            <li class="header__listitem"><a href="menu3">メニュー</a></li>
        </ul>
    </div>
</header>

ただ、「header__listitem」の中にさらに要素があったり、メニュー以外に色々なパーツが入ってくると、elementとして定義すると読みづらくなる。(個人的に)

なのでmenuをブロックと定義して、

<header class="header">
    <div class="header__menu menu">
        <ul class="menu__list">
            <li class="menu__listitem"><a href="menu1">メニュー</a></li>
            <li class="menu__listitem"><a href="menu2">メニュー</a></li>
            <li class="menu__listitem"><a href="menu3">メニュー</a></li>
        </ul>
    </div>
</header>

と書くこともできる。

この設計を考えながらマークアップしていく。

結局、正解はあるけどない

BEM記法はどこをブロックにしてどこをエレメントにするかは実装者やプロジェクトによっても様々。
ブロックにした理由や考え方を説明できるようにしてマークアップをすることが大切!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?