在一个block元素上使用padding后元素实际的宽度会增加,这是一个常识。
这本来是一个很浅显的道理,但许多初学者考虑的时候却觉得很怪异。
我这里按自己的解释来说明一番。
给个假设情况:一个width:10px的元素,padding:10px;
那么实际宽度就是width+padding-left+padding-right=30px;
假如说padding对宽度无影响,那么width是10px;但是padding在横向的宽度是20px;这样内边距padding>总宽width。
一个元素的内边距却大于这个元素的总宽,显然这是个悖论。
所以说作为内边距的padding是一定要加在宽度之上的。
还是对宽度的理解不同造成的。
如果把 width 理解为总宽度,那么没人会把 width 设的比 padding 还要小,所以您说的“悖论”是建立在正确理解 width 基础上的。
回复
oneboys 回复:
四月 14th, 2009 at 06:48
@小马, 我的假设并不是建立在正觉理解width基础上的,事实上却是以width为总宽为前提的。如果正确理解width的话,就没有这条悖论。
可能我文章中说的不大好。
没错,如果说要将width理解为总宽(border和margin暂不管),padding就需要有一条规则:横向padding不能大于width(姑且不管纵向怎么说)——这也是唯一能避开我之前那个悖论的方法。但是即便w3c同意,也制定了这么一条规则。那么浏览器怎么来表现这条规则呢?当一个设计者,不识规则的写出了象我前面那样width和padding,浏览器如何来判断解释这个错误的写法呢?我不知道ie5那些老古董是怎么办的,要我的话,可能先将padding-left和padding-right加起来,然后和width相比较,如果padding总值>width。那么设置padding=width。如果这样整个元素中除了padding充满整个width之外,已经不留任何余地来放置元素中的内容了。显然这样解释很麻烦,而且还会有问题。所以说现在的浏览器都很明智的将padding加到总宽之上。
很感谢你来讨论我这篇毫无用处的文章。
回复
最近我才关注到这个问题。
今天研究了一下,是不同的DOCTYPE 声明造成width的含义有所不同。
可以搜索 IE盒子模型和标准W3C盒子模型
回复
ONEBOYS 回复:
十月 11th, 2010 at 09:26
@www.g8up.cn,
Quirks mode并不在我们的研究范围内。
我们的代码应保证在标准模式下书写。
回复
呵呵,博主的这篇文章不是没有用,至少我稍微理解一点了。虽然还是不太懂
回复