基本の使い方
定義
.foo {
--my-text-color: black;
}
呼び出し
.foo {
color: var(--my-text-color);
}
スコープ
基本はセレクタ内。
.foo {
--my-text-color: black;
color: var(--my-text-color);
background-color: var(--my-text-color);
}
:root擬似クラスに指定してグローバルに使用することも可能。
:root {
--bg-color: #efefef;
--text-color: #999;
}
.foo {
background-color: var(--bg-color);
color: var(text-color);
}
.bar {
background-color: var(--bg-color);
color: var(--text-color);
}
入れ子可能
:root {
--start-color: black;
--end-color: white;
--bg-gradient: linear-gradient(var(--start-color), var(--end-color));
}
.foo {
background: var(--bg-gradient);
}
親子間での継承
変数値も通常のプロパティと同じような継承が行われる。
後に書いた強い記述で上書きされる。
以下のような記述の場合
<div class="parent">
<p>parent</p>
<div class="child__01">
<p>child__01</p>
</div>
<div class="child__02">
<p>child__02</p>
</div>
</div>
:root {
--text-color: black;
}
.parent p {
color: var(--text-color);
}
.child__01 {
--text-color: red;
}
.parent直下および変数設定の無いdiv内のpには:rootで指定された変数値が適用されて黒で表示されるが、変数を再定義したdiv.child__01では.parent pのcolor指定が再定義された変数値で上書きされて赤で表示される。
parent
child__01
child__02
フォールバック
変数値が無効な場合の値をvar側で指定できる。
.foo {
color: var(--text-color-01, var(--text-color-02, black));
}
フォールバックに別の変数を指定することは可能だが、その場合再度varに包む必要あり。
上記の例では–text-color-01がない場合var(–text-color-02)を見て、–text-color-02も無効な場合はblackが適用されるイメージ。
JS
CSS変数はJSから直接扱えて、そのための関数が存在する。詳しくは使うときになったら調べることにする。