CSS変数・アニメーション — モダンUIに欠かせない基本語彙
CSS変数・アニメーション — モダンUIに欠かせない基本語彙
🎯 このlessonを読み終えたら
このlessonを読み終えると、以下の3つを自信を持ってできるようになります。
- ▸✅ CSS Custom Properties(--var)でダークモードを実装する
- ▸✅ transitionと@keyframesの違いを理解する
- ▸✅ prefers-reduced-motionによるアクセシビリティ対応
学習目標をチェックリストとして手元に置き、すべてに答えられるようになったらlessonを閉じてください。
CSS変数(Custom Properties)— `--name`
基本的な使い方
:root はグローバルスコープ。どこからでも var(--name) で参照できます。
コンポーネントスコープ
要素ごとに変数を再定義できます。子要素が親で定義した変数をオーバーライドすることも可能。
ダークモード — 変数を一つ変えるだけ
色を一つ一つ変更する必要はありません — テーマ切り替えが簡単に。Tailwindの dark: バリアントはこれを自動化したものです。
prefers-color-scheme — システム設定に追従
ユーザーのOS設定を自動検出。手動トグルが不要なときに使います。
JSとの連携
Tailwind + CSS変数
Tailwind v4は完全にCSS変数ベース。bg-primary が自動的に bg: var(--color-primary) になります。
transition — なめらかな状態遷移
最もシンプルな形
プロパティ / 時間 / タイミング関数 — この3つがtransitionの核心。
複数プロパティを同時に
ホバー時にカードがわずかに浮き上がり + 影が深くなる — モダンWebの標準パターン。
タイミング関数
- ▸linear — 一定速度
- ▸ease(デフォルト)— 加速後に減速
- ▸ease-in — ゆっくり始まる
- ▸ease-out — 速く始まり、最後はなめらか(UIの標準)
- ▸cubic-bezier(...) — カスタム
UI遷移はほぼease-out。「速い始動 + 自然な着地」の自然さ。
transition: all の落とし穴
プロパティを明示的に列挙する方が良い:
アニメーション可能なプロパティとは
数値で補間できるもののみ。display、visibility、background-image は不可。opacity、transform、color、width、height は可能。
GPUアクセラレーションが効くプロパティ: transform と opacity(パフォーマンス最優秀)。width/height の変更はレイアウト再計算が発生するため遅い。
transform — translate / scale / rotate
マージン/パディングの変更より高速 — GPUが直接コンポジット処理。
@keyframes — 複雑なアニメーション
基本構造
0% → 100%(from → to)を定義。CSSが補間を自動処理。
中間ステップが必要な場合
ローディングスピナー — 実践的な例
あらゆるSaaSサイトで使われているスピナーがこれ。
animationプロパティの完全版
一括指定。展開すると6つのプロパティ:
prefers-reduced-motion — アクセシビリティの必須対応
めまいや前庭障害のあるユーザーのためにモーションを無効化。アクセシビリティスコアに直結。
🤖 AIへのリクエスト例
- ▸「このボタン、ホバー時に少し浮き上がって影を深くしてください」
- ▸「CSSのローディングスピナーを作ってください。360度回転、0.8秒、無限ループ。」
- ▸「prefers-reduced-motionへの対応を追加してください」