高さが不明な要素を上下中央配置する
CSS で高さが分からない要素を上下中央揃えする方法。
今回は .wrapper
というボックスが height:100%
で1ページ分の画面の高さいっぱいに広がっていて、その中に .box
というボックスがあるレイアウトで考える。よくポートフォリオ系のシングルページのサイトで見かける、「1画面文に気の利いた一言がドンと載ってる」みたいなのを長い縦スクロールで表現されるようなイメージの、アレ。
.box
の中にコンテンツを置いていくが、このコンテンツは .box
ごとに異なるので、.box
の高さが定まらない。でも .wrapper
の中で .box
を上下中央に配置したい…。そんな状況。
サンプルは以下。
- デモ : 幅・高さが不明な要素を上下左右中央配置する
- コード : frontend-sandboxes/index.html at master · Neos21/frontend-sandboxes
.wrapper
に必要なのは高さ指定と position:relative
のみ。今回は height:100%
にした関係で、html 要素と body 要素にも height:100%
を書いておく。
次に .box
は position:absolute
で絶対配置にするが、親要素である .wrapper
の position:relative
に従い、.wrapper
が基準になる。そこで top:50%
と指定すると、.box
は .wrapper
の上限中央の位置から下に配置される。
これでは「画面の真ん中から下に要素がある」状態なので、transform:translateY(-50%)
とすることで、その要素の高さの半分だけ、上方向に移動させてあげる。transform
は要素の回転や歪み、移動などができるプロパティ。必要であればベンダプレフィックスを付ける。
これで .wrapper
の高さを基準に、.box
が上下中央に配置された。
とりあえずやりたいことのはじめの一歩はできたが、現時点では .box
が画面左側に寄っていて見づらいので、次回修正する。
- 参考 : Centering in CSS: A Complete Guide | CSS-Tricks
transform
を使った方法は様々なサイトで紹介されているが、代表的なサイトをひとつ。
続きは以下。