Newly available 条件付きOK。Chrome・Safari 18以降・Edgeで対応。Firefox は144から対応。

概要

ページ遷移やDOM更新時のアニメーションはこれまでJSライブラリに頼るしかなかった。View Transitions API を使うと、ブラウザが自動でスナップショットを撮り、CSSアニメーションでトランジションを行う。MPAでも使用可能。

対応ブラウザ

デスクトップ

Chrome 111+
Edge 111+
Safari 18+
Firefox 144+

モバイル

Chrome Android 111+
Safari iOS 18+
Firefox Android 144+

基本構文

CSS
document.startViewTransition(() => {
  updateDOMSomehow();
});

::view-transition-old(root) {
  animation: fade-out 0.3s ease;
}

::view-transition-new(root) {
  animation: fade-in 0.3s ease;
}

.hero-image {
  view-transition-name: hero;
}

実務での使いどころ

  • ページ遷移アニメーション

    MPAでもSPAでも、ページ間のシームレスなトランジションをCSSだけで定義できる。

  • 画像の共有要素トランジション

    一覧のサムネイルが詳細ページの大きな画像に滑らかに変形するHero Transition。

注意点

  • 複雑な DOM 変更と組み合わせると予期しない挙動が起きることがある。
  • prefers-reduced-motion に対応し、アニメーションを無効化できるようにすること。

フォールバック戦略

CSS
@media (prefers-reduced-motion: reduce) {
  ::view-transition-old(root),
  ::view-transition-new(root) {
    animation: none;
  }
}

アクセシビリティ

  • prefers-reduced-motion: reduce を必ずハンドリングし、動きを無効化できるようにする。
  • アニメーション中もコンテンツにアクセスできるようにする。