基本の使い方
定義
.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から直接扱えて、そのための関数が存在する。詳しくは使うときになったら調べることにする。