Skip to main content

CSS View Transitions

v1.0.0

Scaffold view-transition CSS for a simple route change — name, group, capture rules.

View Transition CSS + JS
/* Mark element for shared transitions */
.hero-image {
  view-transition-name: hero-image;
}

/* Only animate if motion is OK */
@media (prefers-reduced-motion: no-preference) {
  ::view-transition-old(hero-image) {
    animation: 400ms ease-in-out slide-out;
  }
  ::view-transition-new(hero-image) {
    animation: 400ms ease-in-out slide-in;
  }
  @keyframes slide-out { to { transform: translateX(-100%); opacity: 0; } }
  @keyframes slide-in { from { transform: translateX(100%); opacity: 0; } }
}

/* JavaScript: trigger transition */
document.startViewTransition(() => {
  // DOM update here — e.g. router navigation
  updateContent();
});

/* Browser support: Chrome 111+, Safari 18+, Firefox (behind flag) */