• aboutabout
  • servicesservices
  • worksworks
  • mediamedia
  • contactcontact
  • homeサイトトップ
  • about会社概要
  • services業務内容
  • works実績紹介
  • mediaメディア
  • contactお問い合わせ
ja/

media

メディア

  1. サイトトップ
  2. メディア
  3. Web開発の記事
  4. CSSのメンテナンスを向上させるコーディング設計の「FLOCSS」と「BEM」について考えてみる

CSSのメンテナンスを向上させるコーディング設計の「FLOCSS」と「BEM」について考えてみる

  • 2018.01.27
  • Web開発
  • システム・コーディング設計
Updated: 2018.01.25
ウェブサイトは完成してからも改修が行われることが前提ですので、コーディング時には拡張性や運用保守のしやすさ、またコードの読みやすさなどが重要になります。さらに大規模なサイトの場合ですと複数人で開発することもありますので、コーディングのルールや設計方針なんかも必要になります。   今回は「FLOCSS」や「BEM」といったCSSにおけるコーディング設計方法について考えていきたいと思います。  
近年のCSSコーディングについて
サイトのデザインやレイアウトを表現するCSSですが、近年ではCSSで様々な表現や機能を実現できるようになりました。それに合わせてよりコーディングが複雑にもなってきています。そこでCSSを効率よく書けるように、SassやLessといったCSSの拡張メタ言語といったものが普及してきました。   それだけでなくclassなどの命名規則やファイルの構成といったところで規約なども考えられるようになりました。規約を設けることで共通の認識ができたり、運用保守においてたくさんのメリットが生まれました。   ここでいうコーディング設計の規約は数多くの考えかたや種類があるのですが、今回は「FLOCSS」と「BEM」についてまとめていきたいと思います。  
フォルダ・ファイル構成のベースとなる考え方の「FLOCSS」
CSSファイルが複数あるケースでは、構成のルールが無いと要素のスタイルを変更したい場合に、どのファイルを編集すればいいかわからなくなります。そこでFLOCSSという考え方を使います。   FLOCSSとは「Foundation」「Layout」「Object 」のレイヤーからなるファイルの構成ルールです。わかりやすくいうとスタイルの目的や部位によってCSSファイルを切り分ける考え方です。この中でObjectにはさらに「Component」「Project」「Utility」という3つのレイヤーに分かれます。   まず「Foundation」ですが、ここにはスタイルのリセット(reset.cssやnormalize.css)や基本となるスタイル、Sassであれば変数をまとめたりします。次に「Layout」ではページを構成する共通部分の要素や大まかな全体のスタイルを記述していきます。   最後の「Object 」にはモジュール化されたパーツや、それらを構成する要素に関するスタイルを記述します。先述の通り、さらに3つのレイヤーに分けられ「Component」には共通部分の要素を。「Project」にはページ固有といった共通ではない要素のスタイルを記述していきます。「Utility」はそれらの区分とは別に汎用性のあるスタイルをまとめていきます。   FLOCSSでは、数多くのCSSファイルが必要となるケースや、最終的にコンパイルして複数のファイルを1つに結合するSassを使う場合に効果的です。以下に例としてFLOCSSを採用したファイル構成を上げております。 ┳ style.scss   ┣ 【foundation】     ┣ _reset.scss(スタイルリセット用)     ┗ _variable.scss(変数の値まとめ用)   ┣ 【layout】     ┣ _header.scss(ヘッダーに適用するスタイル)     ┣ _footer.scss(フッターに適用するスタイル)     ┗ _sidebar.scss(サイドバーに適用するスタイル)   ┗ 【object】     ┣ 【component】       ┗ _common.scss(共通部分の要素に適用するスタイル)     ┣ 【project】       ┣ _frontpage.scss(トップページ内で使用するスタイル)       ┣ _archive.scss(一覧ページ内で使用するスタイル)       ┗ _single.scss(詳細ページ内で使用するスタイル)     ┗ 【utility】       ┣ _mg.scss(マージンの値まとめ用)       ┣ _pd.scss(パディングの値まとめ用)       ┣ _btn.scss(ボタン要素に適用するスタイル)       ┣ _heading.scss(見出し要素に適用するスタイル)       ┣ _form.scss(フォーム要素に適用するスタイル)       ┣ _list.scss(リスト要素に適用するスタイル)       ┗ _table.scss(テーブル要素に適用するスタイル)   これらは一例ですのでプロジェクトによってどのように切り分けるかを考える必要があります。またFLOCSSではclassの命名規則としてF・L・Oの頭文字をそれぞれ対応するスタイルにプレフィックスとして以下のように追記します。
.l-header {
   width: 100%;
   background: #fff;
}
.o-btn-default {
   border: 1px solid #ddd;
   text-align: center;
}
 
classの命名規則に用いる考え方の「BEM」
ファイルやフォルダ構成が整っていても、その中でclass名がバラバラだと混乱してしまいます。ですのでclass名にも命名規則を設けることも大切です。その時に用いる考え方に「BEM」というものがあります。   BEMというのは「Block」「Element」「Modifier」のそれぞれ頭文字を取ったもので、Blockは要素の集まり、Elementは最小単位の要素、Modifierはそれら要素のステータスを示します。(この中でModifierはさらにkeyとvalueという形で表現されるケースもあるようです)   少しわかりにくいので実際に使う命名規則を見ていきたいと思います。以下は例としてサイトのグローバルナビでBEMの命名規則に沿ってclass名をつけています。
<nav class="gnav">
   <ul class="gnav-list">
     <li class="gnav-list__item gnav-list__item--current"><a href="">Navi 1</a>
     </li>
     <li class="gnav-list__item"><a href="">Navi 2</a>
     </li>
     <li class="gnav-list__item"><a href="">Navi 3</a>
     </li>
     <li class="gnav-list__item"><a href="">Navi 4</a>
     </li>
  </ul>
</nav>
  また、BEMでは「_」(アンダースコア)と「-」(ハイフン)を使い分けるという決まりがあります。以下のようにBlockとElementの間にはアンダースコアを2つ、ElementとModifierの間にはハイフンを2つで繋げます。
Block__Element--Modifier

// Blockが複数のキーワードにわたる場合
Block1-Block2__Element--Modifier
  ただしこの形ですとclass名が長くなるという点が気になりますよね、、Sassを使う場合は入れ子で記述できるのでその点も踏まえてカスタマイズしてみます。
<nav class="gnav">
   <ul class="gnav-list">
     <li class="__item --current"><a href="">Navi 1</a>
     </li>
     <li class="__item"><a href="">Navi 2</a>
     </li>
     <li class="__item"><a href="">Navi 3</a>
     </li>
     <li class="__item"><a href="">Navi 4</a>
     </li>
   </ul>
</nav>
  どうでしょうか、かなりスッキリしましたね!Blockについては必要最低限の区分にとどめ、ElementとModifierは独立させました。Sassでスタイルを記述する場合では入れ子になるのでこのような形でもそこまでわかりにくくならないのではないでしょうか。
.gnav-list {
   // .gnav-listのスタイル
    .__item {
       // .gnav-list.__itemのスタイル
        .--current {
          // .gnav-list.__item.--currentのスタイル
        }
    } 
}
 
  いかがでしょうか、FLOCSSやBEMといったコーディング設計を採用することで、改修時の混乱を防げたり、複数人での運用保守がしやすくなったり、またclassの命名規則で迷うことも少なくなるのではないでしょうか。   これらはあくまでも厳守することが重要ではなく、それぞれのプロジェクトや案件の形によって柔軟に捉えることが大切です。コーディングの効率化にぜひ参考にしてみてはいかがでしょうか。   (参考にさせていただいたサイト様) CSSの設計 – FLOCSSをベースにしたファイルの構成と命名規則を考える BEMを参考にしたCSS設計
XでシェアLINEで送るはてブに追加

この記事を書いた人オガワ シンヤ

合同会社デザインサプライ代表兼CEO / ディレクター・ウェブデザイナー・フロントエンドエンジニアをやっています。「ウェブとデザインでヒト・モノ・サービスを繋げ新しい価値を生み出す」をコンセプトに日々奮闘中!制作中はダイエットコーラとチョコレートが欠かせないアラフォーWebクリエイター。

Sponsored Link

  • Showcase
  • Startify UI
  • Functional Gradation Generator
  • Coloooors

keyword search

categories

  • サーバー構築(31)
  • ウェブアプリケーション(12)
  • 開発環境構築(11)
  • Jamstack(6)
  • セキュリティ(4)
  • 制作・開発進行管理(2)
  • モバイルアプリ開発(2)
  • システム・コーディング設計(2)
  • PWA(1)
  • ウェブサイト保守(1)

recent articles

  • Shopifyでのテーマ開発に便利なローカル環境を構築する#2:Shopify CLI
    read more

    Shopifyでのテーマ開発に便利なローカル環境を構築する#2:Shopify CLI

    2023.05.07/開発環境構築
  • Shopifyでのテーマ開発に便利なローカル環境を構築する#1:Shopify Theme Kit
    read more

    Shopifyでのテーマ開発に便利なローカル環境を構築する#1:Shopify Theme Kit

    2023.04.29/開発環境構築
  • Docker+Laravelでバックエンドの開発環境構築とウェブアプリケーション制作#7:動的ルーティングとデータベース更新処理
    read more

    Docker+Laravelでバックエンドの開発環境構築とウェブアプリケーション制作#7:動的ルーティングとデータベース更新処理

    2023.03.23/ウェブアプリケーション
  • Docker+Laravelでバックエンドの開発環境構築とウェブアプリケーション制作#6:ミドルウェアの設定と認証ページ作成
    read more

    Docker+Laravelでバックエンドの開発環境構築とウェブアプリケーション制作#6:ミドルウェアの設定と認証ページ作成

    2023.02.10/ウェブアプリケーション
  • Docker+Laravelでバックエンドの開発環境構築とウェブアプリケーション制作#5:ログイン認証機能の実装
    read more

    Docker+Laravelでバックエンドの開発環境構築とウェブアプリケーション制作#5:ログイン認証機能の実装

    2023.01.20/ウェブアプリケーション
  • Docker+Laravelでバックエンドの開発環境構築とウェブアプリケーション制作#4:ログイン認証ユーザー作成
    read more

    Docker+Laravelでバックエンドの開発環境構築とウェブアプリケーション制作#4:ログイン認証ユーザー作成

    2023.01.13/ウェブアプリケーション
  • 次の記事
  • 一覧に戻る
  • 前の記事

まだ依頼内容が決まっていなくても、ご相談ください。

課題の整理や小さな検証、UI/UX・フロントエンドの部分的な支援から始められます。

お問い合わせやご相談はこちらから

Webサイト・プロダクトの企画設計/UI・UXデザイン/フロントエンド開発合同会社デザインサプライ(DesignSupply. LLC)

Office:大阪府大阪市天王寺区清水谷町3-22
Email:info@designsupply-web.com
home
  • サイトトップ
about
  • 3つのポリシー
  • 経営理念
  • 代表・クリエイター紹介
  • 会社概要
services
  • ビジネス・プロダクト支援
  • UI/UX・フロントエンド開発支援
  • プロジェクトの進め方・支援体制
  • エデュケーション事業
works
  • 開発プロジェクト支援
  • クリエイティブ制作
  • 自社プロダクト
media
  • デザイン
  • プログラミング
  • マーケティング
  • Web開発
  • 写真・動画制作
contact
  • お問い合わせ
news
  • インフォメーション
privacy
  • プライバシーポリシー

WE THINK WITH YOU, DESIGN FOR PEOPLE, AND BUILD WHAT WORKS.

WE THINK WITH YOU, DESIGN FOR PEOPLE, AND BUILD WHAT WORKS.

© 2013 - 2026 DesignSupply.LLC
サイトトップへ
contact