Je viens de concocter une autre solution pour cela, où il n'est plus nécessaire d'utiliser une valeur -much to high-max-height. Il faut quelques lignes de code javascript pour calculer la hauteur intérieure du DIV réduit, mais après cela, tout est en CSS.
1) Récupération et réglage de la hauteur
Récupère la hauteur intérieure de l'élément réduit (à l'aide de scrollHeight
). Mon élément a une classe .section__accordeon__content
et je l'exécute en fait dans une forEach()
boucle pour définir la hauteur de tous les panneaux, mais vous voyez l'idée.
document.querySelectorAll( '.section__accordeon__content' ).style.cssText = "--accordeon-height: " + accordeonPanel.scrollHeight + "px";
2) Utilisez la variable CSS pour développer l'élément actif
Ensuite, utilisez la variable CSS pour définir la max-height
valeur lorsque l'élément a une .active
classe.
.section__accordeon__content.active {
max-height: var(--accordeon-height);
}
Exemple final
Ainsi, l'exemple complet est le suivant: commencez par parcourir tous les panneaux d'accordéon et stockez leurs scrollHeight
valeurs sous forme de variables CSS. Ensuite, utilisez la variable CSS comme max-height
valeur sur l'état actif / développé / ouvert de l'élément.
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);
}
Et voila. Une animation adaptative de hauteur maximale utilisant uniquement CSS et quelques lignes de code JavaScript (aucun jQuery requis).
J'espère que cela aidera quelqu'un dans le futur (ou mon futur moi pour référence).
.scrollHeight
fonction DOM ne fonctionnera pas dans IE <8.0 ( developer.mozilla.org/en/DOM/element.scrollHeight )