interpolate-size: animar height auto sin hacks

Aprende a transicionar tamaños intrínsecos como `height: auto` con CSS nativo, entendiendo cuándo usar `interpolate-size`, qué problemas resuelve y cómo dejar fallback razonable.

Durante años, animar un bloque que cambia a `height: auto` significaba mentirle un poco al navegador con `max-height`, mediciones en JavaScript o coreografías frágiles.

La propiedad `interpolate-size` abre una puerta importante: permite que el navegador interpole keywords intrínsecas como `auto`, `min-content` o `max-content` en transiciones y animaciones.

No es un adorno. En producción afecta a acordeones, paneles de filtros, descripciones expandidas, FAQ y cualquier interfaz donde el contenido real mande sobre el tamaño final.

  • CSS siempre supo llegar a `auto`, pero no sabía dibujar el camino intermedio.
  • Una transición necesita dos valores interpolables. `height: 0` y `height: auto` no encajaban bien porque `auto` no es un número fijo sino un resultado de layout.
  • Por eso tantos componentes acababan usando `max-height: 999px` o cálculos de `scrollHeight` desde JavaScript. Funcionaban, sí, pero con topes arbitrarios, mantenimiento extra o microbugs cuando el contenido cambiaba.
  • Hack clásico: `max-height` con un máximo inventado.
  • Alternativa JS: medir contenido y escribir píxeles en runtime.

Qué problema resuelve exactamente

CSS siempre supo llegar a `auto`, pero no sabía dibujar el camino intermedio.

Una transición necesita dos valores interpolables. `height: 0` y `height: auto` no encajaban bien porque `auto` no es un número fijo sino un resultado de layout.

Por eso tantos componentes acababan usando `max-height: 999px` o cálculos de `scrollHeight` desde JavaScript. Funcionaban, sí, pero con topes arbitrarios, mantenimiento extra o microbugs cuando el contenido cambiaba.

  • Hack clásico: `max-height` con un máximo inventado.
  • Alternativa JS: medir contenido y escribir píxeles en runtime.
  • Nueva opción: permitir que el navegador interpole keywords intrínsecas.

Sintaxis base y dónde aplicarla

No se declara en el panel que cambia de altura, sino en el contexto donde quieres permitir esa interpolación.

El detalle importante es `allow-keywords`: sin esa orden, el navegador sigue tratando esos cambios como no interpolables.

Combina muy bien con `overflow: clip` para que el contenido no se salga durante el recorrido visual.

Casos donde sí aporta valor

No todo necesita una animación de altura, pero cuando el patrón es frecuente compensa mucho.

Fallback y criterio de compatibilidad

La regla moderna no te exime de pensar en navegadores que aún no han llegado.

Si la interfaz sigue siendo usable sin animación, ya tienes una base muy buena. Luego puedes mejorar con `interpolate-size` donde exista soporte.

Cuando la animación sea secundaria, el fallback más sano suele ser aceptar apertura y cierre instantáneos. Solo merece la pena volver al hack de `max-height` si el componente depende mucho de esa suavidad visual.

CSS
49

interpolate-size: animar height auto sin hacks

Aprende a transicionar tamaños intrínsecos como `height: auto` con CSS nativo, entendiendo cuándo usar `interpolate-size`, qué problemas resuelve y cómo dejar fallback razonable.

Código del tema: interpolate-size: allow-keywords;

📘 Teoría

Qué problema resuelve exactamente

CSS siempre supo llegar a `auto`, pero no sabía dibujar el camino intermedio.

Una transición necesita dos valores interpolables. `height: 0` y `height: auto` no encajaban bien porque `auto` no es un número fijo sino un resultado de layout.

Por eso tantos componentes acababan usando `max-height: 999px` o cálculos de `scrollHeight` desde JavaScript. Funcionaban, sí, pero con topes arbitrarios, mantenimiento extra o microbugs cuando el contenido cambiaba.

  • Hack clásico: `max-height` con un máximo inventado.
  • Alternativa JS: medir contenido y escribir píxeles en runtime.
  • Nueva opción: permitir que el navegador interpole keywords intrínsecas.

Sintaxis base y dónde aplicarla

No se declara en el panel que cambia de altura, sino en el contexto donde quieres permitir esa interpolación.

1

El detalle importante es `allow-keywords`: sin esa orden, el navegador sigue tratando esos cambios como no interpolables.

2

Combina muy bien con `overflow: clip` para que el contenido no se salga durante el recorrido visual.

Patrón mínimo
.accordion {
  interpolate-size: allow-keywords;
}

.panel {
  height: 0;
  overflow: clip;
  transition: height 280ms ease;
}

.is-open .panel {
  height: auto;
}

Casos donde sí aporta valor

No todo necesita una animación de altura, pero cuando el patrón es frecuente compensa mucho.

1

FAQ y acordeones

El contenido puede crecer o encogerse sin que tengas que recalibrar límites máximos cada vez.

2

Filtros de ecommerce

Los grupos desplegables cambian con la cantidad de opciones y no siempre caben en un alto fijo razonable.

3

Tarjetas expandibles

Un resumen corto puede convertirse en un bloque rico con listas, enlaces o métricas sin romper la transición.

Fallback y criterio de compatibilidad

La regla moderna no te exime de pensar en navegadores que aún no han llegado.

1

Si la interfaz sigue siendo usable sin animación, ya tienes una base muy buena. Luego puedes mejorar con `interpolate-size` donde exista soporte.

2

Cuando la animación sea secundaria, el fallback más sano suele ser aceptar apertura y cierre instantáneos. Solo merece la pena volver al hack de `max-height` si el componente depende mucho de esa suavidad visual.

🧪 Aprende probando

Ejemplo Demo interactiva: before y after real Compara un acordeón resuelto con `max-height` frente a otro que anima `height: auto` con `interpolate-size`.

🏁 Retos

Reto Reto: abrir un panel hasta auto Activa la interpolación de keywords y haz que el panel abierto use su altura real.

🧰 Recursos

Test

Comprueba tus conocimientos con un test sobre CSS.

Test de CSS

¿Qué es esto?

Soy Cristian Eslava y a veces hago webs para procrastinar yo y vosotros 😉.

Esta la hice en febrero de 2026 para facilitar el aprendizaje de mis alumnxs. Aprender desarrollo web practicando. La idea es que crezca semanalmente con nuevos temas, tests y retos.

Inspirado en MDN, en W3Schools, en Codepen, en el crack de Manz y en mil sitios de documentación sobre desarrollo web. Quería aportar además de bloques teóricos con ejemplos, la gamificación de los retos y el sistema de test que ya tenía en culTest .

Si te gustó, si no te gustó, si quieres saludarme, o invitarme a 🍻 no dudes en escribirme en cristianeslava@gmail.com .