La solution (purement CSS) jusqu'à présent
Si vous laissez height:auto;
et utiliser des valeurs fixes de max-height
vous pouvez simuler une transition :
.details-expanded {
max-height: 300px; /* try to guess a max-height for your content */
}
.details-collapsed {
height: auto;
max-height: 0;
transition: max-height 500ms linear; /* pick a proportional duration */
}
Faites attention à la durée de la transition et max-height
lorsque l'élément est développé. Jouez avec les valeurs jusqu'à ce que vous obteniez le comportement souhaité.
De cette façon, vous pouvez obtenir une transition entre deux valeurs définies (dans l'exemple ci-dessus, de 0 à 300) alors que l'option height
se contentera de "suivre" la propriété max-height
et croître jusqu'à ce qu'il atteigne la taille du contenu.
Démos
DEMO 1 - un exemple concret de cette solution
DEMO 2 - juste une démonstration de ce qui se passe dans DEMO 1
Observations
Pour l'instant, les transitions ne sont implémentées qu'entre des valeurs prédéfinies et je suppose que c'est parce que le moteur ne peut pas deviner la valeur initiale ou finale dans certains cas. Que se passe-t-il si vous avez une transition de hauteur dont la valeur finale est de 50 % mais que la transition elle-même affecte la hauteur du parent d'une manière ou d'une autre ? ! Cela nécessiterait probablement plusieurs reflux des calculs sur chaque image, ce qui entraîne des problèmes de performance.
Comme l'a dit Fabb En ce qui concerne les transitions CSS, la spécification relative aux transitions CSS stipule que les valeurs en pourcentage doivent être prises en charge, ce n'est donc qu'une question de temps avant que les moteurs ne décident dans quels cas ils vont prendre en charge les transitions utilisant des points à valeur dynamique. Cependant, je ne suis pas sûr de ce qui pourrait être considéré comme un comportement correct pour les transitions de type auto
valeurs pensées.
0 votes
Cela fonctionne dans les navigateurs modernes :)