CSS おれおれ Advent Calendar 2012 – 17日目
例えば商品一覧。float:left
を駆使したりdisplay:inline-block
したりと苦労が多いですが、表table
を使えたら楽チンですね。
使えたら楽だなーでもHTMLの意味を考えるとアレだよなーってな場合、HTMLのマークアップは適宜行いつつ、CSSでそれを表として扱わせる、という事ができます。
利用可能な環境
モダンブラウザーでは大丈夫。IEは8からサポートしています。
CSS的には2.1からあります。CSS 3でも記載はありますが、現時点では詳細はまだない (forthcoming
) ようです。
HTMLのtable
HTMLで表table
を書くとこんな感じですね。
<table> <tr> <td>Foo</td> <td>Bar</td> <td>Boo</td> </tr> </table>
CSSのdisplay:table
全部div
に置き換え、CSSで指定する事ができます。
<div class="table"> <div class="tr"> <div class="td">Foo</div> <div class="td">Bar</div> <div class="td">Boo</div> </div> </div>
.table { display: table; } .tr { display: table-row; } .td { display: table-cell; }
実は.td
以外は、実は省略可能です。
<div class="td">Foo</div> <div class="td">Bar</div> <div class="td">Boo</div>
.td { display: table-cell; }
HTMLでいきなり<td>
を書く事は出来ませんが、CSSでは可能です。
display:table
, display:table-row
を省略した場合、それらに該当する要素は暗黙的に存在するものとされます。
高さを揃える例
セルだけ
これだけで高さは揃います。
セルの幅を空ける
セル(の枠線)の間に隙間を空けるには、通常のtable
要素と同じようにborder-spacing
を指定します。指定先はtd
要素ではなくtable
要素なので、全体を括る必要があります。
行を増やす
さらにこのままセルを増やしても横に増えるばかりです。
縦に、行を増やすにはtr
相当の要素が必要になります。
あんまりシンプルな感じにはなりませんね。あと一行ごとの項目数が固定になってしまうのも、float:left
等と比べて見劣りします。