coderef

View transitionsBaseline · Newly available

View transitions allow you to create animated visual transitions between different states of a document.

Works in the latest version of every major browser, but older devices may not support it yet. Baseline since Oct 14, 2025.

Browser support

DesktopChrome
1–110Not supported
111+Supportedsince Mar 7, 2023
Current: 155
Edge
12–110Not supported
111+Supportedsince Mar 13, 2023
Current: 154
Firefox
1–143Not supported
144+Supportedsince Oct 14, 2025
Current: 157
Safari
1–17.6Not supported
18+Supportedsince Sep 16, 2024
Current: 27
MobileChrome Android
18–110Not supported
111+Supportedsince Mar 7, 2023
Current: 155
Firefox Android
4–143Not supported
144+Supportedsince Oct 14, 2025
Current: 157
Safari iOS
1–17.6Not supported
18+Supportedsince Sep 16, 2024
Current: 27

How to use

Every current browser supports this, but it only became Baseline on Oct 14, 2025. Use it as a progressive enhancement, or keep a fallback if you support older devices.

Example

JS
function updateView(render) {
  if (!document.startViewTransition) {
    render(); // fallback: update without animation
    return;
  }
  document.startViewTransition(() => render());
}

/* CSS: customise the default cross-fade */
/* ::view-transition-old(root), ::view-transition-new(root) { animation-duration: 300ms; } */

Feature detection

JS · check before using
if ("ViewTransition" in globalThis) {
  // ViewTransition is available
} else {
  // load a polyfill or use a fallback
}

Sub-features

Support for each part of the feature (27). The overall table above shows when the whole feature works.

Sub-featureChromeEdgeFirefoxSafariChrome AndroidFirefox AndroidSafari iOS
Document.startViewTransition1111111441811114418
Document.startViewTransition.options_parameter12512514718.212514718.2
Document.startViewTransition.options_parameter.types_parameter12512514718.212514718.2
Document.startViewTransition.options_parameter.update_parameter12512514718.212514718.2
Document.startViewTransition.updateCallback_parameter1111111441811114418
PageRevealEvent123123✕18.2123✕18.2
PageRevealEvent.PageRevealEvent128128✕18.2128✕18.2
PageRevealEvent.viewTransition126126✕18.2126✕18.2
PageSwapEvent124124✕18.2124✕18.2
PageSwapEvent.PageSwapEvent128128✕18.2128✕18.2
PageSwapEvent.activation124124✕18.2124✕18.2
PageSwapEvent.viewTransition126126✕18.2126✕18.2
ViewTransition1111111441811114418
ViewTransition.finished1111111441811114418
ViewTransition.ready1111111441811114418
ViewTransition.skipTransition1111111441811114418
ViewTransition.updateCallbackDone1111111441811114418
Window.pagereveal_event123123✕18.2123✕18.2
Window.pageswap_event124124✕✕124✕✕
view-transition-name1111111441811114418
Show 7 more
Sub-featureChromeEdgeFirefoxSafariChrome AndroidFirefox AndroidSafari iOS
view-transition-name.match-element13713714418.413714418.4
view-transition-name.none1111111441811114418
view-transition1091091441810914418
view-transition-group1091091441810914418
view-transition-image-pair1091091441810914418
view-transition-new1091091441810914418
view-transition-old1091091441810914418