25
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Ateam Finergy Inc.Advent Calendar 2019

Day 20

BEM(MindBEMding)についてややこしくない説明をしてみた

Last updated at Posted at 2019-12-19

エイチームフィナジー アドベントカレンダー2019 の20日目 を担当させていただきます!

背景

直近の自分の役割として、主にマークアップ寄りの仕事が多いのですが、担当しているサービスでSCSSをBEMというルールの設計方法で実装しており、BEMの知識や考え方をマスターする必要があるため、備忘録を兼ねて記事を書いていきたいと思います。

そのため、自分と同じように 「BEMって??」 という方や 「BEMをサッと理解したい!」 という方へ、理解度がアップする一助になれば、と思います!

BEMについて

BEMとは?

CSSの記述方法論のこと (CSSセレクタの「命名規則」)

BEMは、BlockElementModifierという3つの概念を理解できれば、
あとはclass名の命名規則に則って記述するだけの単純な方法です。

基本的な考え方

MindBEMding
MindBEMding(マインドベムディング)と呼ばれる命名法をベースとしている。
MindBEMding が BEM と呼ばれることが多い。
https://github.com/manabuyasuda/styleguide/blob/master/how-to-bem.md

シングルクラス
「1つの要素に対して、1つのクラスを指定する」で設計している。

BEMでの命名方法

以下の3つの概念で、それぞれを分けて考えていくことでCSSを設計・命名していく

Block(ブロック)      : 大きい塊。Elementの親要素。
Element(エレメント)   : Blockの子要素。
Modifier(モディファイア) : BlockとElementの修飾。

どうやって使うの?

BlockElement は、アンダースコア2つで区切る

block__element

BlockModifier は、ハイフン2つで区切る

block--modifier

ElementModifier も、ハイフン2つで区切る

block__element--modifier

ファイル例①

「content」 というクラス を Block、その子要素 を Element とした場合、
以下の書き方ができます。

index1.html
<div class="content">
  <h1 class="content__title">
    タイトル
  </h1>
  <p class="content__text">
    テキスト
  </p>
</div>
index1.scss
.content {
  width: 100%;

  &__title {
    font-size: 20px;
  }
  &__text {
    font-size: 14px;
  }
}

ファイル例②

「content」 というクラスを Block、その修飾 を Modifier とした場合、
以下の書き方ができます。

index2.html
<div class="content--red">
  <h1 class="content__title">
    タイトル
  </h1>
  <p class="content__text">
    テキスト
  </p>
</div>
index2.scss
.content {
  width: 100%;

  &--red{
    background-color: red;
  }
  &__title {
    font-size: 20px;
  }
  &__text {
    font-size: 14px;
  }
}

ファイル例③

「content」 というクラス を Block、その子要素 を Element とし、その修飾 を Modifier とした場合、以下の書き方ができます。

index3.html
<div class="content">
  <p class="content__text--red">
    赤いテキスト
  </p>
  <p class="content__text--blue">
    青いテキスト
  </p>
</div>
index3.scss
.content {
  width: 100%;

  &__text {
    font-size: 14px;

    &--red{
      color: red;
    }
    &--blue{
      color: blue;
    }
  }
}

BEMを採用するメリットは?

複数人での開発がスムーズになる

BEMはルールがしっかりしているため、複数の人が開発に関わり、長く運用されるプロジェクトに特に向いていると言えます。
例として、期間限定(キャンペーンページなど)サイトなどでも素早く開発を行えるため、BEM を採用する価値はあります。

修正対応コストを低減できる

BEM は プロジェクトの成長と共に既存ページが変化していくこと を前提に考え出された手法です。内容に変更があった場合、その修正対応コストをできるだけ低減することができます。

コードの再利用性が容易になる

BEM は Webサイトを構成するパーツを独立して設計することができるため、コードの再利用が容易になります。(再利用は、CSSだけでなくJavaScript にも及びます。)

などなど、、

まとめ

いかがでしたでしょうか?
BEMで書いたコードを初めて見たときは、クラス名が長くてどうしても複雑そうに見えますが、シンプルで分かりやすく破綻しづらいコードを書くことができるようになります。

もしBEMが採用されているプロジェクトにアサインされているマークアップ担当の方は、ぜひ実際にBEMでコードを書いてみていただければと思います!

参考

25
16
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
25
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?