¿Cómo se obtiene la altura renderizada de un elemento?
Digamos que tiene un <div>
elemento con algún contenido dentro. Este contenido en el interior va a estirar la altura de la <div>
. ¿Cómo se obtiene la altura "representada" cuando no se ha establecido explícitamente la altura. Obviamente, intenté:
var h = document.getElementById('someDiv').style.height;
¿Hay algún truco para hacer esto? Estoy usando jQuery si eso ayuda.
javascript
jquery
css
height
BuddyJoe
fuente
fuente
Respuestas:
Debería ser
con jQuery. Esto recupera la altura del primer elemento del conjunto envuelto como un número.
Tratando de usar
solo funciona si ha configurado la propiedad en primer lugar. ¡No muy útil!
fuente
Pruebe uno de:
clientHeight
Incluye la altura y el acolchado vertical.offsetHeight
incluye la altura, el relleno vertical y los bordes verticales.scrollHeight
incluye la altura del documento contenido (sería mayor que la altura en caso de desplazamiento), el relleno vertical y los bordes verticales.fuente
.clientWidth/.clientHeight
NO incluya el ancho de desplazamiento si se muestra el desplazamiento. Si desea incluir el ancho de desplazamiento, puede usarelement.getBoundingClientRect().width
en su lugarNO JQUERY ya que había un montón de enlaces
elem.style.height
en la parte superior de estas respuestas ...ALTURA INTERNA:
https://developer.mozilla.org/en-US/docs/Web/API/Element.clientHeight
ALTURA EXTERIOR:
https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.offsetHeight
O una de mis referencias favoritas: http://youmightnotneedjquery.com/
fuente
Puedes usar
.outerHeight()
para este propósito.Le dará la altura total del elemento. Además, no necesita establecer ninguno
css-height
de los elementos. Por precaución, puede mantener su altura automática para que pueda representarse según la altura del contenido.Para una visión clara de estas funciones, puede ir al sitio de jQuery o una publicación detallada aquí .
aclarará la diferencia entre
.height()
/innerHeight()
/outerHeight()
fuente
Lo uso para obtener la altura de un elemento (devuelve flotante) :
También funciona cuando usas el DOM virtual . Lo uso en Vue así:
fuente
entonces simplemente:
style.height
fuente
Definitivamente uso
o
Estoy publicando esto como una respuesta adicional porque hay un par de cosas importantes que acabo de aprender.
Casi me caigo en la trampa justo ahora de usar offsetHeight. Esto es lo que pasó :
Aquí hay solo una parte:
Sí, mira AMBOS desplazamiento y desplazamiento. Si eso falla, se ve aún más lejos, teniendo en cuenta los problemas de compatibilidad del navegador y CSS. En otras palabras, MUCHAS COSAS QUE NO ME IMPORTA - o quiero.
Pero no tengo que hacerlo. Gracias jQuery!
Moraleja de la historia: si jQuery tiene un método para algo, probablemente sea por una buena razón, probablemente relacionada con la compatibilidad.
Si no ha leído la lista de métodos de jQuery recientemente, le sugiero que eche un vistazo.
fuente
fuente
elem.getBoundingClientRect().height
Hice un código simple que ni siquiera necesita JQuery y probablemente ayude a algunas personas. Obtiene la altura total de 'ID1' después de la carga y la usa en 'ID2'
Luego simplemente configura el cuerpo para cargarlo
fuente
Hm podemos obtener la geometría del elemento ...
¿Qué tal este simple JS?
fuente
var geometry; geometry={};
simplemente puede servar geometry={};
Creo que la mejor manera de hacer esto en 2020 es usar JS y
getBoundingClientRect().height;
Aquí hay un ejemplo
Además de hacerlo de
height
esta manera, también tenemos acceso a un montón de otras cosas sobre eldiv
.fuente
Entonces, ¿es esta la respuesta?
"Si necesita calcular algo pero no mostrarlo, establezca el elemento en
visibility:hidden
yposition:absolute
, agréguelo al árbol DOM, obtenga el offsetHeight y elimínelo (eso es lo que hace la biblioteca prototipo detrás de las líneas la última vez que lo verifiqué)".Tengo el mismo problema en varios elementos. No hay jQuery o Prototype para usar en el sitio, pero estoy a favor de tomar prestada la técnica si funciona. Como ejemplo de algunas cosas que no funcionaron, seguido de lo que hizo, tengo el siguiente código:
que básicamente intenta cualquier cosa y todo solo para obtener un resultado cero. ClientHeight sin afectar. Con los elementos del problema, normalmente obtengo NaN en la Base y cero en las alturas de Desplazamiento y Desplazamiento. Luego probé la solución Agregar DOM y clientRects para ver si funciona aquí.
El 29 de junio de 2011, de hecho, actualicé el código para intentar agregar a DOM y clientHeight con mejores resultados de lo que esperaba.
1) clientHeight también fue 0.
2) Dom realmente me dio una altura que fue genial.
3) ClientRects devuelve un resultado casi idéntico a la técnica DOM.
Debido a que los elementos agregados son de naturaleza fluida, cuando se agregan a un elemento DOM Temp vacío, se representan de acuerdo con el ancho de ese contenedor. Esto se vuelve extraño, porque es 30px más corto de lo que finalmente termina.
Agregué algunas instantáneas para ilustrar cómo la altura se calcula de manera diferente.
Las diferencias de altura son obvias. Ciertamente podría agregar posicionamiento absoluto y oculto, pero estoy seguro de que no tendrá ningún efecto. ¡Seguí convencido de que esto no funcionaría!
(Me desvío más) La altura sale (se renderiza) más baja que la altura real renderizada. Esto podría abordarse estableciendo el ancho del elemento DOM Temp para que coincida con el padre existente y podría hacerse con bastante precisión en teoría. Tampoco sé qué resultaría de eliminarlos y agregarlos nuevamente a su ubicación actual. Cuando llegaron a través de una técnica innerHTML, buscaré usando este enfoque diferente.
* SIN EMBARGO * Nada de eso era necesario. De hecho, funcionó según lo anunciado y devolvió la altura correcta.
Cuando pude volver a ver los menús de manera sorprendente, DOM había devuelto la altura correcta según el diseño fluido en la parte superior de la página (279 px). El código anterior también usa getClientRects que devuelve 280px.
Esto se ilustra en la siguiente instantánea (tomada de Chrome una vez que funciona).
Ahora no tengo ni idea de por qué funciona ese truco prototipo, pero parece que sí. Alternativamente, getClientRects también funciona.
Sospecho que la causa de todos estos problemas con estos elementos en particular fue el uso de innerHTML en lugar de appendChild, pero eso es pura especulación en este momento.
fuente
offsetHeight
, generalmente.Si necesita calcular algo pero no mostrarlo, configure el elemento en
visibility:hidden
yposition:absolute
, agréguelo al árbol DOM, obtengaoffsetHeight
y elimínelo. (Eso es lo que hace la biblioteca prototipo detrás de escena la última vez que lo revisé).fuente
A veces, offsetHeight devolverá cero porque el elemento que ha creado aún no se ha representado en el Dom. Escribí esta función para tales circunstancias:
fuente
Si ya está utilizando jQuery, su mejor apuesta es
.outerHeight()
o.height()
, como se ha dicho.Sin jQuery, puede marcar el tamaño de la caja en uso y agregar varios rellenos + bordes + clientHeight, o puede usar getComputedStyle :
var h = getComputedStyle (document.getElementById ('someDiv')). height;
h
ahora será una cadena como un "53.825px".Y no puedo encontrar la referencia, pero creo que escuché que
getComputedStyle()
puede ser costoso, por lo que probablemente no sea algo que desee llamar en cadawindow.onscroll
evento (pero tampoco lo es jQuery'sheight()
).fuente
getComputedStyle
, useparseInt(h, 10)
para obtener un número entero para los cálculos.Con MooTools :
$('someDiv').getSize().y
fuente
Si entendí tu pregunta correctamente, entonces tal vez algo como esto podría ayudar:
fuente
¿Has establecido la altura en el CSS específicamente? Si no lo has hecho, debes usarlo en
offsetHeight;
lugar deheight
fuente