Internet Explorer は従来、ボックスの合計幅にパディングと境界線の幅を含めることで、css ボックスのサイズ設定を「間違って」実装してきたことを認識しています。IE8+ は、ページが標準準拠モードでレンダリングされるときにこのボックスのサイズ変更を「修正」し、-ms-box-sizing プロパティを使用して CSS3 ボックスのサイズ変更を実装します。
しかし、ここで面白いことがあります。次のコードは、さまざまな幅 + パディング + ボーダー + ボックス サイズの組み合わせでいくつかの div をレンダリングします。
<html>
<head>
<style type="text/css">
div { margin-bottom: 1em; background-color: #5555e9; }
#test1 { width: 500px; }
#test2 { width: 500px; padding: 10px; }
#test3 { width: 500px; padding: 10px; border: 5px solid red; }
#test4 { width: 500px; padding: 10px; border: 5px solid red;
-ms-box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
</style>
</head>
<body>
<div id="test1">Hello World!</div>
<div id="test2">Hello World!</div>
<div id="test3">Hello World!</div>
<div id="test4">Hello World!</div>
</body>
IE8 quirks モードでは、すべての div が同じ 500px 幅で出力されます。これは、IE の奇妙なボックス サイズの計算から予想されるとおりです。
しかし、次の doctype 宣言を追加して、IE8 標準準拠モードでレンダリングするとします。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
出力は次のようになります。
css を使用して box-sizing プロパティが border-box every way に設定されていても、最後のボックスは 3 番目のボックスと同じサイズでレンダリングされることに注意してください。IE8 が標準準拠モードでボーダー ボックス方式を使用することを本当に望んでいますが、このテストでは、それを実現する方法がわかりません。誰にも提案はありますか?