什么是offsetHeight,clientHeight,scrollHeight?

想解释什么是offsetHeightclientHeightscrollHeightoffsetWidthclientWidthscrollWidth

在客户端工作之前,必须知道这个差异。 否则,他们的一生将花在修复UI上。

小提琴或以下内联:

 function whatis(propType) { var mainDiv = document.getElementById("MainDIV"); if (window.sampleDiv == null) { var div = document.createElement("div"); window.sampleDiv = div; } div = window.sampleDiv; var propTypeWidth = propType.toLowerCase() + "Width"; var propTypeHeight = propType + "Height"; var computedStyle = window.getComputedStyle(mainDiv, null); var borderLeftWidth = computedStyle.getPropertyValue("border-left-width"); var borderTopWidth = computedStyle.getPropertyValue("border-top-width"); div.style.position = "absolute"; div.style.left = mainDiv.offsetLeft + Math.round(parseFloat((propType == "client") ? borderLeftWidth : 0)) + "px"; div.style.top = mainDiv.offsetTop + Math.round(parseFloat((propType == "client") ? borderTopWidth : 0)) + "px"; div.style.height = mainDiv[propTypeHeight] + "px"; div.style.lineHeight = mainDiv[propTypeHeight] + "px"; div.style.width = mainDiv[propTypeWidth] + "px"; div.style.textAlign = "center"; div.innerHTML = propTypeWidth + " X " + propTypeHeight + "( " + mainDiv[propTypeWidth] + " x " + mainDiv[propTypeHeight] + " )"; div.style.background = "rgba(0,0,255,0.5)"; document.body.appendChild(div); } document.getElementById("offset").onclick = function() { whatis('offset'); } document.getElementById("client").onclick = function() { whatis('client'); } document.getElementById("scroll").onclick = function() { whatis('scroll'); } 
 #MainDIV { border: 5px solid red; } 
 <button id="offset">offsetHeight & offsetWidth</button> <button id="client">clientHeight & clientWidth</button> <button id="scroll">scrollHeight & scrollWidth</button> <div id="MainDIV" style="margin:auto; height:200px; width:400px; overflow:auto;"> <div style="height:400px; width:500px; overflow:hidden;"> </div> </div> 

要知道区别,你必须了解盒模型 ,但基本上:

clientHeight :

以像素为单位返回元素的内部高度,包括填充,但包括水平滚动条高度边框边距

offsetHeight :

包含元素边框 ,元素垂直填充,元素水平滚动条 (如果呈现,如果呈现)和元素CSS高度的度量。

scrollHeight :

是元素内容高度的度量, 包括 由于溢出而在屏幕上不可见的内容


我会让它更容易:

考虑:

 <element> <!-- *content*: child nodes: --> | content A child node as text node | of <div id="another_child_node"></div> | the ... and I am the 4th child node | element </element> 

scrollHeightENTIRE content & padding (visible or not)
所有内容+填充的高度,尽pipe元素的高度。

clientHeightVISIBLE content & padding
只有可见的高度:内容部分由元素明确定义的高度限制。

offsetHeightVISIBLE content & padding + border + scrollbar
文件上的元素占用的高度。

scrollHeight属性clientHeight和offsetHeight