INDEX
目次
3章 コーディング爆速化!CSS変数計画
この章の目安学習時間:1.5時間
この章で到達できるゴール:
- CSS変数(カスタムプロパティ)のメリットと基本的な使い方を理解する。
- 情報の精度(正確な値 vs 推測値)を考慮しながら、AIと協力してカラー、フォント、余白のCSS変数リストを作成できる。
- 作成したCSS変数リストを、実際のコーディングでどのように活用するかのイメージが掴める。
【3-1】再利用性UP!CSS変数のすごい力
目安の学習時間:10分
CSS変数(カスタムプロパティ)とは?
Webサイト制作では、同じカラーコードやフォントサイズ、余白の値をCSSファイルの様々な場所で繰り返し使用します。
しかし、この方法には問題が潜んでいます。
例えば、サイトのメインカラーを変更したくなった場合、そのカラーコードが使われている箇所を全て探し出し、一つひとつ手作業で修正しなければなりません。
これは非常に手間がかかり、修正漏れの原因にもなります。
このような問題を解決するのがCSS変数(カスタムプロパティ)です。
CSS変数とは、色やサイズなどの値を「変数」という名前を付けた箱に保存し、必要な時にその箱の名前を呼び出して値を使い回す仕組みです。
これにより、値の管理を一元化でき、修正が必要になった際も、変数を定義している1箇所を修正するだけで、サイト全体のスタイルを一括で変更できます。
この保守性の高さから、CSS変数はモダンなWeb制作において必須の知識となっています。
それでは、具体的にコードを見ながら、CSS変数を使う場合と使わない場合でどれだけ保守性が変わるのかを比較してみましょう。
まず、CSS変数を使わずに、直接カラーコードを記述した例です。
変更に弱いコード(変数を使わない場合)
しかし、この方法には問題が潜んでいます。
例えば、サイトのメインカラーを変更したくなった場合、そのカラーコードが使われている箇所を全て探し出し、一つひとつ手作業で修正しなければなりません。
これは非常に手間がかかり、修正漏れの原因にもなります。
このような問題を解決するのがCSS変数(カスタムプロパティ)です。
CSS変数とは、色やサイズなどの値を「変数」という名前を付けた箱に保存し、必要な時にその箱の名前を呼び出して値を使い回す仕組みです。
これにより、値の管理を一元化でき、修正が必要になった際も、変数を定義している1箇所を修正するだけで、サイト全体のスタイルを一括で変更できます。
この保守性の高さから、CSS変数はモダンなWeb制作において必須の知識となっています。
それでは、具体的にコードを見ながら、CSS変数を使う場合と使わない場合でどれだけ保守性が変わるのかを比較してみましょう。
まず、CSS変数を使わずに、直接カラーコードを記述した例です。
変更に弱いコード(変数を使わない場合)
h1 { color: #007bff; } .button { background-color: #007bff; } a { color: #007bff; }h1 { color: #007bff; } .button { background-color: #007bff; } a { color: #007bff; }
CSS
このコードでは、h1 タグ、.button クラス、a タグの3箇所で同じカラーコード ( #007bff ) を使用しています。
もし、このテーマカラーを別の色に変更したくなった場合、コード内の3箇所すべてを正確に探し出し、修正する必要があります。
サイトの規模が大きくなればなるほど、この作業は手間がかかり、修正漏れやタイプミスといったヒューマンエラーの原因にもなります。
次に、CSS変数を使った例を見てみましょう。
変更に強いコード(変数を使う場合)
もし、このテーマカラーを別の色に変更したくなった場合、コード内の3箇所すべてを正確に探し出し、修正する必要があります。
サイトの規模が大きくなればなるほど、この作業は手間がかかり、修正漏れやタイプミスといったヒューマンエラーの原因にもなります。
次に、CSS変数を使った例を見てみましょう。
変更に強いコード(変数を使う場合)
:root { --primary-color: #007bff; } h1 { color: var(--primary-color); } .button { background-color: var(--primary-color); } a { color: var(--primary-color); }
CSS
こちらのコードでは、まず :root という場所に --primary-color という名前の変数を定義し、そこにカラーコード (#007bff) を保存しています。
そして、色を適用したい各要素では、var(--primary-color) という形でその変数を呼び出しています。
この方法なら、テーマカラーを変更したくなった場合でも、:root 内の変数の値を1箇所変更するだけで、その変数が使われているすべての要素に新しい色が適用されます。
このように、CSS変数を活用することで、修正の手間とミスを劇的に減らし、保守性の高い(メンテナンスしやすい)コードを書くことができるのです。
そして、色を適用したい各要素では、var(--primary-color) という形でその変数を呼び出しています。
この方法なら、テーマカラーを変更したくなった場合でも、:root 内の変数の値を1箇所変更するだけで、その変数が使われているすべての要素に新しい色が適用されます。
このように、CSS変数を活用することで、修正の手間とミスを劇的に減らし、保守性の高い(メンテナンスしやすい)コードを書くことができるのです。
CSS変数の基本的な書き方と使い方
CSS変数の使い方は、「定義」と「呼び出し」の2ステップで構成されます。
1. 変数の定義
変数は、--(ハイフン2つ)から始まる名前を付けて定義します。
サイト全体で使う変数は、HTMLのルート要素(最上位の要素)である :root セレクタの中で定義するのが一般的です。
【コード例:変数の定義】
変数は、--(ハイフン2つ)から始まる名前を付けて定義します。
サイト全体で使う変数は、HTMLのルート要素(最上位の要素)である :root セレクタの中で定義するのが一般的です。
【コード例:変数の定義】
:root { --main-color: #333333; --accent-color: #007bff; --base-font-size: 16px; }
CSS
この例では、 --main-color という名前の変数に #333333 という値を格納しています。
2. 変数の呼び出し
定義した変数は、var() 関数を使って呼び出します。
【コード例:変数の呼び出し】
定義した変数は、var() 関数を使って呼び出します。
【コード例:変数の呼び出し】
body { color: var(--main-color); font-size: var(--base-font-size); } .button { background-color: var(--accent-color); }
CSS
このように、 var() の括弧の中に呼び出したい変数名を入れることで、定義した値が適用されます。
【3-2】AIと作る!カラー&フォントの変数リスト
目安の学習時間:20分
AIにCSS変数の「命名規則」を提案させる
CSS変数を効果的に使うには、誰が見ても分かりやすい名前を付けることが重要です。
しかし、どのような命名規則が良いか迷うこともあるでしょう。
そんな時もAIが役立ちます。
前の章で抽出したカラーパレットの情報をAIに渡し、命名規則のアイデアを提案してもらいましょう。
しかし、どのような命名規則が良いか迷うこともあるでしょう。
そんな時もAIが役立ちます。
前の章で抽出したカラーパレットの情報をAIに渡し、命名規則のアイデアを提案してもらいましょう。
あなたはプロのCSS設計者です。 これから以下のカラー情報を使ってCSS変数を定義します。 分かりやすく再利用しやすい命名規則のアイデアを3つ提案してください。 カラー情報:メインカラー #2E8B57, サブカラー #F5F5DC, テキストカラー #333333
入力例
CSS変数名の命名規則のアイデア プロのCSS設計者として、再利用しやすく分かりやすいCSS変数名の命名規則を3つ提案します。 どの命名規則も、将来的なメンテナンス性やチーム開発での可読性を考慮しています。 1. 役割に基づいた命名規則 これは最も一般的で推奨されるアプローチです。 色そのものを示すのではなく、その色がUI上でどのような役割を果たすかに焦点を当てます。 メインカラー: --color-primary サブカラー: --color-secondary テキストカラー: --color-text-body または --color-text-default メリット: 色が変わっても変数名は変更する必要がないため、大規模なリファクタリングが不要です。 コードを読んだだけで、その色がUIのどこに使われるか直感的に理解できます。 セマンティックな意味合いが強く、アクセシビリティの観点からも推奨されます。 2. コンポーネントまたは要素に基づいた命名規則 特定のコンポーネントや要素に紐づく色がある場合に有効です。 これにより、そのコンポーネントのスタイリングがより明確になります。 メインカラー: --button-color-primary または --header-bg-color サブカラー: --card-bg-color または --input-border-color テキストカラー: --link-text-color または --footer-text-color メリット: 特定のコンポーネントのスタイルを管理する際に非常に便利です。 大規模なデザインシステムで、コンポーネントごとのデザインの独立性を高めたい場合に適しています。 デメリット: 色の汎用性が低い場合があり、多くの変数が必要になる可能性があります。 3. スケールに基づいた命名規則 (デザイントークン風) 色の濃淡や明度に応じてスケールを定義し、それを変数名に含める方法です。 デザイントークンの概念に近いアプローチです。 メインカラー: --green-500 (または --brand-green-500) サブカラー: --beige-100 (または --accent-beige-100) テキストカラー: --gray-800 (または --text-dark-gray) メリット: デザイントークンシステムを導入している場合や、将来的に導入を検討している場合にスムーズに移行できます。 色のバリエーションが増えたときに、一貫した命名規則で管理できます。 デザイナーと開発者間のコミュニケーションを円滑にします。 デメリット: 色の値と変数名のマッピングを覚える必要があり、最初のうちは学習コストがかかる可能性があります。 まとめと推奨 上記3つの提案の中で、最も汎用性が高く、将来的な変更にも強いのは役割に基づいた命名規則です。 まずはこの方法を基本として採用し、必要に応じてコンポーネント固有の色には2番目の方法を 組み合わせるのが良いでしょう。
出力例
変数リストをAIに一括生成させる
命名規則が決まったら、いよいよ変数リストの生成です。
抽出した全てのデザイン情報(色、フォントサイズなど)と、採用する命名規則をAIに伝え、CSSコードを一括で生成させます。
抽出した全てのデザイン情報(色、フォントサイズなど)と、採用する命名規則をAIに伝え、CSSコードを一括で生成させます。
重要:情報の精度と最終判断
ここで、2章で学んだ情報の精度が重要になります。
- 理想的なSVG(`
`要素を持つ)から得た正確な値 は、そのまま変数に採用します。 - JPGやアウトライン化SVGから推測した値(例:色が`#333334`、余白が`23px`)は、そのまま使わず、デザインの意図を汲み取ってキリの良い値(例:`#333333`、`24px`)に人間が修正してからAIに渡します。
この「AIの推測を鵜呑みにせず、人間が最終判断を下す」という一手間が、実装の品質を大きく左右します。
以下のデザイン情報と命名規則に基づいて、:root内で定義するCSS変数リストを作成してください。 ▼デザイン情報 - カラー - primary: #2E8B57 - secondary: #F5F5DC - text: #333333 - フォントサイズ - h1: 40px - h2: 32px - body: 16px ▼命名規則 役割ベース(例:--color-primary, --font-size-large)でお願いします。
プロンプト例
:root { /* カラー */ --color-primary: #2E8B57; /* メインカラー */ --color-secondary: #F5F5DC; /* サブカラー、背景などに利用 */ --color-text-default: #333333; /* デフォルトのテキストカラー */ /* フォントサイズ */ --font-size-h1: 40px; /* h1の見出しに適用 */ --font-size-h2: 32px; /* h2の見出しに適用 */ --font-size-body: 16px; /* 本文のテキストに適用 */ }
出力例
【3-3】AIと計画する!スペーシング変数
目安の学習時間:30分
なぜ余白(スペース)も変数化するのか
色やフォントと同様に、Webサイト全体で使われる余白(マージンやパディング)も、ある一定のルールに基づいて設計されていることがほとんどです。
例えば、「基本の余白を8pxとし、その倍の(16px, 24px, 32px...)で全ての余白を管理する」といったスペーシング・システムがよく用いられます。
余白をCSS変数として管理することで、サイト全体の余白感を一括で調整したり、デザインの一貫性を保ったりすることが容易になります。
margin: 15px; のような、その場しのぎの「マジックナンバー」をコードから排除することが、美しいレイアウトへの第一歩です。
例えば、「基本の余白を8pxとし、その倍の(16px, 24px, 32px...)で全ての余白を管理する」といったスペーシング・システムがよく用いられます。
余白をCSS変数として管理することで、サイト全体の余白感を一括で調整したり、デザインの一貫性を保ったりすることが容易になります。
margin: 15px; のような、その場しのぎの「マジックナンバー」をコードから排除することが、美しいレイアウトへの第一歩です。
AIと一緒に余白のルールから変数リストを作る
2章でAIに推測させた余白の値は、15px , 23px , 31px のように半端な数値であることが多いです。
ここでも人間の判断が重要になります。
推測値をルール化する思考
15px→16px、23px→24px、31px→32px のように、「おそらく8pxの倍数ルールだろう」と推測し、キリの良い数値に正規化(整形)します。
この正規化したルールを基に、AIに変数リストの作成を依頼します。
ここでも人間の判断が重要になります。
推測値をルール化する思考
15px→16px、23px→24px、31px→32px のように、「おそらく8pxの倍数ルールだろう」と推測し、キリの良い数値に正規化(整形)します。
この正規化したルールを基に、AIに変数リストの作成を依頼します。
:root { /* 余白 */ --space-sm: 16px; /* 小さな余白 */ --space-md: 24px; /* 中間の余白 */ --space-lg: 32px; /* 大きな余白 */ --space-xl: 40px; /* 特大の余白 */ }
出力例
最終チェック!実装で使う変数リストの完成
ここまでの作業で、カラー、フォント、スペーシングに関するCSS変数が揃いました。
これらを variables.css や custom-properties.css といった名前のCSSファイルにまとめておきましょう。
このファイルが、次のコーディング工程で非常に強力な武器となります。
値に迷うたびにデザインカンプに戻る必要はなくなり、このファイルを参照するだけで、一貫性のあるコーディングを高速に進めることができるようになります。
これらを variables.css や custom-properties.css といった名前のCSSファイルにまとめておきましょう。
このファイルが、次のコーディング工程で非常に強力な武器となります。
値に迷うたびにデザインカンプに戻る必要はなくなり、このファイルを参照するだけで、一貫性のあるコーディングを高速に進めることができるようになります。
【3-4】3章 -章末課題- [デザインカンプから"余白のルール"を読み解き変数化しよう!]
目安の学習時間: 20分
問題
あなたは、クライアントから受け取ったWEBCOACHサイトのデザインカンプ(下の画像)を元に、コーディングの準備を進めています。
このサイトで使われている余白(paddingやmargin)には、一貫したデザインルールが隠されていそうです。
この章で学んだ知識を活かし、AIと協力して余白の値を推測し、それをルール化(正規化)した上で、使いやすいスペーシング(余白)のCSS変数リストを作成してください。
本問題では、デザインカンプ画像の「チュートリアル」「環境セットアップ」カードコンポーネントの余白を調べましょう。
このサイトで使われている余白(paddingやmargin)には、一貫したデザインルールが隠されていそうです。
この章で学んだ知識を活かし、AIと協力して余白の値を推測し、それをルール化(正規化)した上で、使いやすいスペーシング(余白)のCSS変数リストを作成してください。
本問題では、デザインカンプ画像の「チュートリアル」「環境セットアップ」カードコンポーネントの余白を調べましょう。
解答手順
-
分析箇所の選定と推測の依頼
- デザインカンプ画像の中から、余白が分かりやすそうなコンポーネント(例:「チュートリアル」セクション)のスクリーンショットを撮ります。
- その画像をAIにアップロードし、「このカードコンポーネントの内部の余白(padding)と、各要素間の余白(margin)の値をpx単位で推測してください」と質問します。
-
推測値のルール化(正規化)
- AIは「padding: 23px」「margin-bottom: 15px」のように、半端な数値を回答する可能性が高いです。
- それらの推測値を眺め、隠れた設計ルールを読み解きます。(例:「おそらく8pxを基準にした倍数ルールで作られているな」)
- 推測値を、あなたが発見したルールに基づいてキリの良い数値(例:16px, 24px, 32px)に整形(正規化)します。
-
変数リストの生成
- 整形した余白の数値リストと、命名規則(例:-space-xs, -space-sm, -space-md)をAIに提示します。
- 「この余白の数値リストと命名規則に基づいて、:root内で定義するCSS変数リストを作成してください」と指示し、最終的なコードブロックを生成させます。
-
最終確認
- AIが生成したコードを確認し、完成したコードブロックを提出します。
解答例
1. 分析箇所の選定と推測の依頼
対象:
デザインカンプ画像の「チュートリアル」「環境セットアップ」カードコンポーネント
対象:
デザインカンプ画像の「チュートリアル」「環境セットアップ」カードコンポーネント
このカードコンポーネントの内部の余白(padding)と、 各要素間の余白(margin)の値をpx単位で推測してください。
AIの質問例:
2. 推測値とルール化(正規化)
推測値(AI回答)
|
ルール化(正規化)
|
理由
|
---|---|---|
padding: 20px
|
padding: 24px
|
8px単位ルールと仮定し、20px→24pxに整形
|
margin-bottom: 24px
|
margin-bottom: 24px
|
そのまま採用
|
margin-between-items: 12px
|
margin-between-items: 16px
|
8px単位と判断し16pxに昇格
|
section-gap: 32px
|
section-gap: 32px
|
そのまま採用
|
horizontal-padding: 20px
|
horizontal-padding: 24px
|
上記と同じ基準で整形
|
発見したルール
-
8pxグリッドシステム
(8px、16px、24px、32px、40px などを基準) - paddingとmarginはこの倍数で統一されている
3. CSS変数リストの生成(命名規則)
命名規則
役割+サイズ記法(例:--space-sm、--space-md)
役割+サイズ記法(例:--space-sm、--space-md)
CSSコード(完成版)
:root { /* 余白(スペーシング) */ --space-xs: 8px; /* 最小の余白(アイコン間などに使用) */ --space-sm: 16px; /* 小さな余白(リスト項目間など) */ --space-md: 24px; /* 中間の余白(カード内部paddingなど) */ --space-lg: 32px; /* 大きな余白(セクション間など) */ --space-xl: 40px; /* 特大の余白(ヒーローヘッダーなど) */ }
CSS
4. 最終確認と解説
- ルール化された余白を変数化し、デザイン一貫性を保つ設計
- コード上で padding: var(--space-md); や margin-bottom: var(--space-sm); などとして利用可能
- デザインカンプに直接戻ることなく、実装効率と品質が向上
お疲れ様でした!
これで、「3章 コーディング爆速化!CSS変数計画」の解説を終わります。
これで、「3章 コーディング爆速化!CSS変数計画」の解説を終わります。