この記事の対象: ブラウザネイティブのページ遷移アニメーションに興味があるフロントエンドエンジニア
読了時間: 約5分
ページ遷移時にフワッとフェードしたり、要素がスライドして入れ替わったり——これまでJavaScriptライブラリに頼っていたページ遷移アニメーションが、ブラウザネイティブのAPIで実現できるようになりました。
View Transitions APIは、少量のCSSとJavaScriptで美しいページ遷移を実装できる新しいAPI です。
View Transitions APIとは
View Transitions APIは、DOM の状態変化をスナップショットとして取得し、自動的にクロスフェードするブラウザネイティブの仕組みです。
SPAでのビュー切り替えだけでなく、MPA(通常のページ遷移)にも対応しており、特別なフレームワークなしでページ遷移アニメーションを実装できます。
ブラウザ対応状況(2026年時点)
- Chrome / Edge: 完全対応(SPA + MPA)
- Safari: 対応(Safari 18〜)
- Firefox: 対応(Firefox 130〜)
2026年時点で主要ブラウザすべてが対応しており、実務での使用が現実的になっています。
基本の使い方
document.startViewTransition()(SPA向け)
// ボタンクリックでビュー切り替え
document.querySelector('.nav-link').addEventListener('click', async (e) => {
e.preventDefault();
// View Transition API に対応しているか確認
if (!document.startViewTransition) {
updateDOM(); // 非対応の場合は通常の更新
return;
}
const transition = document.startViewTransition(() => {
updateDOM(); // DOM を更新する関数
});
await transition.finished;
});
function updateDOM() {
// ページの内容を更新する処理
document.querySelector('main').innerHTML = newContent;
}
CSSの::view-transition疑似要素
デフォルトではクロスフェードが適用されますが、CSSでカスタマイズできます。
/* 遷移全体のアニメーション */
::view-transition-old(root) {
animation: fade-out 0.3s ease;
}
::view-transition-new(root) {
animation: fade-in 0.3s ease;
}
@keyframes fade-out {
from { opacity: 1; }
to { opacity: 0; }
}
@keyframes fade-in {
from { opacity: 0; }
to { opacity: 1; }
}
要素ごとの遷移名指定
特定の要素にview-transition-nameを指定すると、その要素だけ個別のアニメーションを適用できます。
.hero-image {
view-transition-name: hero;
}
/* ヒーロー画像は拡大しながら遷移 */
::view-transition-old(hero) {
animation: scale-down 0.4s ease;
}
::view-transition-new(hero) {
animation: scale-up 0.4s ease;
}
MPA(マルチページ)での使い方
通常のHTML間のページ遷移にもView Transitionsを適用できます。
/* 遷移元・遷移先の両ページのCSSに記載 */
@view-transition {
navigation: auto;
}
/* 遷移アニメーションのカスタマイズ */
::view-transition-old(root) {
animation: slide-out 0.3s ease;
}
::view-transition-new(root) {
animation: slide-in 0.3s ease;
}
@keyframes slide-out {
to { transform: translateX(-100%); }
}
@keyframes slide-in {
from { transform: translateX(100%); }
}
MPAでの使用は@view-transition { navigation: auto; }をCSSに追加するだけで有効になります。
実践例
フェード遷移
最もシンプルで使いやすい遷移。ページ全体がフェードアウト→フェードインで切り替わります。
::view-transition-old(root) {
animation: 0.25s ease both fade-out;
}
::view-transition-new(root) {
animation: 0.25s ease both fade-in;
}
スライド遷移
ページが横にスライドして入れ替わる遷移。ニュースサイトやギャラリーに適しています。
GSAPやBarba.jsとの比較
| View Transitions API | GSAP + Barba.js | |
|---|---|---|
| 依存ライブラリ | なし | GSAP + Barba.js |
| 学習コスト | 低い | 中〜高 |
| カスタマイズ性 | 中程度 | 非常に高い |
| MPA対応 | ネイティブ | Barba.jsが必要 |
| ブラウザ対応 | 主要ブラウザ対応 | 全ブラウザ |
| ファイルサイズ | 0KB | 約50KB |
シンプルな遷移ならView Transitions API、複雑なアニメーション制御にはGSAPが適しています。GSAPの基本は「GSAP入門ガイド」をご覧ください。
まとめ
View Transitions APIのポイントをまとめます。
- ブラウザネイティブのページ遷移アニメーション API
- SPA/MPA両方に対応
- CSSの疑似要素でアニメーションをカスタマイズ
view-transition-nameで要素ごとの個別遷移が可能- シンプルな遷移には最適、複雑な演出にはGSAPを検討
