我知道 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">
输出变成这样:
请注意,最后一个框与第三个框的尺寸相同,即使 box-sizing 属性使用 css 设置为边框框。我真的希望 IE8 在标准合规模式下使用边框框方法,但是鉴于这个测试,我不知道如何实现它。有人有建议吗?