モダンCSS には、メディアクエリーと JavaScript ハックの整カテゴリーを置き換える関数とプロパティが追加されました。主な機能は以下の通りです:
clamp() — フルイドで制限された値
css
h1 { font-size: clamp(1.5rem, 4vw, 3rem); }
/* │ │ └── maximum (never bigger than 3rem) */
clamp(min, preferred, max) はフルイドなタイポグラフィ/スペーシングを提供し、ビューポートに応じてスムーズにスケールしながら境界内に留まります — 複数のブレークポイント分の font-size メディアクエリーを1行で置き換えられます。
.video { aspect-ratio: 16 / 9; width: 100%; } /* height auto-computed to keep 16:9 */
.avatar { aspect-ratio: 1; } /* perfect square at any width */
これ以前は、レスポンシブな 16:9 ボックスを保持するために悪名高い padding-bottom: 56.25% ハックが必要でした。今は1つの宣言だけです — そして画像読み込み前にスペースを予約できます(CLS対策に良い)。
.container { width: min(90%, 1200px); } /* whichever is SMALLER → fluid but capped */
.box { padding: max(1rem, 3vw); } /* whichever is LARGER → a minimum floor */
min()/max() は値の小さい方/大きい方を選択し、メディアクエリーなしで1つのプロパティをレスポンシブにします(例:「幅90%, ただし1200pxを超えない")。
.card { display: grid; grid-template-rows: subgrid; grid-row: span 3; }
subgrid はネストされたグリッドが親のトラックラインを継承できるようにするため、異なるカード間のアイテム(タイトル、本文、ボタン)が共有行で完璧に整列します — 以前は固定高さなしには不可能でした。
.flex { display: flex; gap: 1rem; } /* gap now works in flexbox, not just grid */
これらの機能は長年のハックを排除します: clamp()/min()/max() はフルイドサイジングのメディアクエリースタックを置き換え、aspect-ratio はパディングハックを置き換えてレイアウトシフトから保護し、subgrid はコンポーネント間の整列を解決します。
レスポンシブで比例的なレイアウトを劇的にシンプルで堅牢にします — モダンCSS は宣言的に、以前は JS または脆弱なトリックを必要としていたことを実現します。