¿Pensó en explicar cuál es la diferencia entre offsetHeight
, clientHeight
y scrollHeight
o offsetWidth
, clientWidth
y scrollWidth
?
Uno debe saber esta diferencia antes de trabajar en el lado del cliente. De lo contrario, la mitad de su vida se gastará en reparar la IU.
Fiddle , o en línea a continuación:
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
fuente
fuente
Respuestas:
Para saber la diferencia hay que entender el modelo de caja , pero básicamente:
altura del cliente :
offsetHeight :
scrollHeight :
Lo haré más fácil:
Considerar:
scrollHeight :
ENTIRE content & padding (visible or not)
Altura de todo el contenido + rellenos, a pesar de la altura del elemento.
clientHeight :
VISIBLE content & padding
solo altura visible: porción de contenido limitada por la altura explícitamente definida del elemento.
offsetHeight :
VISIBLE content & padding
+ border + scrollbar
Altura ocupada por el elemento en el documento.
fuente
clientHeight
altura es visiblescrollHeight
yclientHeight
ambos están apareciendo igual a pesar de que la pantalla tiene más contenido y una barra de desplazamiento. ¿Por qué?* offsetHeight es una medida en píxeles de la altura CSS del elemento, incluido el borde, el relleno y la barra de desplazamiento horizontal del elemento.
* La propiedad clientHeight devuelve la altura visible de un elemento en píxeles, incluido el relleno, pero no el borde, la barra de desplazamiento o el margen.
* El valor scrollHeight es igual a la altura mínima que requeriría el elemento para ajustar todo el contenido en la ventana gráfica sin usar una barra de desplazamiento vertical. La altura se mide de la misma manera que clientHeight: incluye el relleno del elemento, pero no su borde, margen o barra de desplazamiento horizontal.
Igual es el caso de todos estos con ancho en lugar de altura.
fuente
Mis descripciones para los tres:
position: absolute
descendientes del elemento )position: absolute
están) sin desplazarse.Luego también está:
fuente
Offset significa "la cantidad o distancia por la cual algo está fuera de línea". Margen o bordes son algo que hace que la altura o el ancho real de un elemento HTML estén "fuera de línea". Te ayudará a recordar que:
Por otro lado, clientHeight es algo que se puede decir más o menos lo contrario de OffsetHeight. No incluye el borde o los márgenes. Incluye el relleno porque es algo que reside dentro del contenedor HTML, por lo que no cuenta como medidas adicionales como margen o borde. Entonces :
ScrollHeight es toda el área desplazable, por lo que su desplazamiento nunca se ejecutará sobre su margen o borde, por eso scrollHeight no incluye margen o bordes, pero sí el relleno. Entonces:
fuente