Pensou em explicar qual é a diferença entre offsetHeight
, clientHeight
e scrollHeight
ou offsetWidth
, clientWidth
e scrollWidth
?
É preciso conhecer essa diferença antes de trabalhar no lado do cliente. Caso contrário, metade da vida será gasta na correção da interface do usuário.
Fiddle , ou em linha abaixo:
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>
javascript
html
dom
offsetheight
shibualexis
fonte
fonte
Respostas:
Para saber a diferença, você precisa entender o modelo da caixa , mas basicamente:
clientHeight :
offsetHeight :
scrollHeight :
Vou facilitar:
Considerar:
scrollHeight :
ENTIRE content & padding (visible or not)
altura de todo o conteúdo + preenchimentos, apesar da altura do elemento.
clientHeight :
VISIBLE content & padding
Apenas altura visível: parte do conteúdo limitada pela altura explicitamente definida do elemento.
offsetHeight :
VISIBLE content & padding
+ border + scrollbar
altura ocupada pelo elemento no documento.
fonte
clientHeight
é a altura visível #scrollHeight
eclientHeight
ambos estão surgindo da mesma forma, apesar da tela ter mais conteúdo e uma barra de rolagem. Por quê?* offsetHeight é uma medida em pixels da altura CSS do elemento, incluindo borda, preenchimento e barra de rolagem horizontal do elemento.
* A propriedade clientHeight retorna a altura visível de um elemento em pixels, incluindo preenchimento, mas não a borda, barra de rolagem ou margem.
* O valor scrollHeight é igual à altura mínima que o elemento exigiria para caber em todo o conteúdo da janela de visualização sem usar uma barra de rolagem vertical. A altura é medida da mesma maneira que clientHeight: inclui o preenchimento do elemento, mas não sua borda, margem ou barra de rolagem horizontal.
O mesmo acontece com todos esses com largura em vez de altura.
fonte
Minhas descrições para os três:
position: absolute
descendentes do elemento )position: absolute
outros) sem rolar.Depois, há também:
fonte
Deslocamento Significa "a quantidade ou a distância pela qual algo está fora de linha". Margem ou Bordas são algo que torna a altura ou a largura real de um elemento HTML "fora de linha". Isso ajudará você a lembrar que:
Por outro lado, clientHeight é algo que você pode dizer o oposto de OffsetHeight. Não inclui a borda ou as margens. Ele inclui o preenchimento porque é algo que reside dentro do contêiner HTML, portanto não conta como medidas extras, como margem ou borda. Assim :
ScrollHeight é toda a área de rolagem; portanto, sua rolagem nunca será executada sobre sua margem ou borda; é por isso que scrollHeight não inclui margem ou bordas, mas sim preenchimento. Assim:
fonte