Answers:
IE曾经使用更方便但非标准的“边框”框模型。在此模型中,元素的宽度包括填充和边框。例如:
#foo { width: 10em; padding: 2em; border: 1em; }
会很10em
宽。
相反,所有违反标准的浏览器默认使用“内容框”框模型。在此模型中,元素的宽度不包括填充或边框。例如:
#foo { width: 10em; padding: 2em; border: 1em; }
实际上会16em
很宽:10em
+ 2em
每边填充,+ 1em
每边边框。
如果您使用具有有效标记,良好doctype和适当标题的IE的现代版本,它将遵循该标准。否则,您可以通过以下方式强制符合现代标准的浏览器使用“边框”:
* {
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
}
Opera需要第一个声明,Firefox需要第二个声明,Webkit和Chrome需要第三个声明。
这是我几年前进行的一项简单测试,用于测试浏览器支持的框大小声明:http : //phrogz.net/CSS/boxsizing.html
请注意,Webkit(Safari和Chrome)不padding-box
通过任何声明支持盒子模型。
一个简单的规则是尝试避免对同一元素使用padding / margin和width属性。即使用类似的东西
<div class="width-div">
<div class="padding-div">
...........
...........
</div>
</div>
我碰到了这个问题,尽管它已经存在了两年,但我想如果有人碰到这个线程,我可能会添加这个问题。
CSS3现在具有box-sizing属性。如果您设定,说,
.bigbox {
box-sizing: border-box;
width: 1000px;
border: 5px solid #333;
padding: 10px;
}
您的班级将是1000px宽,而不是1030px。当然,这对于使用像素大小的边框和液体div的人非常有用,因为它解决了原本无法解决的问题。
更好的是,除IE7及更低版本外,所有主流浏览器均支持box-sizing。要包括宽度或高度尺寸内的所有项目,请将box-sizing设置为border-box。要将其他项目聚合为默认的宽度和/或高度,您可以将box-sizing设置为“ content-box”。
我不确定浏览器语法的当前状态,但仍包含-moz和-webkit前缀:
.bigbox{
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}