Web制作やWeb開発を進める中で、
- 「CSSのクラス名がぐちゃぐちゃになってしまった」
- 「後から修正しようとしたら、どこに影響が出るか分からなくて怖い」
といった経験はありませんか?
プロジェクトが大きくなるほど、CSSの管理は難しくなります。
そこで重要になるのが「CSS設計」です。
世の中にはOOCSSやSMACSSなど様々な設計手法がありますが、筆者が実務を通して一番おすすめしたいのは「FLOCSS(フロックス)」です。
今回は、なぜFLOCSSが使いやすいのか、その理由と具体的な書き方を解説します!
FLOCSSとは?
FLOCSSは「Foundation Layout Object CSS」の略で、エンジニアの谷拓樹氏によって考案されたCSS設計手法です。
「Foundation」「Layout」「Object」の3つのレイヤーをベースに構成されており、非常に整理整頓がしやすいのが特徴です。
FLOCSSはクラスの命名規則として、「BEM」を採用しています。
BEMとは?
BEMは、Block(塊)、Element(要素)、Modifier(状態)の頭文字を取った命名規則です。
- Block: 元となるコンポーネント(例:
.card) - Element: Blockの中身(例:
.card__title)※アンダースコア2つで繋ぐ - Modifier: 変化した状態(例:
.card__title--red、.card__title--blue)※ハイフン2つで繋ぐ
FLOCSSのメリット・おすすめする理由
なぜ数ある手法の中でFLOCSSを推すのか。
その理由は「分かりやすさ」と「運用のしやすさ」にあります。
メリット1:基本がBEMなので、視認性が高い
BEM特有の「アンダースコア(__)」や「ハイフン(--)」で繋ぐルールは、一見長く見えますが、実はクラス名が長くなった時に圧倒的に見やすいというメリットがあります。
もし全てを単一のハイフンで繋いでしまうと、どれがブロックでどれが要素・モディファイアなのか等、判別がしづらくなります。
しかし、BEMなら構造が一目で分かります。
// ハイフンでつなぐと見づらい
.service-list-item-title-white
// FLOCSSだと視認性が高い
.p-service-list__title--whiteメリット2:接頭辞(Prefix)で役割が即断できる
FLOCSSではクラス名の先頭に、 l-(Layout)や p-(Project)、c-(Component)を付与します。
これにより、HTMLのクラス名を見ただけで
「これは共通パーツだな」
「これはこのページ固有のレイアウトだな」
と、コードの役割が瞬時に判別できるのです。
これは保守性において非常に大きなメリットです。
メリット3:「これはどこに属すべきか?」を考える癖がつく
FLOCSSを採用すると、
常に「これは共通パーツ(c-)にすべきか、それともこのページ独自の要素(p-)か?」を考えるようになります。
この習慣がつくと、「再利用できるコード」が増え、CSSの保守性が劇的に向上します。
長期的なプロジェクトほど、このメリットが効いてきます。
では、具体的な構造と書き方を見ていきましょう。
FLOCSSの書き方について解説
FLOCSSの基本型
基本的には以下のフォルダ構成(またはコメント分け)で管理します。
- Foundation:サイト全体の基本設定やリセットCSS。
- Layout:ヘッダー、フッター、サイドバー、メインコンテンツなど大きな枠組み。
- Object:実際のコンテンツパーツ。ここからさらに3つに分割します。
- Component:ボタンやタイトルなど、どこでも使える最小単位。
- Project:特定のセクションやページに依存する要素(会社概要やお問い合わせフォームなど)。
- Utility:細かい調整(余白など)を行うためのユーティリティクラス。
具体的なコード例(Aboutセクション)
一般的な「タイトル、文章、画像、ボタン」で構成されたAboutセクションを想定します。
<section class="l-section u-pb-0">
<div class="l-container">
<div class="p-about-card">
<figure class="p-about-card__img-wrapper">
<img src="img-about.jpg" alt="私たちのオフィス" class="p-about-card__img">
</figure>
<div class="p-about-card__body">
<h2 class="c-heading c-heading--left">私たちについて</h2>
<p class="p-about-card__text">
私たちは、テクノロジーとデザインを融合させ、新しい価値を創造するクリエイティブ集団です。
クライアントの課題に真摯に向き合い、最適なソリューションを提供します。
</p>
<div class="p-about-card__btn-wrapper">
<a href="/about/" class="c-btn c-btn--primary">会社概要を見る</a>
</div>
</div>
</div>
</div>
</section>上記のHTMLで使用しているクラス名を、FLOCSSのレイヤーごとに分解して説明します。
① l- で始まる記述(Layoutレイヤー)
役割:ページ全体の大きな構造(枠組み)を作る。
.l-section: セクション全体の共通的な上下余白(padding)などを定義します。.l-container: コンテンツの最大横幅を中央揃え(margin: 0 auto;)にする、どのページでも使う枠です。
これらは、中身が何であれ「枠」としての役割に徹します。
② p- で始まる記述(Projectレイヤー)
役割:特定のセクションやページ(ここではAbout)固有のデザインや構造を作る。
.p-about-card: Aboutセクション独自の「画像と文章が横並びになるカード」という塊(BEMのBlock)を定義します。.p-about-card__img、.p-about-card__text:.p-about-cardブロックの中でのみ意味を持つ、画像やテキストという要素(BEMのElement)です。
したがって、他のセクション(例えばServiceセクションやNewsセクション等)で .p-about-card のスタイルを使い回すことは想定していません。
③ c- で始まる記述(Componentレイヤー)
役割:サイト全体で何度も使い回すことができる、最小単位のパーツ。
.c-heading: サイト内の「見出し」共通のフォントサイズや行間などを定義します。.c-btn: すべての「ボタン」に共通する余白、角丸、ポインターなどの基本スタイルを定義します。
Componentは、特定の場所(Project)に依存せず、どこに置いても機能するように設計します。
④ — で始まる記述(Modifier)
役割:ComponentやProjectの「状態」や「バリエーション」を指定する。
.c-heading--left: 共通の.c-headingに対して、「テキストを左寄せにする」というバリエーションを加えます。.c-btn--primary: 共通の.c-btnに対して、「背景色を主要色(プライマリーカラー)にする」という状態を加えます。
c-btn 自体には色を持たせず、Modifierで色を指定することで、.c-btn--secondary(サブカラー)などを簡単に作れます。
⑤ u- で始まる記述(Utilityレイヤー)
役割:ComponentやProjectでは解決できない、わずかな調整を行う。
.u-pb-0:padding-bottom: 0 !important;を指定し、この場所だけ下の余白を強制的にゼロにします。
「ここだけ少し余白を広げたい」といった時に、わざわざ新しいProjectクラスを作るのを防ぎます。
まとめ
HTMLを見るだけで、どのクラスが「全体の枠(l-)」で、どれが「ここだけのデザイン(p-)」で、どれが「共通パーツ(c-)」なのかが一目で判別できるのが、FLOCSS最大のメリットです。
CSS設計に正解はありませんが、「迷ったらFLOCSS」と言えるほど、汎用性が高く整理しやすい手法です。
- BEMベースで見やすい
- 接頭辞で役割がはっきりする
- 再利用性・保守性を考える習慣がつく
最初は「クラス名を書くのが少し面倒かも…」と感じるかもしれませんが、一度慣れてしまえば、数ヶ月後の自分(あるいはプロジェクトの開発メンバー)に感謝されること間違いなしです。
ぜひCSSを書く際に取り入れてみてください。


