shi*_*xis 205 html javascript dom offsetheight
想解释之间有什么区别的offsetHeight,clientHeight和scrollHeight或offsetWidth,clientWidth和scrollWidth?
在客户端工作之前必须知道这种差异.否则他们的一半生命将用于修复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');
}Run Code Online (Sandbox Code Playgroud)
#MainDIV {
border: 5px solid red;
}Run Code Online (Sandbox Code Playgroud)
<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>Run Code Online (Sandbox Code Playgroud)
And*_*edo 502
要知道差异,你必须了解盒子模型,但基本上:
返回元素的内部高度(以像素为单位),包括填充,但不返回水平滚动条的高度,边框或边距
是一个度量,包括元素边框,元素垂直填充,元素水平滚动条(如果存在,如果呈现)和元素CSS高度.
是一个元素的含量的高度的测量,包括内容不可见的屏幕上由于溢流
我会让它变得更容易:
考虑:
<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>
Run Code Online (Sandbox Code Playgroud)
scrollHeight:ENTIRE content & padding (visible or not)
所有内容+填充的高度,尽管元素的高度.
clientHeight:VISIBLE content & padding
仅可见高度:内容部分受明确定义的元素高度限制.
offsetHeight:VISIBLE content & padding + border + scrollbar
文档上元素占用的高度.

Ven*_*ryx 10
我对这三者的描述:
position: absolute后代)position: absolute。然后还有:
* offsetHeight是以像素为单位的元素 CSS 高度的度量,包括边框、内边距和元素的水平滚动条。
* clientHeight属性以像素为单位返回元素的可见高度,包括填充,但不包括边框、滚动条或边距。
* scrollHeight值等于元素需要的最小高度,以便在不使用垂直滚动条的情况下适应视口中的所有内容。高度的测量方式与 clientHeight 相同:它包括元素的内边距,但不包括其边框、边距或水平滚动条。
所有这些宽度而不是高度的情况也是如此。
偏移量是指“某物偏离直线的量或距离”。边距或边框会使 HTML 元素的实际高度或宽度“脱节”。它将帮助您记住:
- offsetHeight是元素 CSS 高度的像素测量值,包括边框、内边距和元素的水平滚动条。
另一方面,clientHeight 可以说是 OffsetHeight 的反面。它不包括边框或边距。它确实包含填充,因为它驻留在 HTML 容器内部,因此它不算作边距或边框等额外测量。所以 :
- clientHeight属性返回元素的可视高度(以像素为单位),包括填充,但不包括边框、滚动条或边距。
ScrollHeight 是所有可滚动区域,因此您的滚动永远不会超出边距或边框,这就是为什么scrollHeight 不包括边距或边框,但填充包括在内。所以:
- scrollHeight值等于元素所需的最小高度,以便在不使用垂直滚动条的情况下适应视口中的所有内容。高度的测量方式与 clientHeight 相同:它包括元素的内边距,但不包括其边框、边距或水平滚动条。