具体的にどういうことかというと、以下のような場合だ。
■ブロック要素を横並びに配置した例
このように子要素の高さが同じなら問題はないが、高さがかわると下のようになる。
ソースコード
<div style="width:100px; padding: 5px; background-color: #FCF; float: left; color: #000;">真ん中のブロック</div>
<div style="width:100px; padding: 5px; background-color: #CFF; float: left; color: #000;">一番左側のブロックはさらに高くなるようにする。このブロックが一番高いので、他の並びのブロックが合わせるようにしたい。</div>
一見、「higth」に100%やautoを指定すれば調整してくれそうだが、これは上位要素に対しての相対的な指定なので、結局値が決まっていなければ意味がない。もちろん、最も高いブロックに合わせて高さを指定すれば問題ないが、内容が不特定の場合それでは困る。また、親要素を作って全体を入れ子にする方法もあるが、罫線で囲ったり、それぞれの子要素に別々の背景を適用したりする場合はやはり高さをそろえる必要がある。
こうした問題を解決する最も手軽な方法は、floatではなく、「display:table(-cell)」を使うことだ。
display:table(-cell)は、指定した要素をテーブルやセルとして扱うというもの。tableタグやtdタグのようなものだと考えれば良いだろう。使い方は親要素に「display:table」を、子要素に「display:table-cell」を指定するだけで、floatのようにclearしてやる必要もない。
■display:tableを使用した例
ソースコード
<div style="width:100px; padding: 5px; background-color: #FFC; display:table-cell; color: #000;">一番右側のブロックの高さが変わるように内容を記述</div>
<div style="width:100px; padding: 5px; background-color: #FCF; display:table-cell; color: #000;">真ん中のブロック</div>
<div style="width:100px; padding: 5px; background-color: #CFF; display:table-cell; color: #000;">一番左側のブロックはさらに高くなるようにする。このブロックが一番高いので、他の並びのブロックが合わせるようにしたい。</div>
</div>
このように非常に簡単だ。ただし、IE7以前には対応していないので注意が必要だ。