モダン CSS レイアウト & サイズ:コンテナクエリ、Subgrid、Aspect-Ratio のマスター
レスポンシブデザインは進化しました。私たちは「ページベース」のレイアウト(メディアクエリ)の世界から、「コンポーネントベース」のレイアウト(コンテナクエリ)の世界へと移行しています。モダン CSS は、より弾力性があり、ポータブルで、メンテナンスが容易なレイアウトを構築するためのツールを提供します。
このガイドでは、次世代のウェブレイアウトを牽引するコアテクノロジーを探索します。
2. CSS Subgrid:完璧な整列
最近まで、カードのグリッドがあり、ヘッダーとフッターをすべてのカードで整列させたい場合(コンテンツの長さが異なっていても)、それは不可能でした。
Subgrid は、子要素が親のグリッドトラックに参加できるようにすることで、この問題を解決します。
.card-grid {
display: grid;
grid-template-rows: repeat(4, auto);
}
.card {
grid-row: span 4;
display: grid;
grid-template-rows: subgrid; /* 子が親の行を継承する */
}
grid-template-rows: subgrid を使用すると、カードの内部要素(ヘッダー、コンテンツ、フッター)がトップレベルのグリッドで定義されたトラックにスナップし、行全体で完璧な整列が保証されます。
3. aspect-ratio による比率の維持
以前は、アスペクト比を維持するために「パディングハック」(16:9 の場合は padding-top: 56.25%)を使用していました。モダン CSS は aspect-ratio プロパティを提供し、シンプルで読みやすくしました。
.video-player {
aspect-ratio: 16 / 9;
width: 100%;
}
.square-avatar {
aspect-ratio: 1 / 1;
width: 150px;
object-fit: cover;
}
これは画像、ビデオ、さらにはレイアウトコンテナでも完璧に機能し、コンテンツが読み込まれる前にスペースを確保することでレイアウトシフト (CLS) を防ぎます。
4. モダンな Grid と Flexbox の機能
Flexbox と Grid は確立されていますが、新しい機能によってさらに進化しています。
- Flexbox の Gap:Grid と同様に、Flexbox でも
gapを使用できるようになりました。子要素に 「margin-right」 を指定する必要はありません。 - 組み込みサイズ (Intrinsic Sizing):
min-content、max-content、fit-content()を使用すると、任意のピクセル値ではなく、コンテンツのサイズによってレイアウトを駆動できます。 - 安全/不安全な整列:
align-items: safe centerは、アイテムがコンテナより大きい場合に、端で切り取られないようにします。
5. レイアウトの可視化
適切なツールなしで複雑なレイアウトを構築するのは難しい場合があります。以下の使用をお勧めします。
- Flexbox プレイグラウンド:
flex-grow、shrink、basisを実験するため。 - Grid テンプレートビルダー:列と行を視覚的にマッピングするため。
モダンなレイアウトツールのまとめ
| 機能 | 最適な用途 | サポート状況 |
|---|---|---|
| コンテナクエリ | ポータブルでレスポンシブなコンポーネント | 広くサポート |
| Subgrid | グリッドアイテム間での要素の整列 | 広くサポート |
| aspect-ratio | ボックスの比率の維持 | 広くサポート |
| gap (Flexbox) | アイテム間の一貫した間隔 | すべてのモダンブラウザ |
結論
2026 年のレイアウトは、組み込み設計 (intrinsic design) が中心です。要素を固定位置に強制する代わりに、コンテナクエリと Subgrid を使用して、要素が環境に自然に適応できるようにします。
独自のレイアウトを構築したいですか?当サイトの CSS レイアウトツール をチェックしてください。近日公開予定の Flexbox プレイグラウンド もお楽しみに!