24

在 IE7、IE8 和 Firefox 上的属性document.body.clientHeight和返回值不同:document.body.clientWidth

即 8:

document.body.clientHeight : 704 
document.body.clientWidth  : 1148

即 7:

document.body.clientHeight : 704 
document.body.clientWidth  : 1132

火狐:

document.body.clientHeight : 620 
document.body.clientWidth  : 1152

为什么会存在这种差异?
在不使用 jQuery 的情况下,是否存在跨不同浏览器(IE8、IE7、Firefox)一致的等效属性?

4

9 回答 9

24

Paul A 关于为什么存在差异是正确的,但 Ngm 提供的解决方案是错误的(在 JQuery 的意义上)。

jquery(1.3)中clientHeight和clientWidth的等价物是

$(window).width(), $(window).height()
于 2009-09-15T21:47:40.583 回答
5

这与浏览器的盒子模型有关。使用 jQuery 或其他 JavaScript 抽象库之类的东西来规范化 DOM 模型。

于 2009-05-07T09:33:03.227 回答
5

body元素采用可用宽度,通常是您的浏览器视口。因此,由于浏览器 chrome 边框、滚动条、菜单占用的垂直空间等等,跨浏览器的尺寸将不同......

高度也不同的事实也告诉我你通过 css 将body/html高度设置为 100%,因为高度通常取决于body内的元素..

除非您通过 css 或它的 style 属性将body元素的宽度设置为固定值,否则它的尺寸通常会因浏览器/版本而异,甚至可能取决于您为浏览器安装的插件。在这种情况下,常量值更像是规则的一个例外......

当您在其他不采用浏览器视口自动宽度的元素上调用 .clientWidth 时,它将始终返回元素“宽度”+“填充”。因此,宽度为 200 且填充为 20 的 div 将具有 clientWidth = 240(左右填充 20)。

然而,调用 clientWidth 的主要原因正是由于结果可能存在预期差异。如果你知道你会得到一个恒定的宽度并且值是已知的,那么调用 clientWidth 是多余的......

于 2010-08-03T09:46:37.687 回答
2

jQuery中offsetHeight和offsetWidth的等价物是$(window).width(),$(window).height()不是clientHeight和clientWidth

于 2010-02-25T13:03:06.750 回答
2

Element.clientWidth&Element.clientHeight 返回该元素内容的高度/宽度以及任何适用的填充。

这些的 jQuery 实现是: $(target).outerWidth()&$(target).outerHeight()

.clientWidth&.clientHeight包含在 CSSOM 视图模块规范中,该规范目前处于工作草案阶段。尽管现代浏览器对此规范有一致的实现,但为了确保跨旧平台的一致性能,仍应使用 jQuery 实现。

附加信息:

  • https://developer.mozilla[dot]org/en-US/docs/Web/API/Element.clientWidth
  • https://developer.mozilla[dot]org/en-US/docs/Web/API/Element.clientHeight
于 2014-03-19T01:57:11.720 回答
1

我解决clientHeight问题的方法是使用控件firstChild的clientHight。我使用 IE 11 打印数据库中的标签,并且在 IE 8 中工作的 clientHeight 在 IE 11 中返回 0 的高度。我在该控件中找到了一个属性,该属性被列为 firstChild 并且如果 clientHeight 具有属性并且实际上有我正在寻找的高度。因此,如果您的控件返回的 clientSize 为 0,请查看其 firstChild 的属性。它帮助了我...

于 2015-02-10T19:17:50.920 回答
0

这可能是由 IE 的盒子模型错误引起的。要解决此问题,您可以使用Box Model Hack

于 2009-05-07T09:36:54.637 回答
0

我有一个类似的问题 - firefox 返回了 obj.clientHeight 的正确值,但即没有 - 它返回 0。我将其更改为 obj.offsetHeight 并且它有效。似乎有一些状态,即客户端高度 - 这使它变得不确定......

于 2010-07-04T14:59:43.123 回答
0

浏览器窗口的更多信息: http ://www.w3schools.com/js/js_window.asp?output=print

于 2013-09-15T05:36:00.310 回答