CodeForge

Maquetación Web Dinámica / Animaciones CSS: de sencillas a profesionales

View Transitions: navegar sin parpadeo, como una app

Teoría18 min20 XP

Toca un contacto en WhatsApp: la foto "viaja" y se expande hacia la conversación. Ahora haz clic en un enlace de una web clásica: pantallazo blanco, página nueva. Esa diferencia de trato — la app fluye, la web parpadea — tenía décadas... hasta la View Transitions API: transiciones entre páginas completas, declaradas en CSS. Esta lección es más conceptual que las demás (el efecto ocurre ENTRE páginas, así que no cabe en un preview), pero sales con la receta completa para tu propio sitio.

El truco de magia: dos fotos y un fundido

Activarla: cuatro líneas en ambas páginas

Para las navegaciones normales entre páginas de un mismo sitio (los MPA que llevas construyendo todo el curso), la API es puro CSS:

estilos-globales.css

Eso es todo para el fundido por defecto: navega entre dos páginas de tu sitio con esa regla y el parpadeo blanco se convierte en crossfade. Para personalizarlo, el navegador expone las "fotos" como pseudo-elementos animables con los @keyframes de siempre:

personalizada.css

Léelo con tus lentes del módulo: la vieja SALE con ease-in (acelera al irse), la nueva ENTRA con ease-out (aterriza suave) y un pelín de delay con su backwards — cada pieza de las últimas lecciones, en su lugar.

view-transition-name: la foto que viaja

El fundido global está bien; la magia de verdad es conectar UN elemento de la página vieja con SU versión en la nueva — la miniatura del artículo que se expande hasta ser la imagen de cabecera:

conexion.css

Mismo nombre en ambas páginas = el navegador entiende "son EL MISMO objeto" y anima posición, tamaño y forma de una a la otra automáticamente. Dos reglas del mecanismo: cada view-transition-name debe ser ÚNICO en su página (dos elementos con el mismo nombre en una página rompen la transición completa), y el nombre conecta CUALQUIER par de elementos — no tienen que ser la misma etiqueta ni el mismo contenido.

Pusiste view-transition-name: tarjeta a TODAS las tarjetas de la portada con una sola regla (.tarjeta { ... }) y ahora la transición no ocurre en absoluto. ¿Por qué?

Soporte y criterio (la nota honesta)

  • Las transiciones entre páginas (@view-transition, cross-document) funcionan en Chrome y Edge desde 2024 y Safari desde la versión 18.2; Firefox va más atrás (la variante same-document llegó primero; verifica el estado actual en caniuse). La buena noticia estructural: es mejora progresiva perfecta por diseño — donde no hay soporte, la navegación simplemente es la de siempre. Cero riesgo de contenido roto, a diferencia del reveal de la lección pasada.
  • Existe una segunda variante — same-document — para transiciones dentro de la misma página (reordenar una lista, cambiar de pestaña visual), que se dispara desde JavaScript con document.startViewTransition(). Es la puerta pendiente del módulo 14; los frameworks del final del curso (Astro, Next) la usan por debajo para sus transiciones de página.
  • Respeto de siempre: las view transitions también se envuelven en @media (prefers-reduced-motion: reduce) — ahí se anulan los pseudo-elementos animados o directamente la regla @view-transition.

Mini-reto

Este es de laboratorio real, no de playground: toma dos páginas de "El Observador" (portada y un artículo), agrega el @view-transition a su CSS compartido y navega entre ellas en Chrome o Edge. Cuando veas el fundido, conecta la imagen de la noticia destacada con la cabecera del artículo vía view-transition-name y navega otra vez. La primera vez que la foto VIAJA en un sitio hecho por ti no se olvida.

Qué sigue

Ya animas contra el reloj, contra el scroll y entre páginas. Antes de los dos retos finales, la lección más importante del módulo — y puede que del curso: para quién puede ser DAÑINO todo este movimiento, y cómo se anima con empatía de verdad, más allá del copy-paste del media query.