CSS コンテンツの中央配置

2020-06-15

コンテンツ要素の上下左右の中央配置について、いくつか挙げていきたいと思います。
サンプルとして、下記のようなソースをベースに記述していきます。

<sample-outer>への高さの指定や背景などは、参考程度に。


position: absolute

コンテンツのサイズが決まっている場合は、position:absoluteと margin で調整していきます。

Sample

left:50%; top: 50%; を指定して、中心部に。さらに、marginで、コンテンツの半分の移動するという方法です。

同じような方法で、

Sample

left/top/right/bottom の値を 0、 margin: auto; を指定する方法です。
どちらも中央配置したいコンテンツのサイズ(幅/高さ)を指定する必要があります。


transformを活用

コンテンツのサイズは指定しない、または、可変となる場合が多い時には、transformを使用します。

Sample

この方法は、コンテンツのサイズサイズを指定してもしなくても、大丈夫ですが、transformのアニメーションを使用している場合など、指定の方法に気を付ける必要があります。


display:table

次に、table-cellを指定する方法ですが、コンテンツが2つある場合でも上下中央に配置できますので、比較も兼ねて、下記のようなソースにしてみます。

Sample

テキストテキスト

display:table-cellにすることで、vertical-alignを適用することができます。
高さを100vhなどに指定すれば、画面いっぱいなどにも対応できますが、2つコンテンツを並べている場合、コンテンツ間にスペースはできません。


display:flex

次に、flexを指定する方法です。

テキストテキスト
テキストテキスト

テキストテキスト

display:flexの場合は、align-itemsで上下の位置を調整することができます。
こちらは、コンテンツ間のスペースを確保することもできますが、内包するdivに高さを入れるとその高さに対して、上下中央に配置され、内容量が違い、かつ、背景を付けたい場合などは、高さを揃えたりもしないといけないため、ちょっとやり方を考えないといけません。

と、このような形で、それぞれに一長一短といった違いがありますので、サイトの仕様などによって、使い分けることが望ましいと思います。
個人的には、transformをよく使用しています。