CodeAventura
Astro
▸Islas e interactividad▸View Transitions

Misión

●iniciando…
Astro
Preparando entorno

Esto solo ocurre la primera vez que abres el curso.

19 / 22View Transitions
Anterior

View Transitions

El "feel" de SPA, sin las desventajas

Una de las cosas más bonitas de las SPA modernas son las transiciones suaves entre páginas: el contenido se desvanece, se desliza, persiste entre navegaciones. Astro te da exactamente eso, manteniendo el modelo MPA (cada página es una página real) y añadiendo solo unas decenas de KB de runtime.

Por debajo, usa la View Transitions API del navegador.

Cómo se activa

Tan fácil como meter un componente en el <head> de tu layout:

Nota histórica: en versiones antiguas de Astro este componente se llamaba ViewTransitions. La API actual lo renombró a ClientRouter (más explícito sobre lo que hace: enrutar en cliente). Si trabajas en un proyecto antiguo, ViewTransitions aún funciona como alias.

A partir de aquí, todas las navegaciones internas del sitio usan transiciones. Sin tocar enlaces, sin cambiar de mentalidad.

Personalizar transiciones

Puedes controlar qué se anima y cómo con la directiva transition:name y transition:animate:

Si la siguiente página tiene otro elemento con transition:name="titulo", el navegador anima la transición entre ambos (por ejemplo, lo desliza desde su posición original a la nueva).

Es muy potente para listas → detalle: el thumbnail "vuela" hacia la página del detalle.

Animaciones predefinidas

Astro trae:

  • transition:animate="fade" → desvanecimiento.
  • transition:animate="slide" → deslizamiento.
  • transition:animate="initial" → recreación instantánea (sin animar).
  • O un objeto custom con keyframes para control total.

Persistir estado entre páginas

Con transition:persist, un elemento sobrevive a la navegación: muy útil para reproductores de música, contadores, cualquier cosa que no quieras reiniciar al cambiar de ruta.

Eventos para hooks

El router emite eventos como astro:before-preparation, astro:after-swap, astro:page-load... Útiles para reinicializar widgets de terceros tras cada navegación:

Cuándo no usarlo

  • Si tu sitio es solo dos páginas, no merece la pena.
  • Si dependes mucho de scripts globales mal escritos que se "rompen" al no recargar la página, mejor evitar el router de cliente o adaptar los scripts.

Tu desafío 🚀

Abre src/layouts/BaseLayout.astro.

  1. Importa el componente desde astro:transitions (acepta ClientRouter o ViewTransitions, los dos pasan los validadores).
  2. Móntalo dentro del <head> del layout.

Eso es todo: cualquier página que use este layout obtiene transiciones suaves entre navegaciones internas. Una de las relaciones esfuerzo/resultado más golosas de Astro.