Ich habe mir gerade eine andere Lösung dafür ausgedacht, bei der es nicht mehr notwendig ist, einen Wert von viel bis hoher maximaler Höhe zu verwenden. Es werden einige Zeilen Javascript-Code benötigt, um die innere Höhe des reduzierten DIV zu berechnen, aber danach ist alles CSS.
1) Abrufen und Einstellen der Höhe
Holen Sie sich die innere Höhe des reduzierten Elements (mit scrollHeight
). Mein Element hat eine Klasse .section__accordeon__content
und ich führe diese tatsächlich in einer forEach()
Schleife aus, um die Höhe für alle Bedienfelder festzulegen, aber Sie haben die Idee.
document.querySelectorAll( '.section__accordeon__content' ).style.cssText = "--accordeon-height: " + accordeonPanel.scrollHeight + "px";
2) Verwenden Sie die CSS-Variable, um das aktive Element zu erweitern
Verwenden Sie als Nächstes die CSS-Variable, um den max-height
Wert festzulegen, wenn das Element eine .active
Klasse hat.
.section__accordeon__content.active {
max-height: var(--accordeon-height);
}
Letztes Beispiel
Das vollständige Beispiel sieht also so aus: Durchlaufen Sie zuerst alle Accordeon-Panels und speichern Sie ihre scrollHeight
Werte als CSS-Variablen. Verwenden Sie als Nächstes die CSS-Variable als max-height
Wert für den aktiven / erweiterten / offenen Status des Elements.
Javascript:
document.querySelectorAll( '.section__accordeon__content' ).forEach(
function( accordeonPanel ) {
accordeonPanel.style.cssText = "--accordeon-height: " + accordeonPanel.scrollHeight + "px";
}
);
CSS:
.section__accordeon__content {
max-height: 0px;
overflow: hidden;
transition: all 425ms cubic-bezier(0.465, 0.183, 0.153, 0.946);
}
.section__accordeon__content.active {
max-height: var(--accordeon-height);
}
Und da hast du es. Eine adaptive Animation mit maximaler Höhe, die nur CSS und einige Zeilen JavaScript-Code verwendet (keine jQuery erforderlich).
Hoffe, dies hilft jemandem in der Zukunft (oder meinem zukünftigen Selbst als Referenz).
.scrollHeight
DOM-Funktion in IE <8.0 ( developer.mozilla.org/en/DOM/element.scrollHeight ) nicht funktionieren