View Transitions API ジェネレーター

トランジションタイプを選び、duration スライダーを動かし、document.startViewTransition() を実際に発動してプレビュー。本番投入できる ::view-transition-* CSS をコピー可能。

このツールについて

CSS View Transitions API は、DOM の2つのスナップショット間 をブラウザネイティブに補間できる初めての仕組みです。仮想 DOM の diff ライブラリも、FLIP ヘルパーも、手書きの requestAnimationFrame 振り付けも不要です。document.startViewTransition(callback) で DOM 操作をラップすると、ブラウザは「変更前」のスクリーンショットを撮影 → コールバックを実行 → 「変更後」のスクリーンショットを撮影 → ::view-transition-old(...)::view-transition-new(...) という擬似要素の中でクロスフェードします。このジェネレーターは、その効果を実現するための CSS と JavaScript をそのまま出力します。

トランジションのスタイルを cross-fadeslidescaleカスタム keyframes から選ぶと、プレイグラウンドが3つの要素をリアルタイム生成します。(1) 特定の要素を View Transitions に参加させる view-transition-name 宣言、(2) 非デフォルトのアニメーションを選んだ場合の @keyframes ブロック、(3) duration と easing をスナップショットに紐付ける ::view-transition-old::view-transition-new 擬似要素ルールです。duration スライダーは 200ms(俊敏な UI フィードバック)から 2000ms(映画的)まで、easing ドロップダウンには Material 標準カーブ、スプリングのオーバーシュート、デザインシステムにそのまま投入できる滑らかな ease-out が含まれます。

「Try Transition」ボタンはシミュレーションではなく、実際にライブデモカードに対して document.startViewTransition() を呼び出します。ユーザーが見るのと同じ結果がそのまま表示されます。サポートバナーは 'startViewTransition' in document で Chrome/Edge 111 以降・Safari 18 以降・Firefox(現時点ではフラグ越し)を検出し、フォールバックパスにいる場合は警告します。

カスタム cubic-bezier カーブを設計してから easing ドロップダウンに貼り付ける場合はCSS Easing Editor、トランジションする要素が親の幅に応じて変化する場合はContainer Query Builder、「変更前/変更後」のグラデーション中間色を補間したい場合はcolor-mix ジェネレーター と組み合わせて使うのがおすすめです。同じブラウザ検出パターンを採用した姉妹CSSツールにはtext-wrap プレイグラウンド があります。

すべての処理はクライアントサイドで完結します。トランジション定義・名前・生成コードがブラウザの外に出ることは一切なく、一度読み込めばオフラインでも動作します。未公開のプロダクトUIに対しても安心して使えます。

使い方

  1. Transition type ドロップダウンから cross-fade(ブラウザ標準のデフォルト)・slide・scale・カスタム keyframes を選びます。
  2. Duration スライダーを 200ms〜2000ms の範囲で動かします。UI のマイクロインタラクションは 200〜400ms、モーダル開閉は 300〜500ms、フルページトランジションは 500〜800ms が目安です。
  3. Easing function を選びます。ease がデフォルト、cubic-bezier(0.4, 0, 0.2, 1) は Material Design に一致、cubic-bezier(0.34, 1.56, 0.64, 1) はオーバーシュートのある遊び心のあるカーブです。
  4. view-transition-name 識別子を編集します。スナップショット内で一意である必要があり、英数字以外は自動的に除去されます。
  5. Try Transition ボタン(または Ctrl+Enter)をクリックして、デモカードに対して document.startViewTransition() を実際に発動し、生成 CSS の動作を確認します。
  6. Copy CSS ボタン(または Ctrl+Shift+C)で生成スタイルシートをコピー、続けて Copy JSstartViewTransition ラッパーをコピーします。
  7. CSS をグローバルスタイルシートに貼り付け、JavaScript ヘルパーを任意の DOM 操作(クラス切り替え、ルート遷移、React 再レンダリングなど)でラップすればアニメーション化されます。

代表的なユースケース

すべての 15 件を見る →

よくある質問

View Transitions API とは何ですか?

View Transitions API は、低レベルなアニメーションコードを書かずに DOM の2つの状態間を補間できるブラウザ機能です。document.startViewTransition(callback) を呼ぶと、ブラウザがページのスクリーンショットを撮影 → コールバック(DOM 操作)を実行 → 2枚目のスクリーンショットを撮影 → ::view-transition-old() と ::view-transition-new() の擬似要素内でクロスフェードします。@keyframes でクロスフェードを上書きすることで、スライド・スケール・共通要素トランジションも実現できます。Chrome 111(2023年3月)、Safari 18(2024年9月)でリリースされ、Firefox は2026年初頭時点でフラグ越し対応です。

View Transitions API はどのブラウザでサポートされていますか?

同一ドキュメントトランジション(このジェネレーターが生成する種類)は、Chrome 111+・Edge 111+・Opera 97+・Safari 18+ で動作します。Firefox は layout.css.view-transitions.enabled プリファレンスでフラグ越し対応していますが、デフォルトでは無効です。クロスドキュメントトランジション(MPA ナビゲーション間)は新しめで、Chrome 126+・Safari 18+ で対応しています。常に `if ('startViewTransition' in document)` でラップして、未対応ブラウザでは即時 DOM 切り替えにフォールバックさせてください。ジェネレーターのバナーはまさにこの検出を使っています。

SPA と MPA の View Transitions の違いは?

SPA(シングルページアプリケーション)トランジションは document.startViewTransition(callback) という JavaScript API を使います。React/Vue/Svelte のルートハンドラ内や任意のステート変更箇所で呼び出します。MPA(マルチページアプリケーション)トランジションは CSS のみで、ソース側と遷移先の両ページに @view-transition { navigation: auto; } を追加するだけで、同一オリジンのナビゲーションをブラウザが自動的にアニメーション化します。SPA トランジションはより柔軟(ナビゲーション以外のステート変更にも使える)ですが JavaScript が必要で、MPA トランジションは JS ゼロですが同一オリジン内のフルナビゲーションでしか発火しません。

startViewTransition() の最小限の例を見せてください。

最もシンプルな例: `if (document.startViewTransition) { document.startViewTransition(() => { document.body.classList.toggle('dark'); }); } else { document.body.classList.toggle('dark'); }` です。else ブランチは Firefox や旧ブラウザのフォールバックで、アニメーションなしで操作だけ実行します。返却された Promise をチェーンすることもできます: `const t = document.startViewTransition(updateDom); await t.ready; // アニメーション開始; await t.finished; // 終了` 。ready Promise は、スナップショット擬似要素に Web Animations API のチューニングを後乗せしたいときに便利です。

view-transition-name の一意性ルールはどう機能しますか?

各 view-transition-name は、単一のページスナップショット内の表示中要素間で一意である必要があります。document.startViewTransition() 実行時に同じ名前の要素が2つあると、トランジション全体がスキップされ警告がログに出ます。つまりリスト内の全カードに view-transition-name: card を付けることはできず、view-transition-name: card-${id} のようにアイテムごとに固有の名前を生成する必要があります。ページやルート間の共通要素トランジションでは、ソースと遷移先の両方の要素に同じ名前を付けると、ブラウザがそれらをモーフィングします。どちらか片方に名前がない場合、その要素はクロスフェードグループにフォールバックします。

View Transitions が未対応の場合、どうグレースフルにフォールバックしますか?

常に `if (document.startViewTransition)` で機能検出し、else ブランチでアニメーションなしで DOM 操作を実行してください。MPA スタイルのトランジションでは、@view-transition ルールは理解できないブラウザでは静かに無視されます。視覚的なフォールバック(Firefox でも何らかのアニメーションを残したい場合)として、要素自体に CSS transition をレイヤーする方法があります。View Transitions API が動作するときはスナップショットがライブ要素を置き換えるため CSS transition は二重発火しません。動作しないときは CSS transition がそのまま動きます。この「プログレッシブエンハンスメント2層構造」が最も堅牢な戦略です。

データは安全ですか?

はい。このジェネレーターは純粋な CSS、View Transitions API、React のステートだけでブラウザ内で完結します。トランジション名・duration・easing カーブ・生成コードがサーバーに送信されることは一切ありません。サポートバナーはローカルの `'startViewTransition' in document` チェックを使っており、外部の機能検出サービスは利用しません。入力に紐づくアナリティクスもなく、一度読み込めばオフラインでも動作するため、社内ルート名・デザインシステムのクラス名・未公開コンポーネントの識別子を入力しても痕跡を残しません。

関連ツール