CSS変数って何?

CSS 変数(正式名称:カスタムプロパティ)は、CSS の中で使える「変数」のこと。 プログラミングで言う変数と同じ概念で、値に名前をつけて使い回せる。

❌ 変数なし(修正地獄)
.btn-primary   { background: #059669; }
.link          { color: #059669; }
.border-accent { border-color: #059669; }
.badge         { background: #059669; }
/* 色変えたい → 全部探して直す地獄 */
✅ 変数あり(1ヵ所直すだけ)
:root {
  --color-accent: #059669; /* ここだけ変えればOK */
}

.btn-primary   { background: var(--color-accent); }
.link          { color: var(--color-accent); }
.border-accent { border-color: var(--color-accent); }
.badge         { background: var(--color-accent); }

書き方はたったこれだけ

  • 変数の定義:--変数名: 値;
    必ず2本のハイフン(--)で始める。:root に書くとサイト全体で使える。
  • 変数の使用:var(--変数名)
    値を使いたい場所に var() で呼び出す。それだけ。
実務で使うデザイントークンの例
:root {
  /* ===== カラー ===== */
  --color-primary:    #059669;
  --color-secondary:  #0891b2;
  --color-text:       #0e0e0e;
  --color-muted:      #666666;
  --color-bg:         #fafaf8;
  --color-border:     #e8e8e8;

  /* ===== タイポグラフィ ===== */
  --font-body:   'Noto Sans JP', sans-serif;
  --font-mono:   'JetBrains Mono', monospace;
  --text-base:   16px;
  --text-lg:     18px;
  --text-xl:     24px;

  /* ===== スペーシング ===== */
  --space-sm:    8px;
  --space-md:    16px;
  --space-lg:    32px;
  --space-xl:    64px;

  /* ===== シェイプ ===== */
  --radius-sm:   6px;
  --radius-md:   12px;
  --radius-full: 9999px;
}

ダークモードも CSS 変数で一発対応

CSS 変数の真骨頂がこれ。prefers-color-scheme と組み合わせると、 ライト・ダークの切り替えがたった数行で実装できる。

ダークモード対応の書き方
:root {
  --bg:   #ffffff;
  --text: #0e0e0e;
  --card: #f8fafc;
}

/* OSの設定がダークモードのとき */
@media (prefers-color-scheme: dark) {
  :root {
    --bg:   #0f172a;
    --text: #e2e8f0;
    --card: #1e293b;
  }
}

/* あとは普通に変数を使うだけ */
body  { background: var(--bg); color: var(--text); }
.card { background: var(--card); }

ボタンを押してテーマを切り替えてみよう。

CSS変数のデモ
変数を書き換えるだけでテーマが丸ごと変わる。これが CSS変数の魔法。
💡 ここが CSS変数の凄さ
JavaScript から document.documentElement.style.setProperty('--color-accent', '#ff0000') と書くだけで、変数の値を動的に変更できる。 テーマ切り替え・ユーザーカスタマイズ・アニメーションなど応用範囲が広い。

スコープを使いこなす

変数は :root だけでなく、任意のセレクタに書ける。 コンポーネントごとに変数のスコープを作れるのが便利。

コンポーネントスコープの変数
/* グローバル変数 */
:root {
  --color-primary: #059669;
}

/* .card コンポーネントでの上書き */
.card {
  --card-padding:  24px;
  --card-radius:   12px;
  --card-shadow:   0 4px 20px rgba(0,0,0,0.08);

  padding:       var(--card-padding);
  border-radius: var(--card-radius);
  box-shadow:    var(--card-shadow);
}

/* バリアントは変数だけ変える */
.card--large {
  --card-padding: 40px;
  --card-radius:  20px;
}

まとめ ― CSS変数を使い始める3ステップ

  • :root { --変数名: 値; } でサイト全体の「デザイントークン」を定義する。
  • var(--変数名) でどこからでも呼び出せる。色・サイズ・フォントを変数化しよう。
  • ダークモードは @media (prefers-color-scheme: dark) で変数を上書きするだけ。

変数を使い始めると「もう戻れない」ってなるよ。 まず自分の CSS ファイルのカラーを変数化するところから始めてみて。