最近、ブログの記事ページをスマホで確認したところ、本文全体が画面の右にはみ出す現象に遭遇しました。
コードブロックや表を含む記事だけに発生していて、他の記事は問題なし。
「テーブルが悪いのか?」「コードブロックか?」と原因を探っていくと、実は Grid レイアウト特有の挙動 が原因でした。


症状

  • スマホで記事を開くと、本文全体が画面右にずれてしまう
  • 横スクロールしてもコードや表が最後まで見れない
  • 他の記事(画像だけの記事など)は正常に収まる

原因:Grid子要素の min-width: auto

記事ページは以下のように Grid レイアウト を使っていました。

.article-layout {
  display: grid;
  grid-template-columns: 3fr 1fr;
  gap: 20px;
}

一見普通の2カラムレイアウトですが、ここで CSS Grid の落とし穴 が発動します。 Grid や Flexbox の子要素には、デフォルトで min-width: auto が効いています。

これが曲者で、「子要素の中に折り返せないコンテンツ(例:コードブロック、長いURL、表など)」があると、 子要素は その幅を優先して縮まらない → その結果、Grid 全体が親幅を超えてはみ出す という現象が起こります。

解決策:min-width: 0 を指定する はみ出しを防ぐためには、Grid の子要素に min-width: 0 を指定して「親幅に収まるよう縮んでよい」と教えてあげる必要があります。

.article-layout > *,
.article-main,
.sidebar {
  min-width: 0; /* ←これがポイント */
}

こうすると、本文はちゃんと画面幅に収まります。 折り返せない要素(コードや表)は、その要素だけが横スクロール可能になり、全体ははみ出さなくなります。

修正前(はみ出してしまう)

スマホ画面幅
本文が広がる → 横スクロール不可

修正後(本文は収まる、コードや表だけ横スクロール)

スマホ画面幅
本文本文本文
┌───────────────┐
コードや表 ← 横スクロールOK
└───────────────┘

まとめ

  • Grid / Flexbox の子要素はデフォルトで min-width: auto
  • 折り返せない要素があると 親より広がってしまう
  • 子要素に min-width: 0 を指定すれば、本文全体は収まり、はみ出し解消

🎯 今回の学び

「Grid や Flexbox でレイアウトしていて本文やカードがはみ出す」ときは、まず min-width: 0 を疑え!

これは CSS レイアウトでかなり多くの人がハマるポイントなので、同じように悩んでいる人の参考になれば嬉しいです。