为什么'padding'有时会在元素宽度内计算,有时不会?

时间:2010-08-11 17:08:54

标签: css input width padding

我制作了一个书签,其中包括在“popup”div中加载表单。我重置了我创建的每个元素上人类已知的每个CSS标签,据我所知,在firebug中检查它,没有CSS标签“流血”。但是,在某些页面上,输入宽度包括其填充:

input.clientWidth = input.style.width

在其他页面上,输入宽度包括填充:

input.clientWidth = input.style.width + input.style.paddingLeft + input.style.paddingRight

因此,这是一个小代码片段:

input.style.width = '300px';
input.style.border = '1px solid grey';
input.style.padding = '20px';
alert(input.clientWidth);

在某些页面上,此警报298(300 - 1px边框),而在其他页面上此警报338(300 - 1px边框+ 20 + 20)。是什么导致这个?更重要的是,我能做些什么才能获得一致的行为?

修改

这些都在同一个浏览器中 - Firefox 3.6.8

2 个答案:

答案 0 :(得分:3)

对于IE,可能是某些页面处于怪癖模式,其中盒子模型不是所使用的标准模型。

标准模式document.compatModeCSS1Compat,怪癖模式为BackCompat。您可以根据该分支进行计算。

显然,如果你向我们展示两个不同的页面会有所帮助,但由于它是一个书签,而且它在不同的网站上被调用,这是有道理的。

答案 1 :(得分:0)

对于一致的行为,您可以将填充,边距和边框分解为每个宽度,即(伪代码)

totalWidth = input.width + input.padding + input.margin + input.border;

显然,你必须做一些字符串操作来挑选那里的整数然后添加它们。