ブロック要素にスクロールバーが出る場合の、内部領域の変化(IE注意)

ブロック要素にスクロールバーが出る場合、
その内部領域がどうなるのか、ブラウザごとにまとめ。


HTMLの例は以下のような感じ:

<div class="outline">
	<table>
		.....
	</table>
</div>


CSSは以下のような感じ:

.outline {
	width: 500px;
	height: 300px;
	overflow: auto;
}
.outline table {
	width: 100%;
}


table要素の高さが300pxを超えると、
親のdiv要素に縦スクロールバーが出る。
このとき、table要素の幅100%というのは、何ピクセルになるのか、を各ブラウザごとにまとめると、
以下のような感じになる。

  • IE6
    スクロールバーの有無に関わらず、同じ。
    ただし、子要素のtableが幅100%のときは、スクロールバーは領域の外側に表示される。

    [対策]
    見た目を気にしないなら、とくに何もしない。
    スクロールバーを外側にはみ出させたくない場合は、子要素の幅をスクロールバー分だけ引いたサイズにしておく。
    IE6は固定幅レイアウトが前提。
  • IE7
    スクロールバーの有無に関わらず、同じ。
    ただし、スクロールバーが子要素の上に重なるので、子要素のtableが幅100%のときは、tableの右端がスクロールバーの下に隠れる。

    [対策]
    子要素のpadding-rightでスクロールバー分を指定しておく。
    tableの場合は、各行の最後のthまたはtdのpadding-right。これでリキッドレイアウトでも対応可。
  • IE8とそのほかのブラウザ
    スクロールバーが表示されると、内部の領域はその分だけ縮まる。
    子要素のtableが幅100%のとき、スクロールバーの有無によって100%のピクセル数は変わる。

    [対策]
    レイアウトの崩れが問題にならないなら、とくに何もしない。
    問題になるケースは、個別に対応策を考える。