animar altura: 0 a altura: auto con CSS

Las transiciones CSS son una buena forma de crear interactividad., transition al estado inicial de un elemento, y el navegador anima la transición entre los dos estados. Las transiciones para variables intrínsecas del elemento como auto han sido un problema para los desarrolladores web durante décadas, y la única opción era calcular la altura dinámicamente mediante JavaScript.


Otro reto consiste en iniciar las transiciones cuando un elemento recibe su primer estilo, por ejemplo, cuando se añade al DOM o cuando la función display-valor de none En este artículo se explica cómo solucionar este problema con las nuevas funciones CSS como calc-size(), interpolate-size, @starting-style y transition-behavior se puede dominar.

Solución con calc-size()

Si tiene un elemento DOM que parte de un estado cerrado (height: 0) a un estado abierto (height: auto), la animación no suele ejecutarse, aunque la función transition-Esto se debe a que los navegadores no establecen transiciones a variables intrínsecas como auto El nuevo calc-size()-permite calcular estas variables intrínsecas y, por tanto, también las transiciones:

f95f6dcb193aa903adc84ce47bc4a296

En calc-size()-todavía no está disponible en todos los navegadores, por lo que se puede conservar la función original height: auto-declaración.

Solución con interpolate-size

En interpolate-size-permite definir el comportamiento de interpolación de los navegadores y decidir si deben utilizarse entre palabras clave como auto Por defecto, la interpolación sólo tiene lugar entre valores numéricos. allow-keywords sin embargo, puede activar transiciones entre palabras clave:

f95f6dcb193aa903adc84ce47bc4a296

Por interpolate-size: allow-keywords a la :root-se activa el nuevo comportamiento para toda la página.

Transición de display:none

Otro problema se produce cuando un elemento de display:none a un estado visible. display no es una propiedad animable, no hay animación. Las nuevas funciones CSS ayudan en este caso @starting-style y transition-behavior:

f95f6dcb193aa903adc84ce47bc4a296

Con transition-behavior: allow-discrete garantiza que la animación se ejecute antes que el display-valor de block en none Estas reglas permiten ejecutar transiciones incluso durante una actualización inicial del estilo. @starting-style-garantiza que la animación se ejecute correctamente durante la primera actualización del estilo.

Compatibilidad con navegadores

Las nuevas propiedades se están calc-size() y interpolate-size aún no son compatibles con todos los navegadores. En Chrome están disponibles tras una bandera de experimento, pero aún no en Safari y Firefox. Compatibilidad con transition-behavior en Chrome y Edge, pero no en Safari y Firefox, lo que esperemos que cambie en el futuro.

Atrás