clientHeight / clientWidth在不同的浏览器上返回不同的值

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

IE 8:

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

IE 7:

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

火狐:

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

为什么这种差异存在?
是否有不同的浏览器(IE8,IE7,火狐)不使用jQuery的一致性?

这与浏览器的盒子模型有关。 使用类似jQuery或其他JavaScript抽象库来标准化DOM模型。

保罗A是正确的,为什么这种差异存在,但由Ngm提供的解决scheme是错误的(在JQuery的意义上)。

相当于jQuery(1.3)中的clientHeight和clientWidth是

 $(window).width(), $(window).height() 

body元素采用可用的宽度,通常是您的浏览器视口。 因此,由于浏览器的铬边框,滚动条,垂直空间被菜单和其他东西占据,所以它将是不同的尺寸跨浏览器。

事实上,高度也有所不同,也告诉我,通过CSS设置身体/ HTML的高度为100%,因为身高通常依赖于体内的元素。

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

当你在其他没有使用浏览器视口的自动宽度的元素上调用.clientWidth时,它总会返回元素的宽度'+'padding'。 所以宽度为200,填充为20的div将具有clientWidth = 240(20左右填充)。

主要的原因,但是,为什么会调用clientWidth,正是由于可能预期的结果差异。 如果你知道你会得到一个恒定的宽度和值是已知的,那么调用clientWidth是多余的…

相当于jQuery中的offsetHeight和offsetWidth是$(window).width(),$(window).height()它不是clientHeight和clientWidth

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

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

.clientWidth.clientHeight包含在当前处于工作草案阶段的CSSOM视图模块规范中。 虽然现代浏览器对此规范有一个一致的实现,但为了确保在传统平台上的一致性,jQuery实现仍应该被使用。

附加信息:

  • HTTPS://developer.mozilla [点]组织/ EN-US /文档/networking/ API / Element.clientWidth
  • HTTPS://developer.mozilla [点]组织/ EN-US /文档/networking/ API / Element.clientHeight

我所做的解决我的问题与clientHeight是使用控件firstChild的clientHight。 我使用IE 11从数据库打印标签,在IE 8中工作的clientHeight在IE 11中返回0的高度。我发现该控件中的一个属性被列为firstChild,并有一个属性,如果clientHeight,实际上我正在寻找的高度。 所以如果你的控件返回一个clientSize为0的数据,请查看其firstChild的属性。 它帮助我…

我有一个类似的问题 – firefox返回正确的值obj.clientHeight,但即没有 – 它返回0.我把它改为obj.offsetHeight,它的工作。 似乎有一些状态,即客户端高度 – 这使得如果…

这可能是由IE的盒子型号错误造成的。 要解决这个问题,你可以使用Box Model Hack 。

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