このページの内容は新サイトVERSIONFIVEの「CSSでボックス要素を画面中央に表示させてみる - VERSIONFIVE」にて記事として公開されました。そちらもご覧下さい。
少し前に出た話題だけど、CSS (だけ) でブラウザのウィンドウの中央にボックスを表示させてみる。元ネタは以下の記事より。
CSSでDivを天地左右中央に配置する方法『locate div at the center vertically and horizontally』 | CREAMU
以下のリンク先にサンプルがあります。
元記事のように、ネガティブマージンを使用すると、中央配置したボックスの大きさよりブラウザのウィンドウが小さくなると、右上半分が消えてしまいます。
また position: static;
な body 要素に絶対配置すると、ブラウザのウィンドウを小さくしていくとうまいこといかない (画面の中央に表示されない) 現象がみられました。ということで今回は以下のように対策してみました。
position: relative;
を指定する。min-width
、min-height
を指定して、それ以下になったらスクロールさせる。現時点で CSS のみでは Internet Fucking Explorer 6 を克服できていません。。
min-width
、min-height
を実現する JavaScript を使えばできるけど、今回はそれが目的でないので割愛。
何かよい方法はないでしょうかね。
<div class="centerMiddle">
<p>ブラウザの画面サイズがボックスのサイズ(600×400)より小さくなってもスクロール可能になります。</p>
</div>
html, body {height: 100%;} /*高さ100%に指定*/
body {
margin: 0;
padding: 0;
position: relative;
min-width: 600px; /*中央配置するボックスの横幅*/
min-height: 400px; /*中央配置するボックス縦幅*/
background-color: #2262aa;
}
.centerMiddle {
margin: -200px 0 0 -300px; /*縦横の半分をネガティブマージンでずらす*/
position: absolute; /*body要素に対して絶対配置*/
top: 50%; /*上端を中央に*/
left: 50%; /*左端を中央に*/
width: 600px; /*横幅*/
height: 400px; /*縦幅*/
background-color: #fff;
}
今回は、ネガティブマージンを指定した際の問題を克服するように考えてみたけど、以下で紹介されている方法と margin: 0 auto;
を使えばおそらく中央配置できると思います。(試してないけど)
DIVを垂直方向に中央寄せするCSSサンプル:phpspot開発日誌
この手法では中央配置したいボックスの上に余分な (空) div を用意する点が気になります。例えば、この中に適当にロゴとか置いて、ブラウザの画面左上に絶対配置してみたりすれば空 div が気になる人も心が落ち着くかもしれません;-p