トラブルシュート

CSS Gridのレイアウトが崩れる・列が揃わないときの原因と対処

Gridを使ったのに列の幅が揃わない、要素が想定外の位置に流れる、子要素がはみ出す。多くはgrid-template-columnsの指定不足、fr単位の誤解、そしてアイテム側のmin-widthによるものです。この記事では崩れの典型を切り分けながら直す方法をまとめます。

Gridの列はテンプレートで決まる

display:gridを付けただけでは列は1列のまま縦に積まれます。横並びの列を作るにはgrid-template-columnsで列の構成を明示する必要があります。これを忘れると、Flexのように自動で横並びにはなりません。

例えば3列にしたいならgrid-template-columns:1fr 1fr 1frのように記述します。繰り返しはrepeat(3, 1fr)と書くと簡潔です。指定した列数を超えるアイテムは自動的に次の行へ折り返されます。

列が揃わないと感じたときは、まずgrid-template-columnsが意図どおりの値になっているか、開発者ツールのGridオーバーレイで実際の線を確認するのが近道です。

fr単位の誤解でよくある崩れ

frは余った空間を分配する単位で、コンテンツの最小サイズを下回ってまで縮むわけではありません。1fr 1frと書いても、片方に長いコンテンツがあると、その最小幅が優先されて左右の幅が揃わないことがあります。

幅を厳密に揃えたいときは、minmax(0, 1fr)を使うのが定番です。これでアイテムのコンテンツ由来の最小幅を0まで許容し、純粋に空間を等分できます。テーブル状のレイアウトで特に効果的です。

frとpx、percentを混在させると分配の計算が直感に反する場合があります。固定したい列はpx、可変にしたい列だけfrにすると意図が読み取りやすくなります。

症状別チェック表

CSS Gridのレイアウトが崩れる・列が揃わないときの原因と対処は、症状を分けずに直そうとすると原因探しが長引きます。まず「自分だけで起きるのか」「全員で起きるのか」「特定ブラウザだけか」「差し替え後だけか」を切り分けます。

確認順序を固定すると、相対パス、ファイル名、キャッシュ、認証、外部読み込みのどこで止まっているかが見えます。修正後はローカル確認だけで終わらせず、実際の共有URLで再表示して、相手と同じ条件で直ったことを確認します。

  • 自分だけ表示されない: キャッシュ、ログイン状態、ブラウザ拡張、端末幅を確認する
  • 全員で表示されない: ファイル構成、相対パス、大文字小文字、アップロード漏れを見る
  • 一部だけ崩れる: CSS/画像/JSごとに読み込みエラーを分ける
  • 差し替え後だけ古い: URL、キャッシュ、更新対象ファイルの取り違えを確認する

崩れを切り分ける手順

Gridの崩れは確認の順序を決めておくと早く特定できます。次の手順で進めてください。

  1. 親にdisplay:gridが付き、grid-template-columnsが指定されているか確認する
  2. 開発者ツールのGridオーバーレイで実際の列線とトラック幅を表示する
  3. 揃わない列にminmax(0, 1fr)を試して挙動が変わるか見る
  4. はみ出すアイテムにmin-width:0/overflow:hiddenを当てて原因を絞る
  5. gridのgapやpaddingが想定外に効いていないか確認する

アイテムのはみ出しとmin-width

GridアイテムにもFlexと同様にmin-width:autoが効いており、長いテキストや横幅の大きい画像が原因でトラックを押し広げ、レイアウトを崩します。これに気づかないと、frを調整しても直りません。

対策はアイテムにmin-width:0を与えることです。テキストのはみ出しが伴う場合はoverflow:hiddenやtext-overflow:ellipsis、長い英数字にはoverflow-wrap:anywhereを併用すると安定します。

画像はwidth:100%とdisplay:blockを付けると、トラック幅に対して素直に追従するようになります。

確認用レイアウトを共有して見比べる

Gridの崩れは値を少し変えるだけで結果が大きく変わるため、複数の修正案を実機で比較するのが効果的です。minmaxあり版・なし版、列数違いなどを並べると違いが一目で分かります。

作った検証用HTMLを関係者と共有したいときは、ギガサイト便にHTMLやZIPをドロップするだけで共有URLが発行できます。会員登録なしでも公開でき、URLのままファイルを差し替えられるので、修正のたびにリンクを送り直す必要がありません。社外に見せる場合はパスワードや会社ドメイン認証を併用すると安心です。

よくある質問

display:gridにしたのに縦一列のままです

grid-template-columnsで列を定義していないためです。repeat(3, 1fr)のように列の構成を明示すると横並びになります。

1fr 1frなのに左右の幅が揃いません

アイテムのコンテンツ最小幅が効いている可能性があります。minmax(0, 1fr)に置き換えて、コンテンツによらず空間を等分できるか確認してください。

アイテムがトラックからはみ出します

min-width:autoが原因のことが多いです。アイテムにmin-width:0を付け、必要に応じてoverflowやoverflow-wrapを併用してください。

GridとFlexはどちらを使うべきですか

二次元(行と列の両方)の整列はGrid、一次元(横一列か縦一列)の整列はFlexが向きます。カード一覧の整然とした格子にはGridが扱いやすいです。

原因が分からないときはどこから確認すべきですか?

まず自分だけの問題か全員の問題かを分けます。次にシークレットウィンドウ、別ブラウザ、スマホで確認し、ファイル構成・相対パス・キャッシュ・認証設定を順に見ます。

関連記事

トラブルシュート

Bootstrapのグリッドやコンポーネントが崩れるときの対処

Bootstrapでカラムが揃わない、モーダルやタブが反応しないというトラブルに悩む開発者向け。読み込み順やHTML構造の崩れ、バージョン間の仕様変更が原因かどうかを素早く切り分けられます。

5分で読める
トラブルシュート

印刷すると崩れる・はみ出すときの対処

画面では整っているのに印刷すると文字が切れたり右端がはみ出したりする悩みを持つ人向けに、印刷用CSSとページ設定で崩れを防ぐ具体的な手順を説明します。

4分で読める
トラブルシュート

スマホを横向きにすると崩れるときの原因と対処

縦向きでは問題ないのにスマホ横向きで要素が収まらない固定ヘッダーが邪魔になるという崩れに困っている方向け。横向き特有の幅広・高さ低の状態に対応する対処法をまとめています。

5分で読める
トラブルシュート

ブラウザのズーム(拡大表示)でレイアウトが崩れるときの対処

拡大表示した途端に文字が重なったり余白が消えたりして困っているデザイナー・コーダー向け。ズーム時のフォント拡大とレイアウト単位の組み合わせがなぜ崩れを起こすのか原因を解説し、共有URLで実機確認しながら修正を進める手順を紹介します。

5分で読める
トラブルシュート

公開後にJavaScriptが動かないときの原因と直し方

ローカルでは動いていたボタンやアニメーションが公開後に反応しなくなった方向け。JavaScriptが止まる主な原因をファイルパスや読み込み順の観点で切り分け、自分で直せるかどうかを判断できます。

5分で読める
「トラブルシュート」の記事をもっと見る →