この記事はスマホから閲覧した場合、一部表示がおかしくなる箇所があります。アメーバブログの仕様のようですのでご了承ください。
こんにちは、takahiroです!
随分更新しておりませんでしたね.....ww
過去記事を見てみると最後に更新したのはなんと2013年という.....∑(゚Д゚)
当時はまだ中高生だった自分ももう二十歳を過ぎた大人になってしまいました。。。
さて、ほぼ完全に更新停止したこのブログに今更なにを書くのかといいますと、
タイトルの通り、TD要素内でDIV要素を height:100%; とした時に、Chromeとそれ以外のブラウザ(IE・Firefox)でレンダリングの挙動が違うことに気が付きまして、そこで1・2時間ほど唸っていたという話です。
まあもちろん単に唸っていたのではなく解決したんですが。。。
そこで今回は個人的な忘備録も兼ねて、問題点と解決法をまとめておきたいと思います。
まず、問題となったHTML構造とCSSを示します。
HTMLソース(抜粋)
<table class="table"> <tbody> <tr> <td> <div class="td1">TD要素1</div> </td> <td> <div class="td2">TD要素2</div> </td> </tr> </tbody> </table>
スタイルシート
.table{
height:0;
border-collapse:collapse;
border-spacing:0;
}
.table td{
padding: 0;
height:100%;
border: solid 1px red;
}
div.td1{
background-color:green;
width:200px;
height:200px;
border: solid 3px black;
}
div.td2{
background-color:blue;
width:auto;
height:100%;
border: solid 3px black;
}
なんてことはなく、ただ2つのDIV要素をテーブルを使って並べただけです。
ただ2つ目のDIV要素については高さの指定に height:100%; を使っています。
そして、これをブラウザで表示させると、こうなります。
表示結果
|
TD要素1 |
TD要素2 |
Chrome と Firefox、IE で表示して見比べると表示が違います。
Google Chrome(Webkit)とそれ以外のFirefox、IE等とでは、表示に差があるのです。
一応、それぞれのブラウザで表示した結果も載せておきます。


Chorme だとピッタリ表示されてますが、Firefox、IEでははみ出しています。
ただそれもそのはずですね。ボーダーの太さ分高さがかさ増しされるので、この場合だと、
高さ100% (206px) + ボーダーの太さ (3px) ×2 = 212px
になるはずでしょうから。
Chrome だとどういうわけかぴったり表示されていますね。
あくまで憶測ですが、Chromeでは高さ100%を計算するのに1つ目のDIV要素の高さを利用しているのだと思います。
それに対してFirefoxやIEではDIV要素の高さではなく、テーブルの高さをそのまま計算に利用しているのだと思います。(あくまで憶測ですが。。。)
このままではマズイのです。以下は解決策です。
さて、その解決策ですが、
2つ目のTD要素に
- padding:0;
- margin:0;
- border-width:0;
- heignt:100%;
そこで、2つめのDIV要素(div.td2)に box-sizing を追加で指定します。
HTMLソース(変更後)
<table class="table"> <tbody> <tr> <td> <div class="td1"> TD要素1 </div> </td> <td> <div class="dummy"> <div class="td2"> TD要素2 </div> </div> </td> </tr> </tbody> </table>
変更後のスタイルシート
.table{
height:0;
border-collapse:collapse;
border-spacing:0;
}
table td{
padding: 0;
height:100%;
border: solid 1px red;
}
div.td1{
background-color:green;
width:200px;
height:200px;
border: solid 3px black;
}
div.td2{
background-color:blue;
width:auto;
height:100%;
border: solid 3px black;
box-sizing: border-box;
}
div.dummy{
margin:0;
padding:0;
border-width:0;
height:100%;
}
変更後の表示結果
|
TD要素1 |
TD要素2 |


このように、ChromeでもFirefoxでも差異なく表示することができます。
それにしても、Chromeとそれ以外のブラウザとのレンダリングの挙動はどちらが正しいのでしょうか?
うーむ。。。。。
