Language
日本語
English

Caution

JavaScript is disabled in your browser.
This site uses JavaScript for features such as search.
For the best experience, please enable JavaScript before browsing this site.

CSS Dictionary

  1. Home
  2. CSS Dictionary
  3. var() / Custom Properties

var() / Custom Properties

CSS変数(カスタムプロパティ)を使うと、値を変数として定義し、複数の場所で再利用できます。テーマカラーや余白サイズなどを一箇所で管理できるため、保守性が大幅に向上します。

Syntax

CSS変数は 定義参照 の2つの記法で使います。

記法概要
--変数名: 値;変数を定義します。変数名は必ず『--』(ハイフン2つ)で始める必要があります。
var(--変数名)定義した変数を参照します。
var(--変数名, フォールバック値)変数が未定義・無効なときに使われるデフォルト値を指定します。

グローバルに使いたい変数は、すべての要素の祖先となる『:root』セレクタで定義するのが一般的です。

Sample Code

テーマカラーや余白を変数で管理する例です。

:root {
	--main-color: #3498db;
	--sub-color: #2ecc71;
	--text-color: #333;
	--spacing: 16px;
}

.header {
	background-color: var(--main-color);
	color: #fff;
	padding: var(--spacing);
}

.button {
	background-color: var(--sub-color);
	color: var(--text-color);
	padding: var(--spacing);
}

フォールバック値

『var()』の第2引数にフォールバック値を指定すると、変数が未定義または無効な場合にその値が使われます。

.box {
	/* --undefined-color が未定義のため、#ff0000 が使われる */
	color: var(--undefined-color, #ff0000);

	/* フォールバック値にさらに var() を使うこともできる */
	background-color: var(--bg-color, var(--main-color, #fff));
}

スコープ

CSS変数はセレクタのスコープ内(およびその子孫要素)でのみ有効です。

/* グローバル変数: すべての要素で参照できる */
:root {
	--global-color: #3498db;
}

/* ローカル変数: .card 要素とその子孫でのみ有効 */
.card {
	--card-bg: #f5f5f5;
	background-color: var(--card-bg);
}

.card .title {
	/* .card の子孫なので --card-bg を参照できる */
	border-bottom: 1px solid var(--card-bg);
}

.other {
	/* .card の外なので --card-bg は未定義扱い */
	background-color: var(--card-bg, #fff);
}

変数は子要素に継承されます。親要素で定義した変数は、子要素・孫要素からもそのまま参照できます。

JavaScriptから操作する

JavaScriptからCSS変数の値を取得・変更できます。動的なテーマ切り替えなどに活用できます。

/* 変数の値を変更する */
document.documentElement.style.setProperty('--main-color', '#e74c3c');

/* 変数の値を取得する */
var value = getComputedStyle(document.documentElement).getPropertyValue('--main-color');

/* 特定の要素のスコープで変数を変更する */
var el = document.querySelector('.card');
el.style.setProperty('--card-bg', '#e8f4fd');

メディアクエリとの組み合わせ

メディアクエリの中でCSS変数を再定義すると、画面サイズに応じて変数の値をまとめて切り替えられます。

:root {
	--font-size: 14px;
	--spacing: 12px;
	--columns: 1;
}

@media (min-width: 768px) {
	:root {
		--font-size: 16px;
		--spacing: 24px;
		--columns: 2;
	}
}

@media (min-width: 1200px) {
	:root {
		--font-size: 18px;
		--spacing: 32px;
		--columns: 3;
	}
}

.container {
	font-size: var(--font-size);
	padding: var(--spacing);
	column-count: var(--columns);
}

変数を切り替えるだけでレイアウト全体に変更が反映されるため、レスポンシブデザインのコードをシンプルに保てます。

Browser Support

Chrome Chrome
49+
48 and earlier ×
Firefox Firefox
31+
30 and earlier ×
Safari Safari
9.1+
9 and earlier ×
Edge Edge
16+
15 and earlier ×
IE IE
全バージョン ×
IEはCSS変数に未対応です
Opera Opera
36+
35 and earlier ×
iOS Safari iOS Safari
9.3+
9.2 and earlier ×
Android Android Browser
67+
66 and earlier ×
Chrome Android Chrome Android
Latest
Same as desktop
Firefox Android Firefox Android
Latest
Same as desktop

Version data based on MDN.

Overview

CSS変数(カスタムプロパティ)を使うと、値を変数として定義し複数箇所で再利用できます。テーマカラーや余白など頻繁に使う値を『:root』で一元管理すると、値の変更が全体に即座に反映されるため、保守性が大幅に向上します。

IEには未対応ですが、現在主要なすべてのブラウザでサポートされています。JavaScriptから『setProperty()』で値を変更できるため、動的なテーマ切り替えにも活用できます。

If you find any errors or copyright issues, please .