Tengo una pregunta sobre cómo obtener una altura div. Soy consciente de .height()
y innerHeight()
, pero ninguno de ellos hace el trabajo por mí en este caso. Lo que pasa es que en este caso tengo un div que se desborda ancho un desbordamiento: desplazarse y el div tiene una altura fija.
Si uso .height()
o innerHeight()
, ambos me dan la altura del área visible, pero si quiero que se tenga en cuenta el desbordamiento, ¿cómo hago?
.scrollHeight
función DOM no funcionará en IE <8.0 ( developer.mozilla.org/en/DOM/element.scrollHeight )scrollHeight
También a veces devuelve cero cuando está oculto (o su padre está oculto), molesto.overflow: hidden
: /document.getElementById('your_div').scrollHeight
Para obtener más información sobre la
.scrollHeight
propiedad, consulte los documentos :fuente
Otra posibilidad sería colocar el html en un no desbordamiento: elemento oculto colocado 'fuera' de la pantalla, como una posición absoluta superior e izquierda, luego 5000px, luego lea la altura de este elemento. Es feo, pero funciona bien.
fuente
Acabo de preparar otra solución para esto, donde ya no es necesario usar un valor de -much a high-max-height. Necesita algunas líneas de código JavaScript para calcular la altura interna del DIV colapsado, pero después de eso, todo es CSS.
1) Recolección y ajuste de altura
Obtenga la altura interna del elemento contraído (usando
scrollHeight
). Mi elemento tiene una clase.section__accordeon__content
y en realidad lo ejecuto en unforEach()
bucle para establecer la altura de todos los paneles, pero se entiende la idea.2) Use la variable CSS para expandir el elemento activo
Luego, use la variable CSS para establecer el
max-height
valor cuando el elemento tenga una.active
clase.Ejemplo final
Entonces, el ejemplo completo es así: primero recorra todos los paneles de acordeón y almacene sus
scrollHeight
valores como variables CSS. Luego use la variable CSS como elmax-height
valor en el estado activo / expandido / abierto del elemento.Javascript:
CSS:
Y ahí lo tienes. Una animación adaptativa de altura máxima que utiliza solo CSS y algunas líneas de código JavaScript (no se requiere jQuery).
Espero que esto ayude a alguien en el futuro (o mi futuro yo como referencia).
fuente
Para aquellos que no se desbordan sino que se esconden por un margen negativo:
(feo pero solo uno que funciona hasta ahora)
fuente
Otra solución simple (no muy elegante, pero tampoco demasiado fea) es colocar un interior y
div / span
luego obtener su altura ($(this).find('span).height()
).Aquí hay un ejemplo del uso de esta estrategia:
(Este ejemplo específico usa este truco para animar la altura máxima y evita el retraso de la animación al colapsar (cuando se usa un número alto para la propiedad de altura máxima).
fuente