Answers:
返回对象可见区域的高度,以像素为单位。该值包含带有填充的高度,但不包括scrollBar,border和margin。
返回对象可见区域的高度,以像素为单位。该值包含带有边距,scrollBar和边框的高度,但不包括边距。
因此,不offsetHeight包括滚动条和边框clientHeight。
clientSize随时可用的(毕竟,它是视口),但是offsetHeight在重排整个文档之后需要计算吗?
奥德的答案是理论。但是理论和现实并不总是相同的,至少对于<BODY>或<HTML>元素而言并非如此,这对于JavaScript中的滚动操作可能很重要。
微软在MSDN中有一个不错的形象:

如果您有一个显示垂直滚动条的HTML页面,则可以期望<BODY>或<HTML>元素的ScrollHeight字体比OffsetHeight更高,如该图所示。所有旧版本的Internet Explorer都是如此。
但是对于Internet Explorer 11和Firefox 36并非如此。至少在这些浏览器中,OffsetHeight与ScrollHeight几乎相同,这是错误的。
尽管OffsetHeight可能是错误的,但ClientHeight总是正确的。
在不同的浏览器上尝试以下代码,您将看到:
<!DOCTYPE html>
<html>
<body>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<script>
document.write("Body off: " + document.body.offsetHeight
+ "<br>Body cli: " + document.body.clientHeight
+ "<br>Html off: " + document.body.parentElement.offsetHeight
+ "<br>Html cli: " + document.body.parentElement.clientHeight);
</script>
</body>
</html>
尽管较旧的Internet Explorer可以正确显示:
Body off: 1197
Body cli: 1197
Html off: 878
Html cli: 874
Firefox和Internet Explorer 11的输出为:
Body off: 1260
Body cli: 1260
Html off: 1276 // this is completely wrong
Html cli: 889
这清楚表明offsetHeight在这里是错误的。OffsetHeight和ClientHeight应该仅相差几个像素或相同。
请注意,对于不可见的元素,例如<FORM>,ClientHeight和OffsetHeight可能也有很大的不同,其中<set>其中OffsetHeight可能是FORM的实际大小,而ClientHeight可能是零。