例えば、ウェブサイトを作成していて、メインビジュアルなどの上下左右のちょうど中央にテキストや画像などの要素を置きたい時って、以前までの CSS2 であれば、position:absolute あたりで指定なければなりませんでした。
しかし、CSS3 では「table-cell」というとてもありがた~いものがございまして、以前に比べて簡単に、ボックス内での要素の上下左右の中央表示ができるようになりました。
今回は「CSS の table-cell を使って簡単にボックス内要素の上下左右中央表示を行う手順」を実際に作ったサンプルと一緒に紹介します。
目次
CSS の 値「table-cell」とは? ざっくり解説
table-cell とは、CSS の display に使う「値」で、この値を設定した HTML 要素を擬似的にテーブル扱いにすることができる、段組みレイアウト用の値です。
利用する時には親要素に対して「display:table」を指定して、内包される子要素に対して「display:table-cell」を使います。
ぼくの感覚だと table-cell は、やたらめったらと使うものではなく、HTML の table タグを使うべきところではちゃんとそれを使い、table タグが使えない部分や工夫が必要な部分などで使うと良いと思います。
今まで position:absolute でやっていたボックス中央表示
今までは「position:absolute」十分でしたが、ウェブサイトもレスポンシブサイトな時代となってしまい、「position:absolute」だとモバイル表示されたときの型崩れ感がひどい。
モバイル表示されたときのメインビジュアルは縮尺されるのに、テキストなどの要素位置はアブソリュートしちゃってますから・・・そりゃ崩れますわね。
しかし、「table-cell」を利用してボックスの中央表示にすれば、上下左右の中央位置は絶対に中央固定のままで縮尺してモバイル表示させることが可能なのです。
table-cell を使ってボックス内の中央へ要素を表示させる
まずはデモページを確認してください
まずは table-cell を使ってボックス内に上下左右中央表示したらどんな感じなのかデモを確認してみてください。
デモの下ボックスの背景は「background」で指定、更に背景画像はレスポンシブするように「background-size:cover」指定です。
では、デモページのようにボックス内に要素が上下左右中央表示にできる手順です。
table-cell の使い方
CSS
1 2 3 4 5 6 7 8 | .box { display: table; } .item { display: table-cell; vertical-align:middle; } |
HTML
1 2 3 | <div class="box"> <p class="item">この部分が上下左右中央表示される</p> </div> |
ボックスのレイアウトは端折っていますがこんな感じです。
必ず「親要素(ボックス)に display:table を指定します」これを忘れると、内包された子要素にいくら table-cell を指定しても意味はありません。
そして、table-cell で擬似的にテーブル化したので、上下を中央表示にするために、「vertical-align:middle」を普通の table と同じように指定します(忘れずに)。
デモは上側がこれに近い感じで、下側は応用している感じです。
デモの CSS と HTML をそのまま掲載
参考までにデモで使われているコードをそのまま掲載しておきます。
CSS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | body {margin: 20px 0 0} p,h1,h2 {margin: 0; padding: 0;} h2 {font-size: 36px; text-align: center; color: #fff; text-shadow: 1px 1px 3px #000; margin-bottom: 20px;} p {text-align: center; font-size: 20px; color: #fff; text-shadow: 1px 1px 3px #000; font-weight: bold;} /** ここから table-cell 用レイアウト **/ .box { width: 100%; margin-bottom: 80px; background: #efefef; display: table; } .box02 { width: 100%; height: 400px; margin-bottom: 80px; display: table; background: #00BCD4; } .box03 { width: 100%; height: 400px; display: table-cell; vertical-align: middle; background: url(images/bg.jpg) no-repeat center center; background-size: cover; } .text { display: table-cell; vertical-align: middle; } |
HTML
1 2 3 4 5 6 7 8 9 10 11 12 | <body> <div class="box02"> <p class="text">ボックスの上下左右の中央にテキストを配置する。要素単体に table-cell を指定</p> </div> <div class="box"> <div class="box03"> <h2>ボックスに複数の要素を入れるパターン</h2> <p>ボックスに table-cell を指定すれば複数要素にまとめて対応</p> </div> </div> </body> |
あとがき
table-cell はうまく使えばコーディングの手間をそこそこ省けます。
先にもいいましたが、なんでもかんでも table-cell という乱用は禁物ですが、大変便利ですからまだ使ったことが無い方はぜひぜひ試しに使ってみてくださいね!