予想以上に実用的!CSSを効率的にマークアップする概念「BEM」とは?
ホームページの構築作業に関わっていると、「もっとCSSを効率的に書きたい」と感じたことが一度はあるのではないでしょうか。
CSSが1996年に誕生してから20年以上経ち、サポート等は充実してきたものの書き方については特段簡素化されてはいません。
その中で「もっと効率的にCSSを書きたい」という要望を拾って具体化されていったのがBEM(ベム)と呼ばれる概念です。
CSSを効率的に書くことは、時間の短縮になるだけでなく、保守運用の面でもメンテナンスしやすくなります。
今回は、CSSを機能的にマークアップする概念「BEM」について、基本的な考え方や具体的なコーディング方法を解説します。
BEMが生まれるまで
Built on Pablo
比較的小規模のサイトであれば、体系的にCSSを書く必要はあまりないかもしれません。
小規模サイトの場合は簡単なCSSを早速書いてみたり、SASSのようなプリプロセッサーを使ったりして構築を行うでしょう。
SASSは、プログラミングの知識があればより機能を活かしたコーディングを行うこともできます。
しかしながら、より大きく複雑なプロジェクトになれば、コードを体系的に書くことで効率性や機能性を高めることができます。
また、シンプルにすればするほど、ブラウザがコードを読み込む時間も早くなり、保守点検を行う際にもメンテナンスしやすくなります。
そうした点から、CSSを効率的に書くために、これまでもたくさんのメソッドが登場しました。
例えば、OOCSSは、コンテナーとコンテンツをCSSオブジェクトで分けて記述しようとしてきました。
また、SMACSSと呼ばれる書き方では、CSSの記述ルールを5つのカテゴリーに分けることで書き方を簡素化しようとしました。
SUITCSSではUIコンポーネントを効率的に構築するために、構造的なクラス名を付けることを推奨してきました。
そして、以前ferretでも紹介したAtomic Designでは、粒度の段階を定めることで俯瞰して構築できるようにしていきました。
こうしたメソッドのどれを選んでみても、体系的な構造のCSSやUIの利点を活かすことは可能です。
制限が少なくより柔軟なフレームワークもあれば、簡単に理解でき、プロジェクトに採用しやすいものもあります。
それでもBEMが選ばれるのは、SMACSSほど初めてのひとでも困惑することなく、OOCSS以上に体系だった記述ができ、理解しやすい用語で説明できるからです。
そのようなわけで、ブロックを組み立てるように構築することから2009年の登場当初「レゴ」と呼ばれていたBEMが普及していったのです。
BEMとは何か?
それでは、BEMとは、一体どのようなものでしょうか。
BEMとは、「Blocks」(かたまり)「Elements」(要素)「Modifiers」(状態)の3つの頭文字を取ったもので、その名の通り3つの考え方をクラス名で体系的につけていく方法です。
BEMをもとに作成
Blockとは、独立した意味の塊で、もう少しざっくり言えば親要素となります。
Elementは、Blockの中に含まれるパーツのことで、Blockに対する子要素ということもできます。
Modifierは、BlockやElementに対するフラグのようなものです。
見た目や状態(disabledやfocus、highlightedやsize-bigなど)の情報を付け加えます。
例えば、以下の画像はGitHubのトップページのキャプチャーですが、これをBlock・Element・Modifierに分けると、次のようになります。
BEMをもとに作成
BEMにおける命名規則
BEMでは、命名規則が明確に定義されているので、BEMを知っている人であればコードを見ただけでどれがどんなパーツになるのかが一目瞭然です。
裏を返すと、BEMを使うために命名規則を学ぶ必要があります。
しかしながら、BEMの命名規則は非常にシンプルです。
ここでは、Block・Element・Modifierのそれぞれの命名規則に関して確認していきましょう。
1. Block
Built on Pablo
Blockでは、それ自身で意味のある部品の名前をつけていきます。
Blockは入れ子にしたりお互いにインタラクションを起こしたりできますが、文法上は対等に扱います。
DOM表現(コントローラーやモデル)のない要素もブロックとして扱います。
● HTML
HTML要素は下記のようにクラス名が付けばBlockとします。
<div class=“block”>・・・</div>
● CSS
CSSでは、以下のように、HTML要素は付けずに、クラス名のセレクターだけにします。
タグ名やidを付けることもありません。
.block { color: #0060e6; }
2. Element
Built on Pablo
Elementは、Blockの中にあるもので、それ単体では意味のあるパーツにならないものを指します。
すべてのElementはBlockと紐づけて考えます。
Elementは通常、Blockの後ろに2つのアンダースコアをつけて命名します。
● HTML
Blockの中にあるHTML要素はすべてElementと考えます。
あるBlockの中では、すべてのElementは対等に扱います。
<div class=“block”>
<span class=“block__element”>Home</span>
<span class=“block__element”>Menu</span>
</div>
● CSS
Blockと同じように、クラス名のセレクターだけで書いていきます。
同じページ上の別のBlockやElementに依存してはいけません。
.block__element { color: #0060e6; }
以下のようにBlockと続けて書いたり、HTML要素の後ろに続けて書いてはいけません。
.block .block__element { color: #0060e6; } // ×
div.block__element { color: #0060e6; } // ×
3. Modifier
Built on Pablo
ModifierはBlockやElementのフラグのようなものです。
フラグをつけるには、BlockやElementの前にダッシュを2つつけて命名し、値がある場合はその後ろにもう一つダッシュをつけます。
「.block—modifier」のようにBlockにつくこともあれば、「.block__element--modifier」のようにElementにつくこともあります。
● HTML
Modifierはあくまでもオリジナル要素に対して色や大きさを変えるだけの役割を持っています。
<div class=“block block—mod”>
<span class=“block__element block__element—modifier”>Home</span>
<span class=“block__element”>Menu</span>
</div>
ただし、以下のようにModifierだけを単独でマーキングしてはいけません。
<div class=“block—modifier”>・・・</div> // ×
● CSS
Modifierも、CSSで記述するときには単独で書きます。
.block—modifier { color: #999; }
ただし、Modifierに関しては、BlockレベルのModifier付きの下にElementを書いてもいいことになっています。
.block—modifier .block__elem { color: #999; }
CSSをBEMで記述するメリット
1. 構造体系が明確化する
あるページにおいてBlockスタイルは他のElementと競合することはないので、構造体系が明確になります。
また、あるプロジェクトでBEMが出来上がれば、それをフレームワークのようにして他のプロジェクトで使い回すこともできるようになります。
2. 再利用とメンテナンス
さまざまな方法で独立したBlockを構築し、かしこく再利用することができれば、メンテナンスを行う必要のあるCSSコードの量が大幅に減ります。
まとめ
初めてBEMを見た人は、「ダッシュやアンダースコアが2個もあって美しくない」と感じるかもしれませんが、「堅固かつ流用可能で短く書けるCSS設計」として突き詰めていけばBEMが非常に効率的であることがわかります。
上記のような不満からBEMの書き方をカスタマイズして書く方法もありますが、グローバルスタンダードの書き方を覚えれば、他のフレームワークでBEMが使われていたときに構造を理解しやすかったり、共通言語となったりするので、正規の書き方は覚えておいて損することはありません。
ぜひBEMを使って効率的なCSSを構築していきましょう。
- ページ
- 印刷物のカタログやパンフレットは、通常複数のページから成り立っています。インターネットのホームページもまったく同じで、テーマや内容ごとにそれぞれの画面が作られています。この画面のことを、インターネットでも「ページ」と呼んでいます。ホームページは、多くの場合、複数ページから成り立っています。
- CS
- CSとはCustomer Satisfactionの略称で「顧客満足度」を意味します。顧客との関係維持、サービスの発展に関するマーケティング戦略に関わる用語です。
- CS
- CSとはCustomer Satisfactionの略称で「顧客満足度」を意味します。顧客との関係維持、サービスの発展に関するマーケティング戦略に関わる用語です。
- CS
- CSとはCustomer Satisfactionの略称で「顧客満足度」を意味します。顧客との関係維持、サービスの発展に関するマーケティング戦略に関わる用語です。
- CS
- CSとはCustomer Satisfactionの略称で「顧客満足度」を意味します。顧客との関係維持、サービスの発展に関するマーケティング戦略に関わる用語です。
- CS
- CSとはCustomer Satisfactionの略称で「顧客満足度」を意味します。顧客との関係維持、サービスの発展に関するマーケティング戦略に関わる用語です。
- CS
- CSとはCustomer Satisfactionの略称で「顧客満足度」を意味します。顧客との関係維持、サービスの発展に関するマーケティング戦略に関わる用語です。
- CS
- CSとはCustomer Satisfactionの略称で「顧客満足度」を意味します。顧客との関係維持、サービスの発展に関するマーケティング戦略に関わる用語です。
- CS
- CSとはCustomer Satisfactionの略称で「顧客満足度」を意味します。顧客との関係維持、サービスの発展に関するマーケティング戦略に関わる用語です。
- コンテンツ
- コンテンツ(content)とは、日本語に直訳すると「中身」のことです。インターネットでは、ホームページ内の文章や画像、動画や音声などを指します。ホームページがメディアとして重要視されている現在、その内容やクオリティは非常に重要だと言えるでしょう。 なお、かつてはCD-ROMなどのディスクメディアに記録する内容をコンテンツと呼んでいました。
- CS
- CSとはCustomer Satisfactionの略称で「顧客満足度」を意味します。顧客との関係維持、サービスの発展に関するマーケティング戦略に関わる用語です。
- CS
- CSとはCustomer Satisfactionの略称で「顧客満足度」を意味します。顧客との関係維持、サービスの発展に関するマーケティング戦略に関わる用語です。
- UI
- UIとは、ユーザーインターフェイス(User Interface)の略で、ユーザー(使い手)とデバイスとのインターフェイス(接点)のことを意味します。
- CS
- CSとはCustomer Satisfactionの略称で「顧客満足度」を意味します。顧客との関係維持、サービスの発展に関するマーケティング戦略に関わる用語です。
- UI
- UIとは、ユーザーインターフェイス(User Interface)の略で、ユーザー(使い手)とデバイスとのインターフェイス(接点)のことを意味します。
- フレームワーク
- フレームワークとは、アプリケーションソフトを開発する際によく必要をされる汎用的な機能をまとめて提供し、アプリケーションの土台として機能するソフトウェアのことです。 元々は枠組み、下部構想、構造、組織という意味の英単語です。アプリケーションのひな形であり、これを開発に利用することで、大幅な効率の向上が見込めます。
- CS
- CSとはCustomer Satisfactionの略称で「顧客満足度」を意味します。顧客との関係維持、サービスの発展に関するマーケティング戦略に関わる用語です。
- トップページ
- インターネットのWebサイトの入り口にあたるページのことをトップページといいます。 一般的には、階層構造を持つWebサイトの最上位のWebページをさします。サイト全体の顔としての役割も果たすため、デザインなどで印象を残すことも考えたサイト作りも有効となります。
- キャプチャ
- キャプチャとは、出力されたデータを別の機器で取り込み利用可能な状態にすることを言います。例としては、TV映像をパソコンに取り込み、その映像を保存(キャプチャ)し、パソコンで再生可能にすることなどです。ホームページの分野では、ブラウザなどでホームページのデザインを画像として保存することなどを指すこともあります。
- インタラクション
- 交流、相互作用、対話などの意味を持つ英単語で、ふたつ以上の存在が互いに影響を及ぼしあうことです。ITの分野においては、主に人間とシステム(コンピューター)の間の情報のやりとりのことを指し、人間の操作や入力に対するシステムの反応や出力(アクションとリアクション)、対話的な操作方法、の意味で用いられることが多いです。
- HTML
- HTMLとは、Webページを記述するための言語です。"HyperText Markup Language "の略です。"<"と">"にはさまれたさまざまな種類の「タグ」によって、文章の構造や表現方法を指定することができます。
- CS
- CSとはCustomer Satisfactionの略称で「顧客満足度」を意味します。顧客との関係維持、サービスの発展に関するマーケティング戦略に関わる用語です。
- HTML
- HTMLとは、Webページを記述するための言語です。"HyperText Markup Language "の略です。"<"と">"にはさまれたさまざまな種類の「タグ」によって、文章の構造や表現方法を指定することができます。
- タグ
- タグとは、原義では「モノを分類するために付ける小さな札」のことです。英語の「tag」を意味するものであり、荷札、付箋といった意味を持っています。特にインターネットに関する用語としてのタグは、本文以外の情報を付与するときに用いられます。
- HTML
- HTMLとは、Webページを記述するための言語です。"HyperText Markup Language "の略です。"<"と">"にはさまれたさまざまな種類の「タグ」によって、文章の構造や表現方法を指定することができます。
- ページ
- 印刷物のカタログやパンフレットは、通常複数のページから成り立っています。インターネットのホームページもまったく同じで、テーマや内容ごとにそれぞれの画面が作られています。この画面のことを、インターネットでも「ページ」と呼んでいます。ホームページは、多くの場合、複数ページから成り立っています。
- HTML
- HTMLとは、Webページを記述するための言語です。"HyperText Markup Language "の略です。"<"と">"にはさまれたさまざまな種類の「タグ」によって、文章の構造や表現方法を指定することができます。
- CS
- CSとはCustomer Satisfactionの略称で「顧客満足度」を意味します。顧客との関係維持、サービスの発展に関するマーケティング戦略に関わる用語です。
- ページ
- 印刷物のカタログやパンフレットは、通常複数のページから成り立っています。インターネットのホームページもまったく同じで、テーマや内容ごとにそれぞれの画面が作られています。この画面のことを、インターネットでも「ページ」と呼んでいます。ホームページは、多くの場合、複数ページから成り立っています。
- フレームワーク
- フレームワークとは、アプリケーションソフトを開発する際によく必要をされる汎用的な機能をまとめて提供し、アプリケーションの土台として機能するソフトウェアのことです。 元々は枠組み、下部構想、構造、組織という意味の英単語です。アプリケーションのひな形であり、これを開発に利用することで、大幅な効率の向上が見込めます。
- CS
- CSとはCustomer Satisfactionの略称で「顧客満足度」を意味します。顧客との関係維持、サービスの発展に関するマーケティング戦略に関わる用語です。
- CS
- CSとはCustomer Satisfactionの略称で「顧客満足度」を意味します。顧客との関係維持、サービスの発展に関するマーケティング戦略に関わる用語です。
- フレームワーク
- フレームワークとは、アプリケーションソフトを開発する際によく必要をされる汎用的な機能をまとめて提供し、アプリケーションの土台として機能するソフトウェアのことです。 元々は枠組み、下部構想、構造、組織という意味の英単語です。アプリケーションのひな形であり、これを開発に利用することで、大幅な効率の向上が見込めます。
- CS
- CSとはCustomer Satisfactionの略称で「顧客満足度」を意味します。顧客との関係維持、サービスの発展に関するマーケティング戦略に関わる用語です。
おすすめ記事
おすすめエントリー
同じカテゴリから記事を探す
カテゴリから記事をさがす
●Webマーケティング手法
- SEO(検索エンジン最適化)
- Web広告・広告効果測定
- SNSマーケティング
- 動画マーケティング
- メールマーケティング
- コンテンツマーケティング
- BtoBマーケティング
- リサーチ・市場調査
- 広報・PR
- アフィリエイト広告・ASP
●ステップ
●ツール・素材
- CMS・サイト制作
- フォーム作成
- LP制作・LPO
- ABテスト・EFO・CRO
- Web接客・チャットボット
- 動画・映像制作
- アクセス解析
- マーケティングオートメーション(MA)
- メールマーケティング
- データ分析・BI
- CRM(顧客管理)
- SFA(商談管理)
- Web会議
- 営業支援
- EC・通販・ネットショップ
- 口コミ分析・ソーシャルリスニング
- フォント
- 素材サイト
●目的・施策
- Google広告
- Facebook広告
- Twitter広告
- Instagram広告
- LINE運用
- LINE広告
- YouTube運用
- YouTube広告
- TikTok広告
- テレビCM
- サイト制作・サイトリニューアル
- LP制作・LPO
- UI
- UX
- オウンドメディア運営
- 記事制作・ライティング
- コピーライティング
- ホワイトペーパー制作
- デザイン
- セミナー・展示会
- 動画・映像制作
- データ分析・BI
- EC・通販・ネットショップ
- 口コミ分析・ソーシャルリスニング