CSS カスタムプロパティ

CSS で変数を定義し、スタイル全体で再利用できる仕組み

CSSフロントエンド

CSS カスタムプロパティとは

CSS カスタムプロパティ (CSS Variables) は、-- プレフィックスで変数を定義し、var() で参照する仕組みである。Sass の変数と異なり、ランタイムで動的に変更でき、JavaScript からもアクセスできる。

基本的な使い方

:root {
  --color-primary: #3b82f6;
  --color-text: #1f2937;
  --spacing-md: 1rem;
  --radius-md: 0.5rem;
}

.button {
  background: var(--color-primary);
  color: white;
  padding: var(--spacing-md);
  border-radius: var(--radius-md);
}

ダークモード

:root {
  --bg: #ffffff;
  --text: #1f2937;
  --border: #e5e7eb;
}

[data-theme="dark"] {
  --bg: #111827;
  --text: #f9fafb;
  --border: #374151;
}

body { background: var(--bg); color: var(--text); }
.card { border: 1px solid var(--border); }
// JavaScript でテーマを切り替え
document.documentElement.dataset.theme = 'dark';

カスタムプロパティはカスケードに従うため、親要素で値を変更すると子要素に伝播する。

Sass 変数との比較

観点 CSS カスタムプロパティ Sass 変数
動的変更 ✅ (ランタイム) ❌ (ビルド時に解決)
カスケード ✅ (継承される)
JavaScript アクセス
メディアクエリ内で変更
フォールバック var(--x, fallback) なし

レスポンシブデザイン

:root {
  --container-width: 1200px;
  --font-size-base: 1rem;
}

@media (max-width: 768px) {
  :root {
    --container-width: 100%;
    --font-size-base: 0.875rem;
  }
}

.container { max-width: var(--container-width); }
body { font-size: var(--font-size-base); }

コンポーネントスコープ

.card {
  --card-padding: 1.5rem;
  --card-radius: 0.75rem;
  padding: var(--card-padding);
  border-radius: var(--card-radius);
}

.card--compact {
  --card-padding: 0.75rem;
  --card-radius: 0.375rem;
}

JavaScript からのアクセス

// 値の取得
const primary = getComputedStyle(document.documentElement)
  .getPropertyValue('--color-primary');

// 値の設定
document.documentElement.style.setProperty('--color-primary', '#ef4444');

フォールバック

.text { color: var(--color-accent, #3b82f6); }
/* --color-accent が未定義なら #3b82f6 を使用 */

CSS カスタムプロパティの背景や設計思想は関連書籍に詳しい。

関連用語