2026年4月16日
CSS 変数(カスタムプロパティ)とは?
「サイトのメインカラーを変えたいとき、CSSファイルの何十か所も書き換えないといけない…」という経験はありませんか?
CSSカスタムプロパティ(CSS変数)を使うと、色やサイズなどの値を変数として定義し、1か所変えるだけで全体に反映できます。
プログラミングの「変数」と同じ考え方です。「この色には --color-primary という名前をつける」と決めておいて、いろんな場所でその名前を使います。後から色を変えたくなったら、定義を1か所だけ直せばOKです。
💡 カスタムプロパティの2大メリット
- 1か所変えるだけで全体に反映される(保守がラク)
- JavaScriptからも値を読み書きできる(テーマ切り替えなど)
CSSの基本がまだ不安な人は「CSSとは?初心者向けにわかりやすく解説」を先に読んでおきましょう。
カスタムプロパティの定義と使い方
変数は --変数名: 値; の形で定義し、var(--変数名) で使います。変数名は必ず --(ハイフン2つ)から始めます。
/* :root に定義するとページ全体で使える */
:root {
--color-primary: #0d9488; /* メインカラー */
--color-bg: #f0f9ff; /* 背景色 */
--font-size-base: 16px; /* 基本フォントサイズ */
--border-radius: 8px; /* 角の丸み */
--spacing-md: 16px; /* 中くらいの余白 */
}
/* var() で使う */
.btn {
background-color: var(--color-primary);
border-radius: var(--border-radius);
padding: var(--spacing-md);
}
body {
background-color: var(--color-bg);
font-size: var(--font-size-base);
} ▶ プレビュー
:root はページ全体を指す特別なセレクタです。ここに定義した変数は、CSSファイルのどこからでも使えます。
🔗 あわせてCSS詳細度(優先順位)もチェックしてみましょう。
テーマカラーの管理に使おう
実際のWeb制作で最もよく使われる用途が「テーマカラーの管理」です。サイト全体のカラーを変数で管理すると、1か所変えるだけで全体に反映されます。
変数なしのCSSの問題点
/* ❌ 変数なしだとカラーが散らばる */
.header { background-color: #0d9488; }
.btn-primary { background-color: #0d9488; }
.link { color: #0d9488; }
.border-accent { border-color: #0d9488; }
/* → 色を変えたいとき、全部書き換えないといけない! */ 変数ありのCSS(おすすめ)
/* ✅ 変数ありなら1か所を変えるだけでOK */
:root {
--color-primary: #0d9488;
}
.header { background-color: var(--color-primary); }
.btn-primary { background-color: var(--color-primary); }
.link { color: var(--color-primary); }
.border-accent { border-color: var(--color-primary); }
/* → --color-primary の値を1か所変えるだけで全部変わる! */ 📖 詳しくはCSS問題ドリルで解説しています。
ダークモードの実装
カスタムプロパティを使うと、ダークモード(画面を暗くする表示)も簡単に実装できます。
:root {
--primary: #0d9488;
--primary-dark: #0f766e;
--text: #1f2937; /* 通常は濃い色の文字 */
--bg: #ffffff; /* 通常は白い背景 */
--card-bg: #f8fafc;
}
/* ダークモード(システムの設定に従って自動で切り替わる) */
@media (prefers-color-scheme: dark) {
:root {
--text: #f9fafb; /* ダークモードでは明るい文字 */
--bg: #111827; /* ダークモードでは暗い背景 */
--card-bg: #1f2937;
}
} prefers-color-scheme: dark は、ユーザーのOSやブラウザがダークモードに設定されているか確認します。変数の値を上書きするだけで、サイト全体がダークモードに切り替わります。
フォールバック値の設定
var(--変数名, フォールバック値) の形で、変数が未定義のときのデフォルト値を指定できます。
.btn {
/* --color-accent が未定義なら #f59e0b を使う */
background-color: var(--color-accent, #f59e0b);
/* ネストも可能 */
color: var(--btn-text, var(--text, #1f2937));
} フォールバック値を設定しておくと、変数が何らかの理由で読み込まれなかった場合でも安全です。
👉 CSSで色を指定する方法も参考にしてください。
スコープ(範囲)を限定する
変数は :root に定義するとページ全体で使えますが、特定の要素の中だけで使う変数も作れます。
/* グローバル変数(ページ全体で使える) */
:root {
--color-primary: #0d9488;
}
/* ローカル変数(.cardの中だけで有効) */
.card {
--card-padding: 24px; /* .card の中だけで使える変数 */
padding: var(--card-padding);
}
/* .card の子要素からも使える */
.card .card__title {
margin-bottom: calc(var(--card-padding) / 2);
} このように、コンポーネント(部品)ごとに変数をまとめると、デザインの管理がしやすくなります。
JavaScriptからカスタムプロパティを操作する
カスタムプロパティはJavaScriptからも読み書きできます。これを利用してボタンでテーマカラーを切り替える機能を作れます。
// カスタムプロパティの値を取得
const root = document.documentElement;
const primaryColor = getComputedStyle(root)
.getPropertyValue('--color-primary').trim();
console.log(primaryColor); // #0d9488
// カスタムプロパティの値を変更
root.style.setProperty('--color-primary', '#2563eb'); // 青に変更
// テーマ切り替えボタンの例
document.getElementById('theme-btn').addEventListener('click', () => {
const current = getComputedStyle(root)
.getPropertyValue('--color-primary').trim();
if (current === '#0d9488') {
root.style.setProperty('--color-primary', '#dc2626'); // 赤
} else {
root.style.setProperty('--color-primary', '#0d9488'); // 元に戻す
}
}); 💡 JavaScriptとの連携でできること
- ボタンでテーマカラーを切り替える
- スライダーで文字サイズを変更する
- ダークモード/ライトモードの手動切り替え
よくある失敗と対策
失敗1:変数名のハイフン2つを忘れる
-color-primary(ハイフン1つ)ではなく --color-primary(ハイフン2つ)が正しい書き方です。ハイフンが1つだと変数として認識されません。
失敗2:var()の括弧を忘れる
color: --color-primary; ではなく color: var(--color-primary); が正しいです。var() 関数で包む必要があります。
失敗3:スコープを忘れる
ある要素の中にだけ変数を定義した場合、その外からはアクセスできません。どこからでも使いたい変数は :root に定義しましょう。
まとめ
- ✅ CSSカスタムプロパティ:
--変数名: 値で定義する - ✅
var(--変数名)で使う - ✅
:rootに定義するとページ全体で使える - ✅ テーマカラーを変数で管理すると、1か所変えるだけで全体に反映される
- ✅
var(--変数名, デフォルト値)でフォールバックを設定できる - ✅ ダークモードも変数の上書きだけで簡単に実装できる
- ✅ JavaScriptからも読み書きでき、テーマ切り替えに活用できる
CSSカスタムプロパティを使うと、保守しやすいCSSが書けます。レッスンでさらに詳しく学んでみましょう。
🎛️ CSS Variables を動かして体感しよう!
6つのカスタムプロパティをリアルタイム編集。プリセット4種・スコープ切替でvar()の仕組みを直感的に理解できます。
CSS Variables プレイグラウンド →あわせて読みたい記事
- CSSとは?初心者向けに解説 — CSS基礎に戻る
- CSSで色を指定する方法 — カラー値の書き方
- CSSのcalc()関数の使い方 — 計算で値を決める
- CSSグラデーションの作り方 — 変数とグラデーションの組み合わせ