Cross-document view transitions work in Chrome 126+, Edge 126+, Opera 112+, and Safari 18.2+. See setup, pageswap events, and known limitations.

Prince Dewani
May 6, 2026
Cross-document view transitions are a W3C API that animates navigation between two same-origin pages in a multi-page application using a CSS @view-transition at-rule. They work in Chrome 126+, Edge 126+, Opera 112+, and Safari 18.2+ on macOS and iOS, while Firefox, Samsung Internet, and Internet Explorer do not yet support them.
This guide covers what they are, the browsers that support them, how they work, how to enable them, the use cases, and the known issues.
Cross-document view transitions are a feature of the W3C View Transitions Module Level 2 specification. The browser snapshots the old and new pages on a same-origin navigation, suppresses rendering while the DOM swaps, and animates between the snapshots using CSS, with no JavaScript required.
Cross-document view transitions ship by default in every major Chromium release and in WebKit, with Firefox still working on its implementation. Global support sits near 85% of tracked browser usage.
Chrome supports cross-document view transitions from Chrome 126 on Windows, macOS, Linux, ChromeOS, and Android. Chrome 1 to 125 ignore the @view-transition at-rule, do not fire pageswap or pagereveal, and load the next page without an animation.
Edge supports cross-document view transitions from Edge 126 on Windows, macOS, and Linux. Edge picks up the feature from the same Chromium 126 milestone as Chrome, and Edge 12 to 125, including the legacy non-Chromium versions, do not support it.
Firefox does not yet support cross-document view transitions in a stable, on-by-default release. Recent Nightly builds expose partial support behind a flag, and a page that uses @view-transition on Firefox today falls back to a normal navigation with no animation.
Safari supports cross-document view transitions from Safari 18.2 on macOS and from Safari on iOS 18.2 on iPhone and iPad. Safari 1 to 18.1 on macOS, and Safari on iOS 3.2 to 18.1, ignore the @view-transition at-rule and skip the pageswap and pagereveal events.
Opera supports cross-document view transitions from Opera 112 on Windows, macOS, and Linux. Opera tracks the Chromium 126 milestone, and Opera 9 to 111 do not parse the @view-transition at-rule.
Samsung Internet does not yet ship cross-document view transitions in a stable release. Builds 4 through 29 ignore the @view-transition at-rule, and Samsung users see a normal navigation until Samsung Internet rebases on a Chromium milestone that includes the feature.
Android Browser supports cross-document view transitions from Android Browser 147 on. Older Android Browser builds, including the 4.4.4 stock browser and every WebView before the 126 milestone, do not parse @view-transition.
Internet Explorer never supported cross-document view transitions. IE 5.5 through IE 11 do not parse @view-transition or fire the pageswap and pagereveal events, and Microsoft has retired Internet Explorer, so move IE-bound work to Chromium-based Edge.
Note: Cross-document view transitions break across Firefox, Samsung Internet, and older Safari builds. Test the @view-transition at-rule on real browsers and OS with TestMu AI. Try TestMu AI free!
A same-origin link click on a page that opted in with @view-transition runs through a five-stage pipeline. The browser drives every stage; the page only declares names and timing in CSS.
Two CSS lines on each page are enough to opt in. The trigger is the navigation itself, so no JavaScript call is required.
A minimal opt-in plus a custom slide animation looks like the snippet below, applied identically on both pages.
/* Opt the document in to same-origin cross-document transitions. */
@view-transition {
navigation: auto;
}
/* Pair a hero image across the two pages. */
.hero-image {
view-transition-name: hero;
}
/* Slide the old page out, slide the new page in. */
::view-transition-old(root) {
animation: 240ms ease-out both slide-out;
}
::view-transition-new(root) {
animation: 240ms ease-out both slide-in;
}
@keyframes slide-out {
to { transform: translateX(-24px); opacity: 0; }
}
@keyframes slide-in {
from { transform: translateX(24px); opacity: 0; }
}If the animation does not play, the navigation is probably cross-origin or the destination page is missing the @view-transition at-rule. Both documents must opt in.
The feature unlocks SPA-style polish for traditional multi-page apps without rewriting a stack onto a client-side router. The patterns below are the highest-value wins for content sites, ecommerce, and documentation.
The API is opt-in and degrades cleanly, but a handful of cross-engine quirks still bite real projects. The common pain points cover Firefox, cross-origin navigation, render-blocking timing, and the back/forward cache.
In my experience, the silent killer is the same-origin rule on subdomain-heavy stacks. A morph that runs perfectly in local dev on localhost stops firing the moment staging splits the marketing site and the app onto two subdomains, and the bug looks like a missing CSS file. Always test the navigation between the actual production hosts before sign-off.
All cross-document view transitions version numbers and platform notes in this guide come from these primary sources:
Did you find this page helpful?
More Related Hubs
TestMu AI forEnterprise
Get access to solutions built on Enterprise
grade security, privacy, & compliance