在网上搜了一下,结论非常笼统,讲IE从不讲版本,因此自己做了测试并上传结论。以下结论皆是在标准模式下测试通过的,没有测试quirk模式。
clientHeight
大部分浏览器对 clientHeight 都没有什么异议,都认为是内容可视区域的高度,也就是说页面浏览器中可以看到内容的这个区域的高度,即然是指可看到内容的区域,滚动条不算在内。但要注意padding是算在内。其计算方式为clientHeight = topPadding + bottomPadding+ height - scrollbar.height。
offsetHeight
在IE6,IE7,IE8以及最新的的FF, Chrome中,在元素上都是offsetHeight = clientHeight + 滚动条 + 边框。
scrollHeight
scrollHeight是元素的padding加元素内容的高度。这个高度与滚动条无关,是内容的实际高度。
计算方式 :scrollHeight = topPadding + bottomPadding + 内容margix box的高度。
在浏览器中的区别在于:
IE6、IE7 认为scrollHeight 是网页内容实际高度,可以小于clientHeight。
FF、Chrome 认为scrollHeight 是网页内容高度,不过最小值是clientHeight。
注: 以上都是对于一般元素而方言的,body和documentElement的clientHeight, offsetHeight和scrollHeight在各个浏览器中的计算方式又不同。在所有的浏览器中,如果你想获取整个视窗的高度,你得用documentElement.clientHeight,因为body.clientHeight是由它的内容决定的。 关于body和documentElement的这些属性,则完全是另外一回事:
FF19
在body上设置overflow:scroll就是设置浏览器的滚动条,导致body.clientHeight永远都等于body.scrollHeight。
body
clientHeight:body.padding+ body.height(css设置或内容撑的);
offsetHeight:clientHeight+ body.border;
scrollHeight== clientHeight。
documentElement
clientHeight= window视窗高度 -scrollbar.width。
offsetHeight= body.offsetHeight + body.margin。
scrollHeight= 内容的高度(与body的height样式无关),但最小值是documentElement.clientHeight。
元素上
offsetHeight= padding + border + height。
clientHeight= padding + height - scrollbar.width。
scrollHeight>= clientHeight
从结果分析,FF认为scrollHeight的最小高度是clientHeight。
offsetLeft = 元素border左上角到window视窗原点的距离 或 到offsetParent的borderbox顶部的距离。
Chrome
body
clientHeight= body.padding + body.height(css设置或内容撑大);
offsetHeight = body.clientHeight + body.border;
scrollHeight= body.padding + 内容的高度(与height样式无关),但最小值是documentElement.clientHeight。
documentElement
clientHeight= window视窗高度 – 滚动条高度。
offsetHeight = body.offsetHeight + body.margin;
scrollHeight = 内容的高度(与body上的height无关),但最小值是documentElement.offsetHeight。
元素上
offsetHeight = padding + border + height。
clientHeight = padding + height - scrollbar.width。
scrollHeight >= clientHeight
Safari 5
body
clientHeight= body.padding + body.height(CSS或内容撑的);
offsetHeight= clientHeight + border;
scrollHeight= body.padding + 内容的高度(与height样式无关),但最小值是documentElement.clientHeight。
documentElement
clientHeight = window窗口大小 – 滚动条大小
offsetHeight = body.offsetHeight + body.margin
scrollHeight= 内容的高度(与body上的height无关),但最小值是documentElement.offsetHeight。
IE8
在IE8下,滚动条的大小是17个像素。
body
clientHeight= body.padding + body.height(css设置或内容撑大)
offsetHeight = clientHeight + body.border
scrollHeight =内容的高度(与body上的height无关),但最小值是clientHeight。
documentElement
clientHeight = 窗口大小(除去滚动条后)
offsetHeight = clientHeight + 滚动条大小 + body.border
scrollHeight=内容的高度(与body上的height无关),但最小值是body.offsetHeight+ margin。
元素上
offsetHeight = padding + border + height。
clientHeight = padding + height - scrollbar.width。
scrollHeight >= clientHeight
从结果分析,FF认为scrollHeight的最小高度是clientHeight。
offsetLeft = 元素border左上角到畫布原點的距離 或 到offsetParent的borderbox頂部的距離。
IE7
在IE7中,body上設定的捲軸並不是視窗的捲軸,這個需要注意。
body
clientHeight= body.padding height(css設定或內容撐大)– body上的捲軸。
offsetHeight= clientHeight 捲軸的大小 body.border。
scrollHeight= 內容的高度(與身體上的height無關)。
documentElement
clientHeight = window視窗大小(與捲軸的有無無關)
offsetHeight = clientHeight。
scrollHeight = body.offsetHeight border.margin
元素
offsetHeight = padding border height。
clientHeight = padding height - scrollbar.width。
scrollHeight = padding 內容marginbox的高度
從結果分析,IE7認為scrollHeight可以小於clientHeight。
offsetLeft = 元素border box左上角到父容器(不是offsetParent)的borderbox左上角的距離。
IE6
在IE6中,與IE7類似, body上設定的捲軸並不是視窗的捲軸。
body
clientHeight = body.padding body.height
offsetHeight = body.clientHeight body.border body上捲軸大小。
scrollHeight =內容的高度(與身體上的height無關)。
documentElement
在IE6中,與IE7類似,雖然body上設定的捲軸並不是視窗的捲軸,但它的clientHeight和offsetHeight還算與其它瀏覽器想統一。
clientHeight = 視窗大小(除去視窗捲軸大小後)
offsetHeight =clientHeight body.border
scrollHeight = body.offsetHeight body.margin
元素
offsetHeight = padding border height。
clientHeight = padding height - scrollbar.width。
scrollHeight = padding 內容margin box的高度
從結果分析,IE6認為scrollHeight可以小於clientHeight。
同理
clientWidth、offsetWidth 和scrollWidth 的解釋與上面相同,只是把高度換成寬度即可。