フロントエンド - CSS・スタイリング

SMACSS(スマックス) すまっくす

CSS設計モジュール設計スタイルガイドBEMOOCSSクラス命名規則
SMACSSについて教えて

簡単に言うとこんな感じ!

SMACSSは「CSSのコードをどう整理するか」のルール集だよ!大きなサイトになるとCSSが散らかり放題になりがちなんだけど、「このスタイルはここに書く」って役割ごとに5つの棚に分けて管理する考え方なんだ。いわば「CSS版の整理収納術」ってこと!


SMACSSとは

SMACSS(Scalable and Modular Architecture for CSS:スケーラブルでモジュール化されたCSSアーキテクチャ)は、CSSを保守しやすく整理するための設計方法論(アーキテクチャガイド)です。カナダのフロントエンドエンジニア、Jonathan Snook(ジョナサン・スヌーク)氏が2011年に提唱しました。

SMACSSの核心は、すべてのCSSルールを5つのカテゴリに分類して書くことです。「どこに何を書くか」のルールを設けることで、プロジェクトが大きくなってもスタイルが混乱しにくくなります。フレームワークではなくガイドラインなので、既存のプロジェクトにも段階的に取り入れられるのが特徴です。

システム発注の現場では、フロントエンド開発の見積もりや品質評価の際に「CSS設計はどの手法を使うか」と問われることがあります。SMACSSを採用しているかどうかは、長期的な保守性やチームの生産性に直結するため、発注側も概念を知っておくと判断がしやすくなります。


SMACSSの5つのカテゴリ

SMACSSでは、CSSのルールを役割に応じて以下の5つに分類します。

カテゴリ英名役割
ベースBaseタグそのもののデフォルトスタイルbody, a, h1 のリセット・基本設定
レイアウトLayoutページの大枠・骨格ヘッダー、サイドバー、フッターの配置
モジュールModule再利用できる部品カード、ボタン、ナビゲーション
ステートState状態変化のスタイル.is-active, .is-hidden など
テーマTheme見た目の色調・テーマ変更ダークモード、カラースキン切り替え

覚え方:「ベレモスて」

5つのカテゴリの頭文字を並べると覚えやすいです。

ベ → ベース (Base)
レ → レイアウト (Layout)
モ → モジュール (Module)
ス → ステート (State)
て → テーマ (Theme)

ベレモスて」と唱えれば5つ全部思い出せます!

クラス名のプレフィックス(接頭辞)ルール

SMACSSではカテゴリごとにクラス名の付け方にも規則があります。

/* Base: セレクタそのまま(クラスなし) */
body { margin: 0; }
a    { color: #0070f3; }

/* Layout: "l-" または "layout-" を付ける */
.l-header  { width: 100%; }
.l-sidebar { width: 240px; }

/* Module: プレフィックスなし(モジュール名をそのまま) */
.card       { border: 1px solid #ddd; }
.card-title { font-size: 1.2rem; }

/* State: "is-" を付ける */
.is-active  { background: #0070f3; }
.is-hidden  { display: none; }

/* Theme: "theme-" を付ける */
.theme-dark { background: #1a1a1a; color: #fff; }

歴史と背景

  • 2011年:Jonathan Snookが自身のWebサイト向けにSMACSSの考え方をまとめ、電子書籍として公開
  • 2012年頃:CSSが複雑化する大規模サービス(SNS・ECサイトなど)の増加にともない、CSS設計の必要性が広く認識され始める
  • 2012〜2013年:同時期に登場した BEM(Block Element Modifier)や OOCSS(Object-Oriented CSS)とともに、CSS設計の三大手法として普及
  • 2014〜2015年:日本のフロントエンドコミュニティでも積極的に紹介され、国内の大規模サイト制作で採用事例が増加
  • 2016年以降ReactやVueなどのコンポーネント指向フレームワークの台頭により、CSS ModulesCSS-in-JS といった新手法も登場。ただしSMACSSの考え方(役割の分離)は現代の設計にも受け継がれている

他のCSS設計手法との比較

SMACSSと並ぶCSS設計手法がいくつかあります。それぞれの特徴を理解しておくと、開発会社への発注・提案評価に役立ちます。

CSS設計手法の比較 SMACSS スマックス 📋 5カテゴリに分類 🔖 プレフィックスで識別 📐 ガイドライン形式 ✅ 導入のしやすさ:高 ✅ 学習コスト:低め ✅ 既存CSSに追加可 向いてるケース 中〜大規模サイト、 チームでのルール統一 BEM ベム 📋 Block/Element/Modifier 🔖 __と--で区切る命名 📐 命名規則が厳密 ⚠️ 導入のしやすさ:中 ⚠️ クラス名が長くなる ✅ 一貫性が高い 向いてるケース UIコンポーネント重視、 大規模チーム開発 OOCSS オーオーシーエスエス 📋 構造と見た目を分離 🔖 再利用性を最重視 📐 概念・思想ベース ⚠️ 導入のしやすさ:低め ⚠️ 抽象度が高い ✅ 部品の再利用率:高 向いてるケース デザインシステム、 コンポーネントライブラリ

SMACSSとBEMの実際の書き方比較

同じ「アクティブなナビゲーションリンク」をそれぞれの手法で書くとこうなります。

/* SMACSS の書き方 */
/* モジュール: ナビゲーション */
.nav-item { display: inline-block; padding: 8px 16px; }
/* ステート: アクティブ状態 */
.nav-item.is-active { color: #0070f3; border-bottom: 2px solid #0070f3; }

/* BEM の書き方 */
/* Block: nav / Element: item / Modifier: active */
.nav__item           { display: inline-block; padding: 8px 16px; }
.nav__item--active   { color: #0070f3; border-bottom: 2px solid #0070f3; }

SMACSSはis-というステートクラスで状態を独立させているのが特徴です。JavaScriptで動的にクラスを付け外しする際にも「is-activeを付ける・外す」という一貫したルールで扱えます。


関連用語