CSS Grid実践術|複雑なレイアウトをシンプルに設計する方法
こんにちは!
今日は「CSS Gridを使った複雑なレイアウト設計のコツ」について解説します。
レイアウト設計で僕が陥った失敗
正直に告白します。
僕も最初、CSS Gridのメリットがよく分かっていませんでした。display: flexだけで十分だと思ってたんですよ。
ある案件で、ダッシュボード風の複雑なレイアウトを作ることになったんです。
ヘッダー、サイドバー、メインコンテンツ、フッター…それにウィジェットがいっぱい。
Flexだけで対応しようとしたら、めっちゃ入れ子が深くなってしまって、もう大変でした。
そこで気づいたんです。
CSS Gridって「二次元レイアウト」を最初から考えるツールなんだ、って。
縦軸と横軸を同時に制御できるから、複雑なレイアウトほど、実はシンプルに書けるんですよ。
テンプレート領域で視覚的に設計する
CSS Gridで一番強力な機能が、grid-template-areasです。
これはホンマに便利やん、て感動しました。
例えば、こんなレイアウトを作りたいとします。
.container {
display: grid;
grid-template-columns: 250px 1fr 300px;
grid-template-rows: 60px 1fr 40px;
grid-template-areas:
"header header header"
"sidebar main aside"
"footer footer footer";
gap: 15px;
}
.header {
grid-area: header;
}
.sidebar {
grid-area: sidebar;
}
.main {
grid-area: main;
}
.aside {
grid-area: aside;
}
.footer {
grid-area: footer;
}
見てください。
CSSコードの中に、ほぼ図解が入ってるような感じで、パッと見で「ああ、このレイアウトなんだ」って分かります。
これは現場でめっちゃ強いですよ。
タスクチェンジして別の人がコードを見た時も、grid-template-areasがあると、修正がすごく楽になります。
自動配置と明示的配置を組み合わせる
複数のカードやウィジェットを配置する時、わざわざ一個一個にgrid-areaを指定するのは面倒です。
そんな時は「自動配置」と「明示的配置」を混ぜるといいですよ。
.dashboard {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
grid-auto-rows: 300px;
gap: 20px;
}
.widget-featured {
grid-column: 1 / -1;
grid-row: 1;
}
.widget {
/* 自動的にグリッドに配置される */
}
重要なウィジェット(例:売上チャート)はgrid-column: 1 / -1で横幅全体を占めさせて、他のカードは自動配置で「すき間に自動的に入る」という感じです。
これ、計算すごく楽になります。
レスポンシブ対応を簡潔に書く
モバイルで1カラム、タブレットで2カラム、PCで3カラムみたいなレイアウト、ありますよね。
Flexだと何度も要素の順序を変えたり、flex-wrapの挙動を考えたりして、ちょっと複雑になります。
Gridなら、メディアクエリでカラム数を変えるだけです。
.grid-container {
display: grid;
grid-template-columns: 1fr;
gap: 20px;
}
@media (min-width: 768px) {
.grid-container {
grid-template-columns: repeat(2, 1fr);
}
}
@media (min-width: 1200px) {
.grid-container {
grid-template-columns: repeat(3, 1fr);
}
}
ほら、これだけ。
子要素には何もCSSを書く必要がありません。
親のグリッド定義を変えるだけで、全部のアイテムが自動的に配置し直されます。
まとめ
CSS Gridは「複雑だ」と思われることが多いんですが、実は逆で、複雑なレイアウトほど「シンプルに書ける」ツールです。
特にgrid-template-areasとgrid-template-columnsの組み合わせは、現場で本当に頼りになります。
見た目の構造がコードに反映されるので、バグも減りますし、保守もしやすくなります。
もし「Flexで何度もネストしちゃってる…」という状況だったら、ぜひGridへの切り替えを検討してみてください。
データベースの管理画面やダッシュボード、複雑な記事レイアウトなんかは、Gridの出番ですよ。
Web制作で困ったことがあったら、またこのブログを覗いてくださいね!
― クリオ