コンテナから要素をはみ出したい
このブログでは全体のレイアウトを定義した上で、その中にヘッダーやフッター、メインコンテンツを配置しています。
イメージとしては次のようなHTML構造です。
.container
に対してはmax-width
を設定して、コンテンツが画面幅いっぱいに広がらないようにしています。
これによって共通の幅を確保できるのはいいのですが、たとえばヘッダーは横幅いっぱいに広げたい場合どうすればいいでしょうか?
解決策の1つはスタイルを共通ではなく、各セクションごとに定義することです。
これでもよいのですが、そのほかのスタイルをTailwind CSSで複数適用していたため、できれば共通のスタイルを使いたいところです。
calcでネガティブマージンを利用してはみ出す
はみ出したい子要素に対して、以下のスタイルを適用することで、やりたいことを実現できます。
HTMLについては、次のようになります。
適用のイメージについて、個人的には次のように考えるとわかりやすいかと思います。
- 親要素を基準に、
100vw
で要素を横幅いっぱいに広がる。親基準なので、画面の端からではなく親の端から広がる。これを調整したい。 - 親要素の左右それぞれに対して(つまり半分ずつに分割して考える)、画面幅の要素から親要素を引いた値をうめたい。これをネガティブマージンで再現する。
margin-inline
を利用して、水平方向に対して、2のマージンを適用する。
細かいポイントがコンテナクエリを使っていることです。50vw
だと、スクロールバーを含めた部分までで横幅を計算するので、横スクロールバーが生じてしまいます。
bodyに対しての純粋な半分が欲しいので、bodyをコンテナに指定した上で、その半分である50cqi
を指定すればこの問題も解決です(cqi
はコンテナーのインライン(横書きだと水平方向)の1%をさす単位です)。