BG背景切れ改善 CSS
Webサイトをデザインしていると、背景グラデーションが途中で切れてしまう現象に出会ったことはありませんか?
たとえば body に linear-gradient() を指定しているのに、画面の途中で真っ白になる。
その原因は、意外にもCSSの“高さ”の仕様にあります。
❓ なぜ背景が途切れるのか
多くの人がまず以下のように html や body に背景を指定します
しかしこの指定だけでは、背景が画面全体に表示されないことがあります。
✅ 理由は、「height: 100%」は親要素依存だから
-
html→ ブラウザのビューポート(≒画面の高さ) -
body→htmlの高さ = 中身が少ないと body の高さも小さい -
→ 中の
.containerなどがoverflow: hiddenやposition: absoluteの影響を受けて「小さく」なると、背景の表示範囲も小さくなる💡 解決法:「ラッパー構造」で背景を別管理する
この問題を根本的に回避する方法が、背景専用のラッパーを用意することです。
✅ HTML構造(例)
✅ CSS指定(例)
-
🎯 なぜこの方法でうまくいくのか
背景の
linear-gradientをbodyに指定すると、bodyの高さに依存します。
ところが、containerにoverflow: hiddenやposition: absoluteなどがあると、bodyの高さが中身に追従しなくなるのです。一方
.background-wrapにmin-height: 100vhを指定すると:-
画面高を確実に確保
-
中身が短くても背景だけはしっかり表示
-
CSSの構造を「背景」と「中身」で分離でき、再利用しやすい
✅ まとめ:CSSでは“構造”と“背景”を切り離そう
よくあるミス 推奨される方法 bodyにbackgroundを設定.background-wrapを使って背景を分離overflow: hiddenによる高さ制限min-height: 100vhを背景ラッパーに指定グラデーションが途切れる 常に画面いっぱいの背景表示を保証 📘 補足:リセットCSSやFlex構造との相性
-
CSSリセット(reset.css)で
bodyのマージンが0になっているか確認 -
Flexレイアウトで親要素が
height: 100%になっていないと、min-height: 100vhの指定も無効になることがある
🧪 まとめ
背景グラデーションが途中で切れてしまう問題は、意外と“高さの継承”が原因であることが多いです。
その場しのぎのheight: autoやoverflow: visibleではなく、「背景専用ラッパー」を設けてmin-height: 100vhを与えることで、設計として安定した背景制御ができます。CSSで背景がうまくいかないときは、**「誰が高さを支配してるのか」**に立ち返ると解決の糸口が見えてきますよ。
-