box要素を画面中央に配置

<< 開発チームブログ

<< HOME

開発チームブログ

box要素を画面中央に配置

投稿日
2009年08月17日
カテゴリ
開発チームブログ

お盆ももう終わり。
ようやく8月に入って夏らしくなりましたが、北海道の夏は短い...。
ご存じの方も多いかもしれませんが、北海道の夏休みは暖かい地域と違って、25日間しかありません。
今年はだいたい20日前後には夏休み終了のようです。
そろそろ半泣きになった子供たちがたまりにたまった宿題に手をつけ始めるころですね。
(そういう私も、夏休みの宿題のごとくこのブログを書いているのですが...)


さて、今回は「box要素を画面中央に配置」する方法を書いてみたいと思います。
タイトルだけだとピンとこない感じがしますが、画面中央に上下左右センタリングするというものです。

<table>タグを使ってレイアウトを組んでいた時代は、<td>タグにalignやvalignを指定することで、
そのセルの中の要素を上下左右のセンタリングが可能でしたが、
xhtmlでは原則として<table>は表以外の使い方は好ましくありませんので、使用できません。
となると、他の方法で指定しなければならないのですが、
左右はともかく、上下のセンタリングを指定するcss(<table>タグでいうところのvalign)がないので、
どうにか方法を考えないといけません。

というわけで、下のソース。


// HTMLソース //==============================

<body>
    <div id="main">
        <img src="image/main.jpg" width="600" height="300" />
    </div>
</body>


// CSSソース //==============================

#main {
    position: absolute;
    top: 50%;
    left: 50%;
    width: 600px;
    height: 300px;
    margin-top: -150px;
    margin-left: -300px;
}

=====================================


すごく簡単にするために最小限のソースしか書いていませんが、
“main”というdivに幅600px×高さ300pxの画像を1枚表示します。
cssなしだと、ブラウザの左上に画像が表示されるだけです。
これをcssでブラウザの上下左右それぞれ中央に合わせてみます。

まず、div要素“main”の幅と高さをwidthとheightを使って固定します。
次にpositionに絶対配置指定(absolute)し、topとleftにそれぞれ50%と指定します。
こうすることで、ブラウザウィンドウに対して上下左右50%の位置にmainが移動します。
これで「画面中央に配置」が完了します.......と言いたいところですが、
このままだと、“main”の左上がウィンドウの中心に合ってしまい、画像は中央に表示されません。
なので、最後にmargin-topにネガティブなマージン-150px、margin-leftに-300pxを追加します。
これで、“main”の幅の半分が左にずれ、高さの半分も同様に上にずれるので、
“main”の中心がウィンドウの中心と重なります。

この方法だと、“main”の幅、高さが決まっていないといけない制約がつきますが、
cssでの上下センタリングを実現できます。
 

注目の情報
Return to Top