38

为什么大多数开发人员考虑W3C箱式模型比Internet Explorer使用的方框模型更好?

开发在Internet Explorer上看起来像你想要的页面是非常令人沮丧的,但我发现W3C盒子模型违反直觉。例如,如果在宽度中考虑了边距、填充和边框,我可以为所有列分配宽度值,而不必担心列数以及对填充和边距所做的任何更改。

使用W3C的box模型,我必须担心我的列数,并开发类似于数学公式的东西来计算修改边距和填充时的正确宽度值。更改它们的值很困难,尤其是对于复杂的布局。想想我写的这个小框架:

#内容{边距:0 auto 30px auto;填充:0 30px 30px 30 px;宽度:900px;}#content.列{浮动:左;边距:0 20px 20px 20 px;}#内容。首先{边缘左侧:0;}#内容。最后{右侧边距:0;}.宽度_1-4{宽度:195px;}.宽度_1-3{宽度:273px;}.宽度_1-2{宽度:430px;}.宽度_3-4{宽度:645px;}.宽度_1-1{宽度:900px;}

除非有三列,否则我在这里指定的值将不稳定,因此在0+20+20+20+20+0.很难修改填充和边距;我的整个宽度必须重新计算。如果列宽包含了填充和边距,我只需要更改宽度,就可以得到我的布局。我很少批评盒子模型,更希望理解为什么它被认为更好,因为我发现它很难使用。

我做错了吗?使用W3C的盒子模型似乎违反直觉。

  • 2
    TL;DR,但回答这个问题:因为W3C本质上是一个标准,人们不喜欢微软打破所有标准的方式。 2010年3月12日1:06
  • 1
    好问题。我个人认为(这一次)微软的做法是正确的,但我将浏览器之战归咎于双方阵营。也许wc3应该通过定义一个新的doctype来迎合微软的方法,让设计者选择他们想要实现的box模型。 2010年3月12日3:56
  • 4
    顺便说一下,有一种非常简单的方法可以解决填充破坏布局的问题。这就是遵循这个简单的咒语:宽度被添加到容器中。。。填充被添加到容器内的内容中。你的布局永远不会中断。永远。 2010年3月12日3:58

6个答案6

重置为默认值
20

一个单词的答案--箱体尺寸

你可以选择你想要的盒子模型的工作方式.

12
  • 1
    还有那么多css,我甚至从来没有怀疑可能存在+1表示该(当前书签)链接=) 2010年3月12日1:12
  • 1
    我在同一条船上。顺便说一句,这个模板布局模块(CSS3的一部分)是我见过的CSS最酷的东西。w3.org/TR/2009/WD-css3-layout-20090402 2010年3月12日1:15
  • @Anurag,我突然对CSS3更加乐观了。希望它能实现至少只要html5…=) 2010年3月12日1:20
  • @看到w3的工作方式,我重申了我对委员会的信心:)。。他们正在做一些很棒的事情 2010年3月12日1:35
  • 嗯……看到W3最有效的工作方式肯定了我的对委员会的信任。尽管我会把它交给他们,但很高兴,我读得越多,听到的关于html5和css3的信息越多,我就越高兴=) 2010年3月12日2:05
13

并不是每个人都认为它更好。从中提取引用Quirksmode(奇怪模式).

就我个人而言,我发现W3C的盒子模型与此相反。引用我自己的话:

从逻辑上讲,框是从一个边框到另一个边框进行测量的。拿一个物理盒子,任何盒子。把明显比盒子小的东西放进去。请任何人测量盒子的宽度。他将测量盒子两侧(“边界”)之间的距离。没有人会考虑测量盒子里的东西。

创建用于保存内容的框的Web设计师关心看得见的框的宽度,大约是从边框到边框的距离。边界而不是内容是网站用户的视觉线索。没有人对内容的宽度感兴趣。

我同意边箱模型更有意义(至少对我来说是这样)。最初的W3C盒子模型存在争议,导致了箱体尺寸财产CSS3中。

1
  • 我找到了边箱在某些情况下很有用,但我从来没有遇到过CSS1模型的问题:每个元素都会创建几个嵌套框无论它们是否可见宽度描述了原始(最里面的)框。宽度:30em适合30厘米长的线路宽度:320px里面可以容纳320像素的图像。
    – 山姆
    2013年10月7日1:28
8

就我个人而言,我更喜欢IE的盒子模型,而不是偶尔感到羞耻。正如OP指出的那样似乎为了更合理地使用预定义的宽度,边距、填充和边框宽度减去的,而不是有一个宽度补充.

另一方面,我可以很高兴地与这两个模型一起工作,我真正想要的是一致性在实现之间,无论选择哪个实现。

  • 10
    有一次,我无意中为IE的盒子模型编写了代码,并成为了它的粉丝。这是盒子的完美逻辑。让W3C经营一家集装箱运输公司,一周后它就倒闭了。
    – 尼马尔
    2010年3月12日1:20
  • @尼马尔,是的。我认为这与PPK在Quirksmode链接中提出的论点基本相同。我本来打算引用它,但当我想起它在哪里的时候,“Anurag,我想,”Andy E.已经链接/引用了,所以它似乎是多余的。我接受规格永远是任意的,但最好是理性的也。 2010年3月12日1:28
  • @尼马尔,更不用说,到他们同意发货清单、装货订单、时间表和路线的时候,你会考虑2025年这样的事情来获得你在2004年订购的书……=) 2010年3月12日1:30
5

虽然我发现W3C在大多数情况下都做对了,但在这种特殊的情况下,我不得不说IE的box模型是优越的。

我经常遇到的一个常见问题是,当我想将宽度设置为百分比时,也要设置像素填充。为了让div拉伸到100%并添加填充,我不得不使用两个div,而不是一个div。否则,将填充因素考虑在内后,在单个div上应用100%实际上会超出您的预期。这使得使用流体布局非常困难。

2

与其说是哪个更好或更坏的问题,不如说是遵循公认组织的标准,而不是。。

另一方面,您的问题可能是有人希望将他的文本包装在一个300px的容器中,该容器与下一个容器的距离为10像素。。现在,为了计算宽度,您必须进行与示例相同的计算。。这是一个你如何看待同一问题的例子。。

  • 4
    “卢克,你会发现我们坚持的许多真理在很大程度上取决于我们自己的观点。” 2010年3月12日1:33
  • 1
    @米波,哈哈。你内心深处的力量。。 2010年3月12日1:49
  • 1
    这是用一个从未添加到宽度中的边距来解决的 2011年6月7日12:57
-3

如果你总是在方框中使用填充、边框和边距,那么IE模型可能看起来更好、更符合逻辑,但事实并非如此。是的,WC3盒子模型有点复杂,但它在可能性和对布局的严格“像素级”控制方面有所回报。一旦你用方框模型做了足够多的布局,你就会习惯它,一旦你发现它的强大功能,你就永远不会想到IE浏览器是一种更好的网页布局方式。相信我,你去过那里。

1
  • 5
    如果你在回答中给出任何细节,我们都不会相信你。
    – 史密斯
    2013年6月11日18:06

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.