【发布时间】:2011-01-26 15:41:25
【问题描述】:
为什么大多数开发人员认为 W3C box model 比 Internet Explorer 使用的盒子模型更好?
在 Internet Explorer 上开发看起来与您想要的一样的页面非常令人沮丧,但我发现 W3C 盒子模型违反直觉。例如,如果将边距、内边距和边框计入宽度,我可以为所有列分配宽度值,而无需担心列数以及我对其内边距和外边距所做的任何更改。
使用 W3C 的盒子模型,我必须担心我拥有的列数,并开发类似于数学公式的东西来在修改边距和填充时计算正确的宽度值。更改它们的值会很困难,尤其是对于复杂的布局。考虑一下我写的这个小框架:
#content {
margin:0 auto 30px auto;
padding:0 30px 30px 30px;
width: 900px;
}
#content .column {
float: left;
margin:0 20px 20px 20px;
}
#content .first {
margin-left: 0;
}
#content .last {
margin-right: 0;
}
.width_1-4 {
width: 195px;
}
.width_1-3 {
width: 273px;
}
.width_1-2 {
width: 430px;
}
.width_3-4 {
width: 645px;
}
.width_1-1 {
width: 900px;
}
除非有三列,否则我在此处分配的值将不稳定,因此边距为0+20+20+20+20+0。修改填充和边距会很困难;我的整个宽度必须重新计算。如果列宽包含填充和边距,我需要做的就是改变宽度,我就有了我的布局。我不太批评盒子模型,而是更希望理解为什么它被认为更好,因为我发现它很难使用。
我做错了吗?使用 W3C 的盒子模型似乎违反直觉。
【问题讨论】:
-
TL;DR,但回答主题:因为 W3C 本质上是一个标准,人们不喜欢微软打破所有标准的方式。
-
好问题。我个人认为(有一次)微软的做法是正确的,但我将浏览器战争归咎于两个阵营。也许 wc3 应该通过定义一个新的文档类型来迎合微软的方法,让设计人员可以选择他们希望实现的盒子模型。
-
顺便说一句,有一种非常简单的方法可以解决填充破坏布局的问题。那就是遵循这个简单的口头禅:宽度被添加到容器中......填充被添加到容器内的内容中。你的布局永远不会中断。永远。