fixedで指定したCSSを縦横中央寄席にしてみた

スタイルシートで、縦横中央寄席はよくありますが、いざ設定してみようとするとなかなかうまくいきません。

横中央揃えならともかく、縦中央が特に難しいです。
なぜならば、スタイルシートに標準で縦中央揃えする指定がないためです。

こんかいさらに、fixed指定のボックスを縦横中央に揃える事例がありました。
なかなかうまくできなかったのですが、ググって調べ、うまくできました。

忘備録として記録いたします。

何も考えずにやってみたらずれました。

まずはどうすればよいかわからなかったため、TOP、LEFTを50%指定でやってみました。
するとこのようになりました。

サンプルはこちらです。

なんか微妙にずれています。
cssの記述はこのような感じです。

50%指定していてもなぜずれるのでしょうか?

原因は記述しているBOXサイズの分を考慮していないため

サンプルのボックスは横400px 縦100px あります。
例えば、横2000px 縦1000pxの場合、ボックスサイズを考慮し、次のように指定しなければいけません。

left: 800px;
top: 450px;

ところが、縦横50%指定すると次のような指定になってしまいます。

left:1000px;
top:500px;

横200px 縦50pxずれることになります。
だから真ん中によっていなかったのです。

これを何とかするためには、ボックスサイズの分を反映しなければいけません。
しかし、ウィンドウサイズは一定でないため、%指定しなければいけません。
%指定に対してピクセルで調整することはできるのでしょうか?

この部分でつまづきましたが、ググって調べて対処することができました。

縦横中央寄せする3つの方法

幅を%指定しつつ、ピクセル単位で調整する方法をググったところ、以下の3つの方法があることがわかりました。

  • transform 指定で調整する方法
  • calc指定で算出する方法
  • inset で指定する方法

3つの方法とも同じ結果が得られます。
これらの方法について記載いたします。

(1)transformで指定する方法

transform指定は、図形を回転させたり、x軸y軸へ位置をずらしたりすることができます。
transformを指定して中央寄せしたサンプルがこちらです。

ソースはこちら

失敗した例にtransform1行足すことで実現できました。

仕組み

left top指定で、ボックスを画面の50%位置へ配置します。
translateX、translateYで、ボックスの50%サイズずらします。

ボックスサイズの半分をずらすことで、ぴったり中央寄せになります。
-50%の代わりに、ピクセル指定でもOKですがここは%指定のほうが汎用性があります。

(2)calcで指定する方法

calcはスタイルシート記述で計算ができる命令です。
特色は、単位が違っていてもピクセルに変換して実行してくれます。

この特性を利用して%とピクセルの調整を行います。

この方法で中央寄席したサンプルがこちらです。

ソースはこちら

仕組み

left:50% top:50%でずれる分をcalcで引き算して調整しています。
実際に記述している部分はこちらです。

50%から、ボックスサイズの半分を引き算した値をleft、topに指定しています。
ずれる分を引き算しているので、中央寄せになるという仕組みです。

(3)insetで指定する方法

inset はtop left right bottomを一括指定する方法です。
つまり、上下左右に0を指定することで、結果的に中央寄せにする方法です。

この方法で中央寄せにしたサンプルがこちらです。

ソースはこちら

inset:0; を指定するだけで縦横中央寄せが実現できています。
3つの中で一番シンプルです。

なんでこれだけで中央寄せになるのか不思議でしたが、次の指定と同じ意味になることが分かって理解できました。

insetはtop,left,right,bottomをまとめて指定することになるため、4方向0を指定するのと同じ結果になります。

事実、insetを使わず、top,left,right,bottomに0をを指定してみたところ、縦横中央寄せになりました。

どの方法を使うかはケースバイケース

今回の事例では、3つの方法いずれもうまくいきましたが、場合によってはうまくいかないこともあります。

例えば、画面切り替え時に、読み込みが終わるまで「お待ちください」を表示するJqueryを使用した場合、(2)のcalcのみ中央寄せになりました。

このように、jqueryなど様々な要因が絡んだ場合、うまくいかなくなるケースもあります。
なので、いろいろ試してうまくいく方法を見つけ出すことも肝要です。

今回のレポートは以上です。
読んでいただいてありがとうございました。


ホームページに関するお悩み事やご相談事がございましたら私どもまでご連絡ください。 鋭意ご対応申し上げます。
ホームページのご提案もさせていただいております