親要素を超えて、ブラウザ幅いっぱいに広げる : CSS 1行コード
親要素を超えて、ブラウザ幅いっぱいに広げる : CSS 1行コード
画面の幅いっぱいに広がるデザイン、現代的でよいですね。
よく、ページコンテンツ全体を #wrapper などの要素で包んで、読みやすいように最大幅を設定したりしますが、でもこの部分は広げたい!
というときに有効な、たった1行のCSSコードをご紹介します。
サンプル コード
<!-- HTML -->
<div id="sample">
<p>親要素はブラウザに対して中央寄せに</p>
<div class="child">
<p>子要素に margin: 0 calc(50% - 50vw) を1行追加!</p>
</div>
</div>
/* CSS */
#sample{
margin: 0 auto;
width: 60%;
outline: 1px solid;
}
#sample .child{
padding: 0 calc(50vw - 50%);
margin: 0 calc(50% - 50vw);
background: pink;
}
サンプル DEMO
親要素はブラウザに対して中央寄せに
子要素に margin: 0 calc(50% - 50vw) を1行追加!
コード解説
親要素がブラウザに対して中央寄せであれば、この1行を追加するだけで子要素がブラウザ幅いっぱいに広がります。
子要素が display: block でなければ、width: 100% とかしてね。
ちなみに、サンプルでは margin で広げた分を padding で相殺しています。背景を敷きたいだけなら、擬似要素を absolute に配置してゴニョゴニョすれば、子要素のコンテンツに影響を与えません。
ほかにも、position: relative; left: 50%; width: 100vw; transform: translateX(-50%) としても問題ありませんが、ネガディブマージンだけで済む方が無駄なくスマートですね。
気をつけることは、vw 単位にはスクロールバーの幅も含まれるので、ブラウザの表示領域幅より若干広くなり、横スクロールバーが出てしまうこと。
body を overflow-x: hidden にするしかないかと。
おわりに
今さら感のある小ネタで、これからもマッタリ続けます。