デザインしてるときに、**「ここだけブラウザの端から端まで背景を伸ばしたい!」**って場面ありませんか?
でも、要素が親要素に囲まれていると、width: 100% にしても親の幅に制限されちゃうんですよね。
今回は、親要素の幅に左右されず、ブラウザ幅いっぱいに表示する方法をご紹介します!
もくじ
どういうときに使うの?
例えばこんなとき👇
- コンテンツ幅は中央寄せだけど、見出しの背景だけ画面全体に広げたい
- セクション区切りの背景色を、ブラウザいっぱいに表示したい
- 画像や帯だけ、ブロック全体で見せたいとき
サンプル
See the Pen
親要素の幅に関係なくブラウザ幅いっぱいに要素を表示する方法 by webmoyou (@yydliugt-the-animator)
on CodePen.
よくある失敗例
<div class="wrapper">
<div class="full-bg">背景を横いっぱいにしたい</div>
</div>
.wrapper {
max-width: 960px;
margin: 0 auto;
}
.full-bg {
background: #d8f2d1;
padding: 30px;
width: 100%;
}
この場合、.full-bg の width: 100% は .wrapper の幅を基準にしてしまうので、結局中央寄せのまま背景がはみ出ない…!
解決法:position: relative; と left/right を使う!
.full-bg {
background: #d1f1f2;
padding: 30px 0;
width: 100vw;
position: relative;
left: 50%;
right: 50%;
margin-left: -50vw;
margin-right: -50vw;
}
仕組みのポイント
width: 100vw;→ ブラウザのビューポート全体の幅に指定left: 50%→ 要素の起点を中央にmargin-left: -50vw→ ビューポート幅の半分だけ左にずらす- 結果:画面の左端から右端までピッタリの幅になる!
注意点
- 要素が
overflow: hiddenの親要素に入っていると、はみ出た部分が切り取られるので注意! vwはスクロールバーの幅も含まれるので、環境によって微妙なズレが出ることがあります(調整が必要なときも)
まとめ
- 通常の
width: 100%では親要素の幅に依存する - ビューポート基準で表示したいなら
100vw+margin-left: -50vwを活用! - 見た目の幅広デザインに重宝するテクニックです!

