【シーエスエスカスタムプロパティ】

CSSカスタムプロパティ とは?

💡 CSSに「変数」の力を与えた、スタイル管理の革命児
📌 このページのポイント
CSSカスタムプロパティ ― 宣言と参照 :root で宣言(グローバル) --primary: #4A90D9; --accent: #F5A623; --radius: 8px; var() .button background: var(--primary); border-radius: var(--radius); 送信 .card border: 2px solid var(--accent); border-radius: var(--radius); .dark-theme --primary: #2C3E50; で上書き 変数の値を変えるだけで全体のテーマを一括切替
CSSカスタムプロパティのイメージ
ひよこ ひよこ

CSSに変数なんてあるの?プログラミング言語じゃないのに?

ペンギン先生 ペンギン先生

あるんだよ。--main-color: #4A90D9;と宣言して、color: var(--main-color);と書けば、その色を何か所でも再利用できる。値を変えたいときは宣言を1か所変えるだけで全部に反映されるんだ

ひよこ ひよこ

Sassの変数と何が違うの?

ペンギン先生 ペンギン先生

Sassの変数はビルド時に値が確定して普通のCSSに変換されるけど、CSSカスタムプロパティはブラウザが実行時に評価するんだ。だからJavaScriptで値を動的に書き換えたり、メディアクエリごとに値を切り替えたりできる。CSSのカスケードと継承もそのまま使えるのが大きな違いだよ

ひよこ ひよこ

ダークモードの切り替えに使えるって聞いたけど?

ペンギン先生 ペンギン先生

まさにその通り。:rootに--bg-color: #fffと定義して、.dark-themeで--bg-color: #222と上書きするだけでテーマ切り替えが完成する。bodyにクラスを1つ付け替えるだけで全体の色が変わるから、ダークモード実装の定番パターンになっているよ

ひよこ ひよこ

var()の中にフォールバック値を書けるって本当?

ペンギン先生 ペンギン先生

var(--accent, #F5A623)のようにカンマの後にフォールバック値を書けるよ。変数が未定義のときにこの値が使われるんだ。さらにvar(--a, var(--b, red))のようにネストもできる。コンポーネントライブラリでは、利用者がカスタマイズしなくてもデフォルト値で動くようにフォールバックを活用するのが定石だね

ひよこ ひよこ

パフォーマンスに影響はないの?

ペンギン先生 ペンギン先生

基本的には心配ないけど、大量のカスタムプロパティを頻繁にJavaScriptから更新すると再描画コストがかかることはあるよ。また@propertyルールを使うと型や初期値を定義でき、ブラウザの最適化が効きやすくなる。アニメーションでカスタムプロパティをトランジションさせることも@propertyで可能になったんだ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
CSSカスタムプロパティ」って出てきたら「CSSで使える変数のこと」と思えばだいたいOK!
📖 おまけ:英語の意味
「CSS Custom Properties」 = CSSのカスタム(独自定義)プロパティ
💬 正式にはCSS Custom Properties for Cascading Variablesという仕様名で、「CSS変数」は通称なんだよ。カスケード(優先順位の連鎖)に対応しているのが最大の特徴だよ
← 用語集にもどる