CSS View Transitions API完全解説!脱JSで実現するシームレスな画面遷移アニメーション

2026年9月22日火曜日

t f B! P L
もMPAも激変!View Transitions APIで極上のWebアニメーション体験を構築する方法

ネイティブアプリ(iOSやAndroid)を使っていて、「一覧画面のカード画像をタップすると、その画像が滑らかに拡大しながら詳細画面のヘッダー画像へと吸い付くように変化する」という心地よい画面遷移アニメーションを目にしたことはありませんか?

これまでのWebサイトで同様の演出を作ろうとすると、Framer MotionやGSAPなどの巨大なJavaScriptライブラリを組み込み、複雑な座標計算とDOM操作を行う必要がありました。さらに、通常のページ遷移(MPA: Multi Page Application)では画面が白くチラつくのを防ぐことすら困難でした。

この常識を一変させたWeb標準仕様が「View Transitions API」です。わずか1行のJavaScriptと数行のCSSを書くだけで、ブラウザが旧画面と新画面の差分を自動検知し、GPUアクセラレーションの効いた極上のアニメーションを自動生成してくれます。本記事ではその実装テクニックを徹底解説します。

この記事のポイント

  • View Transitions APIが旧画面・新画面を擬似要素として補間する内部メカニズムがわかる
  • view-transition-name を使って要素同士の「モーフィング(変形・移動)」を実装できる
  • SPAだけでなく通常のマルチページ(MPA)遷移への適用方法とブラウザ対応状況を把握できる

1. View Transitions APIの仕組み:ブラウザ内部で何が起きているのか?

View Transitions APIの基本は、document.startViewTransition() メソッドです。

このメソッドを呼ぶと、ブラウザは直ちに現在の画面のスクリーンショット(旧画面)をキャプチャし、コールバック関数内でDOMが更新された後、更新後の画面(新画面)をキャプチャします。そして、ルート要素の擬似要素ツリー(::view-transition)を生成し、2つのスナップショット間のクロスフェードや幾何学的変形を自動計算してくれます。

💬

「開発者はアニメーションの開始時と終了時の状態を指定するだけ。途中の面倒な補間計算はすべてブラウザがやってくれます。」

複雑なUIコンポーネントツリーや非同期ルーティングと組み合わせるフロントエンド開発では、型安全なコード設計を学ぶためにTypeScript関連書籍を手元に備えておくと、ステート管理の破綻を防げます。

2. 実践コード:要素同士を吸い付くようにモーフィングさせる

特定の要素(例:商品サムネイル画像)を遷移先の要素(例:商品詳細のメイン画像)とシームレスに連結したい場合、CSSで view-transition-name を指定します。

/* 一覧側のサムネイルと詳細側のヘッダーに同じ名称を付与 */

.product-card-thumbnail {
  view-transition-name: product-hero-image;
}

/* 遷移先ページまたは更新後の要素 */
.product-detail-hero {
  view-transition-name: product-hero-image;
}

/* JavaScriptでの更新トリガー */
function navigateToDetail() {
  document.startViewTransition(() => {
    renderDetailPageDOM();
  });
}

たったこれだけで、サムネイル画像が詳細ページの大きなヘッダー画像の位置・サイズへと滑らかに拡大移動しながら切り替わります。

ミリ秒単位のアニメーションイージングやフレーム落ち(ジャンク)を視覚的にチェックするには、高リフレッシュレートで表示できるコーディング・クリエイター向け4K 144Hz外部モニターを使うと、極めて滑らかな動きの検証が可能です。

3. MPA(通常リンク遷移)での @view-transition ルール

さらに革新的なのが、SPAフレームワーク(React/Vue等)を使っていない静的なHTMLサイトであっても、CSSに以下を1行書くだけでページ遷移がシームレスになる点です。

@view-transition {
  navigation: auto;
}
比較項目 従来のJSアニメーションライブラリ View Transitions API
バンドルサイズ追加 30KB 〜 100KB以上 0 KB(ブラウザ標準)
パフォーマンス メインスレッドJSに依存 Compositorスレッドで60/120fps維持
MPA(通常遷移)対応 不可(白画面を挟む) CSS 1行でネイティブ対応

💡 注意:view-transition-name の重複はエラーになる

同一ページ内に同じ view-transition-name を持つ要素が同時に2つ以上存在すると、ブラウザは遷移対象を特定できずトランジションがスキップされます。一覧リスト内の各アイテムには、IDを付与するなどしてユニークな名前を割り当てましょう。

長時間のUIデザインやCSSアニメーションの微調整作業では、手元を優しく照らして目の疲れを低減するBenQ等のモニター掛け式LEDライトバーが開発環境の強い味方になります。

まとめ

View Transitions APIは、「WebサイトとネイティブアプリのUI体験の壁」を完全に取り払うWeb標準の金字塔です。

ChromeやEdge、Safari(TP)など主要ブラウザでの対応も急速に進んでおり、Progressive Enhancement(対応ブラウザのみアニメーションし、非対応でも通常遷移する)としてノーリスクで導入できます。ぜひあなたのサイトやWebアプリに導入して、極上のUXを届けてみてください。

このブログを検索

このサイトはアフィリエイト広告(Amazonアソシエイト含む)を掲載しています。
Amazonのアソシエイトとして、「色即是空」な「空即是色」blogは適格販売により収入を得ています。