CSS変数(カスタムプロパティ)入門
色やサイズを一元管理する
CSS変数(カスタムプロパティ)を使えば、色・フォントサイズ・余白などの値を変数として定義し、サイト全体で統一的に管理できます。
変更時も1箇所を修正するだけでサイト全体に反映されます。
こんな人向けの記事です
- CSSの色やサイズを一元管理したい
- テーマカラーの変更を簡単にしたい
- ダークモードの実装方法を知りたい
Step 1CSS変数の基本
CSS変数は --変数名 で定義し、var(--変数名) で参照します。
CSS変数で色を指定したボックス
CSS
/* 変数を定義 */
:root {
--primary-color: #3498db;
--border-radius: 8px;
}
/* 変数を使う */
.box {
background: var(--primary-color);
color: white;
padding: 20px;
border-radius: var(--border-radius);
}
Step 2:root で全体に定義する
:root はHTML文書のルート要素(<html>)を指します。ここに定義すると全ての要素から参照できます。
CSS
:root {
/* カラー */
--color-primary: #0d6efd;
--color-secondary: #6c757d;
--color-success: #198754;
--color-danger: #dc3545;
--color-text: #212529;
--color-bg: #ffffff;
/* フォント */
--font-size-sm: 14px;
--font-size-base: 16px;
--font-size-lg: 20px;
/* 余白 */
--spacing-sm: 8px;
--spacing-md: 16px;
--spacing-lg: 32px;
/* ボーダー */
--border-radius: 4px;
}
.button {
background: var(--color-primary);
font-size: var(--font-size-base);
padding: var(--spacing-sm) var(--spacing-md);
border-radius: var(--border-radius);
}
命名規則のコツ
--color-*、--font-*、--spacing-* のようにカテゴリを接頭辞にすると管理しやすくなります。
Step 3フォールバック値
var() の第2引数にフォールバック(デフォルト値)を指定できます。
CSS
/* --accent-color が未定義なら #e74c3c を使う */
.highlight {
color: var(--accent-color, #e74c3c);
}
/* 変数の入れ子も可能 */
.text {
color: var(--theme-color, var(--color-primary, blue));
}
Step 4スコープ(適用範囲)
CSS変数は特定の要素内だけで有効な「ローカル変数」としても使えます。
CSS
:root {
--card-bg: #ffffff;
}
/* .dark-section 内だけ変数を上書き */
.dark-section {
--card-bg: #2d2d2d;
}
.card {
background: var(--card-bg);
}
Step 5実践:ダークモード
CSS
/* ライトモード(デフォルト) */
:root {
--color-bg: #ffffff;
--color-text: #212529;
--color-card-bg: #f8f9fa;
--color-border: #dee2e6;
}
/* ダークモード */
[data-theme="dark"] {
--color-bg: #1a1a2e;
--color-text: #e0e0e0;
--color-card-bg: #16213e;
--color-border: #333;
}
/* 変数を使ってスタイル定義(1回だけでOK) */
body {
background: var(--color-bg);
color: var(--color-text);
}
.card {
background: var(--color-card-bg);
border: 1px solid var(--color-border);
}
JavaScript
// テーマ切り替え
function toggleTheme() {
const current = document.documentElement.getAttribute('data-theme');
document.documentElement.setAttribute(
'data-theme',
current === 'dark' ? 'light' : 'dark'
);
}
OSのダークモード設定に連動させる
@media (prefers-color-scheme: dark) を使えば、OSのダークモード設定に自動対応できます。
まとめ
--変数名で定義、var(--変数名)で参照:rootに定義してサイト全体で使えるvar(--変数名, フォールバック値)でデフォルト値を指定- 要素単位でローカルに上書き可能(スコープ)
- ダークモードの実装に最適