カスタムプロパティで動的デザイン!変数を使った保守性の高いCSS設計|現場で使える実践テクニック
こんにちは!
今日は「カスタムプロパティで動的デザイン!変数を使った保守性の高いCSS設計」について解説します。
僕が感じた「色の統一管理」の大変さ
Web制作会社に入りたての頃、僕はめっちゃ単純な失敗をしていました。
クライアントから「ブランドカラーの青を全体で使ってほしい」と言われて、CSSに#3b79b7という色コードを何十箇所に書き込んだんです。
その後、「あ、ちょっと色を濃くしてもらえませんか?」という修正依頼が来たとき…。
もうお分かりですよね。
全部手で修正する羽目になりました。
ほんま、あの時は焦りました。
一つ一つ検索して置換して…それでも修正漏れがあったり。
その時に先輩から教えてもらったのが「カスタムプロパティ」でした。
正直、最初は「こんなん何に使うの?」と思ってたんですが、使ってみたら人生が変わりました。
いやほんま。
カスタムプロパティの基本と実践的な活用法
カスタムプロパティ(CSS変数)は、--で始まるプロパティ名で値を定義して、後からvar()で呼び出すというシンプルな仕組みです。
まずは基本から説明しますね。
こんな感じで、ルート要素に色を定義します:
:root {
--color-primary: #3b79b7;
--color-secondary: #5a9fd4;
--color-text: #333333;
--spacing-unit: 8px;
--border-radius: 8px;
}
そして使う時はこう:
.button {
background-color: var(--color-primary);
color: white;
padding: var(--spacing-unit) calc(var(--spacing-unit) * 2);
border-radius: var(--border-radius);
}
これで何が変わるかというと、色を変更する時は:root内の値を一つ変更するだけで、全体が統一されるんです。
先ほどの失敗が二度と起きません。
現場でよく見るのは、色だけじゃなくて「余白」「フォントサイズ」「アニメーション時間」なんかも変数化してる例です。
これらを統一管理することで、デザインの一貫性が自動的に保たれるんですよ。
特に便利なのが「計算」です。
上の例でcalc(var(--spacing-unit) * 2)と書いてますが、このように変数を組み合わせることで、柔軟なスケーリングが実現できます。
スコープを活用した柔軟なテーマ切り替え
カスタムプロパティの本当に強いところは「スコープが使える」ということです。
同じプロパティ名でも、要素ごとに異なる値を持たせることができるんです。
例えば、ダークモードとライトモードを切り替える場合を考えてみてください:
/* ライトモード(デフォルト) */
:root {
--bg-primary: #ffffff;
--text-primary: #333333;
--border-color: #e0e0e0;
}
/* ダークモード */
body.dark-mode {
--bg-primary: #1a1a1a;
--text-primary: #ffffff;
--border-color: #444444;
}
後は同じCSSで両方のモードに対応できます:
.card {
background-color: var(--bg-primary);
color: var(--text-primary);
border: 1px solid var(--border-color);
}
JavaScriptでbodyにdark-modeクラスを追加・削除するだけで、テーマが切り替わります。
ほんまに便利やん。
さらに応用として、特定のコンポーネントだけ色を変えたい場合も簡単です:
.card.featured {
--bg-primary: #f0f8ff;
--text-primary: #003366;
}
このように、親要素でカスタムプロパティを上書きすると、その要素以下の子要素で新しい値が使われます。
複雑なCSSをいっぱい書かなくても、シンプルに実現できるんです。
現場でよく見る活用例としては、複数クライアントの案件を同じベースコードで運用する場合です。
クライアントごとに色やフォント、余白を変数定義するだけで、異なるデザインのサイトが完成します。
保守性がめっちゃ上がりますよ。
まとめ
カスタムプロパティは、一見すると「ちょっと便利な機能」に見えるかもしれません。
でも実際に使ってみると、CSSの書き方が変わります。
特に以下の場面で活躍します:
- 複数箇所で同じ値を使う場合の一括管理
- ライトモード・ダークモード、テーマ切り替え
- 複数のデバイスサイズに対応した値の調整
- JavaScriptと組み合わせた動的なスタイル変更
僕も最初は「何でこんな面倒な書き方を?」と思ってました。
でも、修正作業が減り、バグが減り、新しい機能追加がスムーズになることで、その価値を実感しました。
今からコーディングを始める人も、既に現場で働いている人も、ぜひカスタムプロパティの活用を検討してみてください。
最初の設計に少し時間がかかりますが、それ以降の保守が本当に楽になります。
Web制作で困ったことがあったら、またこのブログを覗いてくださいね!
― クリオ