APIs de la web, hoyLaboratorio · Alex Harto

View Transitions

Transiciones animadas entre estados y entre páginas, con muy poco código.

En tu navegador: comprobando…Revisado 1 oct 2026

El navegador captura el antes y el después y anima la diferencia. Tú decides qué elementos se emparejan (view-transition-name) y cómo se mueven, con pseudoelementos CSS. En una página basta envolver el cambio en document.startViewTransition().

Dentro de una página son Baseline desde octubre de 2025 (Firefox 144). Entre páginas de un mismo sitio basta @view-transition { navigation: auto; } en Chrome, Edge y Safari; en Firefox aún está en desarrollo. Esta web la usa al pasar de una ficha a otra.

Para qué sirve

  • Listas que se reordenan o filtran con continuidad
  • Del listado al detalle sin perder el hilo
  • Webs de varias páginas que se sienten como una app

Demo

Cada cambio va dentro de document.startViewTransition(): el navegador anima la diferencia. Pulsa una muestra para abrirla. Y entre páginas: pasa a la ficha anterior o siguiente y fíjate en el título.

Compatibilidad

Baseline · nueva · 14 oct 2025
FunciónEscritorioMóvil
ChromeEdgeFirefoxSafariChrome AndroidFirefox AndroidSafari iOS
En la misma página111Chrome: 111 111Edge: 111 144Firefox: 144 18Safari: 18 111Chrome: 111 144Firefox: 144 18Safari: 18
Entre páginas (@view-transition)126Chrome: 126 126Edge: 126 —1Firefox: No18.2Safari: 18.2 126Chrome: 126 —Firefox: No18.2Safari: 18.2
Limitadas a un elemento147Chrome: 147 147Edge: 147 —Firefox: No—Safari: No147Chrome: 147 —Firefox: No—Safari: No
  1. 1En desarrollo; forma parte de Interop 2026.

Compatibilidad generada en cada publicación desde MDN browser-compat-data 8.1.3 (24 sep 2026) · web-features 3.40.0 · revisión manual: 1 oct 2026

Código mínimo

<!doctype html>
<meta charset="utf-8">
<title>View Transitions · ejemplo mínimo</title>
<style>
  /* Entre páginas del mismo origen: basta con esta regla en las dos páginas */
  @view-transition { navigation: auto; }

  ul { display: flex; flex-wrap: wrap; gap: 8px; list-style: none; padding: 0; }
  li { width: 80px; height: 80px; display: grid; place-items: center; background: #c0643a; color: #fff; font: 600 24px system-ui; }
  /* Cada elemento anima por su cuenta; la clase permite darles a todos la misma curva */
  li { view-transition-name: match-element; view-transition-class: card; }
  ::view-transition-group(.card) { animation-duration: 0.4s; }
  @media (prefers-reduced-motion: reduce) {
    ::view-transition-group(*), ::view-transition-old(*), ::view-transition-new(*) { animation: none; }
  }
</style>
<p><button id="shuffle">Barajar</button> · <a href="pagina-2.html">Ir a la página 2 (transición entre documentos)</a></p>
<ul id="list"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li></ul>
<script>
  const list = document.querySelector('#list');
  const shuffle = () => [...list.children].sort(() => Math.random() - 0.5).forEach((li) => list.append(li));
  document.querySelector('#shuffle').onclick = () => {
    // Sin soporte, el cambio se hace igual, sin animación
    if (!document.startViewTransition) return shuffle();
    document.startViewTransition(shuffle);
  };
</script>

Novedades

  1. Chrome 147 trae las transiciones limitadas a un elemento (Element.startViewTransition).
  2. Interop 2026 incluye las transiciones entre documentos.
  3. Firefox 147 admite los tipos de transición (types).
  4. Firefox 144 las activa: Baseline dentro de una página.

Ten en cuenta

  1. Entre páginas, las dos deben activarla y ser del mismo origen; una redirección a otro origen la cancela.
  2. match-element empareja por identidad y solo sirve dentro de un documento; entre páginas usa nombres únicos.
  3. Respeta prefers-reduced-motion y comprueba que startViewTransition existe antes de usarlo.

Más información

Fuentes