CSSで親要素のwidthを無視して背景を画面幅いっぱいに広げる方法

本記事では親要素のwidthを無視して背景を広げる方法をご紹介します。

調整前構造

HTML

<main class="l-main">
<div class="p-hoge">
<div class="p-hoge__bg">
<p class="p-hoge__text">texttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttext</p>
</div>
</div>
</main>

CSS

.l-main {
width: 90%;
margin-left: auto;
margin-right: auto;
}
.p-hoge {
width: 100%;
}
.p-hoge__bg {
background-color: #f00;
}

表示イメージ

texttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttext

※青背景部分が.l-main, 赤背景部分がp-hoge

背景を画面幅いっぱいに広げるCSSを追記する

.p-hoge__bg {
background-color: #f00;
/* ↓ Add */
margin-left: calc(((100vw - 100%) / 2) * -1);
margin-right: calc(((100vw - 100%) / 2) * -1);
padding-left: calc((100vw - 100%) / 2);
padding-right: calc((100vw - 100%) / 2);
/* ↑ Add */
}

下記のように背景が画面幅いっぱいになります

texttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttexttext

Sassを使う場合はmixinを作っておくと便利です

@mixin contents-full {
margin-left: calc(((100vw - 100%) / 2) * -1);
margin-right: calc(((100vw - 100%) / 2) * -1);
padding-left: calc((100vw - 100%) / 2);
padding-right: calc((100vw - 100%) / 2);
}

GitHubでよく使うmixinを公開していますのでご参考ください!

Naoki

Author: Naoki

Frontend Developer

Share

Link is copied.