ページ遷移もCSSで?
View Transitions APIで実現する滑らかな画面切り替え

次世代WebCSS実装

ネイティブアプリでは当たり前の「滑らかなページ遷移」。これまでWebでは、SPAフレームワークや複雑なJavaScriptが必要でした。
しかし View Transitions API の登場により、CSSベースのエレガントなページ遷移がネイティブでサポートされるようになりました。

View Transitions APIとは

ページ間(または同一ページ内のDOM変更時)に、ブラウザが自動的に「古い状態」と「新しい状態」のスナップショットを撮り、その間をアニメーションで補間する仕組みです。

基本:同一ページ内の遷移

まずは同一ページ内でのDOM変更にフェードイン/フェードアウトを適用する基本パターン。下のデモでリスト項目をクリックすると、詳細ページにフェード遷移します。

Demo App
🎨 デザイン制作
💻 Web開発
📊 運用・改善

HTML
<div class="vt-wrap">
    <div class="vt-header">
        <span>Demo App</span>
        <button class="vt-back" id="vt-back" onclick="vtBack()">← 戻る</button>
    </div>
    <div class="vt-page" id="vt-list">
        <div class="vt-list-item" onclick="vtNavigate('🎨 デザイン制作','ブランドの世界観を形にする、オリジナルのWebデザインを制作します。')">🎨 デザイン制作</div>
        <div class="vt-list-item" onclick="vtNavigate('💻 Web開発','モダンな技術でパフォーマンスの高いサイトを構築します。')">💻 Web開発</div>
        <div class="vt-list-item" onclick="vtNavigate('📊 運用・改善','公開後のデータ分析と継続的な改善をサポートします。')">📊 運用・改善</div>
    </div>
    <div class="vt-detail" id="vt-detail">
        <p class="vt-detail__title" id="vt-detail-title"></p>
        <p class="vt-detail__text" id="vt-detail-text"></p>
    </div>
</div>
JavaScript
// View Transitions APIを使ったDOM切り替え
function navigate(newContent) {
    if (!document.startViewTransition) {
        // 非対応ブラウザ:即座に切り替え
        updateDOM(newContent);
        return;
    }

    // 対応ブラウザ:フェード遷移付きで切り替え
    document.startViewTransition(() => {
        updateDOM(newContent);
    });
}

CSSでアニメーションをカスタマイズ

デフォルトのフェードでは物足りない場合、CSSで遷移アニメーションを自由にカスタマイズできます。

CSS
/* ===== ベースのレイアウト(デザインに合わせて調整してください) ===== */
.vt-detail__text {
    /* 本体のスタイル */
}
.vt-header {
    /* 本体のスタイル */
}
.vt-detail {
    /* 本体のスタイル */
}
.vt-list-item {
    /* 本体のスタイル */
}
.vt-page {
    /* 本体のスタイル */
}
.vt-back {
    /* 本体のスタイル */
}
.vt-wrap {
    /* 本体のスタイル */
}
.vt-detail__title {
    /* 本体のスタイル */
}

/* ===== 動作のアニメーション ===== */
/* デフォルトのフェード遷移をカスタマイズ */
::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; transform: scale(1); }
    to { opacity: 0; transform: scale(0.95); }
}
@keyframes fade-in {
    from { opacity: 0; transform: scale(1.05); }
    to { opacity: 1; transform: scale(1); }
}

MPA(マルチページアプリ)での使い方

Chrome 126+では、通常のページ遷移(リンククリック)にもView Transitionsを適用できます。CSSとmeta要素を追加するだけです。

HTML
<!-- head内に追加するだけ -->
<meta name="view-transition" content="same-origin">
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%); opacity: 0; }
}
@keyframes slide-in {
    from { transform: translateX(100%); opacity: 0; }
}
💡 ポイント:特定の要素だけをアニメーションさせたい場合は、その要素に view-transition-name をつけます。例えば、ヘッダーは固定のまま、コンテンツ部分だけスライドさせることができます。

まとめ

💡 ツタワルの制作では:View Transitions APIなどの最新Web標準を積極的に活用し、ネイティブアプリに匹敵するユーザー体験をWebで実現しています。
川村 小百合

この記事の執筆者

川村 小百合 株式会社ツタワル 代表取締役

日本有数のテーマパークのWebデザインや、株式会社ポケモンのグラフィックデザイナーを経て、これまで200サイト以上のWEB制作や数多くのグラフィックデザインを経験。お客様の売上に直結する「デザインに強いWeb制作」をはじめ、販促POP制作から商品開発に至るまで、企画から実制作までを一気通貫でサポートしています。「社員クリエイターを1人雇うコストで、腕のあるプロへきめ細かく月極依頼ができる」体制を提供し、ビジネス成長の心強いパートナーとして企業の販促活動に伴走します。

この人に相談する

Contact

伝わるまで、何度でも。

あなたのブランドの「言葉」と「形」を、一緒に見つけませんか?
些細なご相談でも、まずはお気軽にお話ししましょう。