色の幕が横切って次の画面に替わる 画面の切り替えの動き

通称:ワイプトランジションWipe Transition

幕の向き

見本では、2.6秒おきに次のページへ自動で切り替えます。上のメニューを押すと、その場で切り替わります。上の灰色の帯は、ブラウザのアドレス欄に見立てたものです。

リンクを押すと、画面の端から色の幕が伸びて全体を覆い、覆っている間に中身が替わって、幕が反対の端へ抜けていきます。ページが替わったことをはっきり見せたいときの型です。

自分のサイトの中身で、この形を作らせる指示文です。最初の「サイトの情報」を書き換えてから渡します。今あるページを直させるときは、その HTML を貼ります。

この形で作る
# 動かすもの(ここを書き換える)
- 動かす要素:〈例:各セクションの見出しとカード、商品の写真〉
- 今あるページ:〈今のページに付けるなら、その HTML と CSS を貼る。新しく作るなら空ける〉

# 動きの呼び名
一般に「ワイプトランジション」(Wipe Transition)と呼ばれる動きです。

# 作ってほしい動き
Wipe Transition(色の幕が横切って次の画面に替わる)。リンクを押すと、画面の端から無地の幕が伸びて全体を覆い、覆っている間に中身を差し替え、幕が反対の端へ抜けていく。向きは左から右へ。

# 動き
- きっかけ:ナビのリンクを押したとき(中身を JavaScript で差し替えるサイト)
- 覆う:幕を transform: scale(向きに合わせて scaleX か scaleY)で 0 → 1。始まりの端を transform-origin にする。0.6秒の半分
- 差し替え:幕が覆いきってから中身を替える(覆う前に替えると、替わる瞬間が見える)
- 抜ける:transform-origin を反対の端に替えて 1 → 0。0.6秒の半分
- 速さの変わり方:cubic-bezier(0.65, 0, 0.35, 1)(ゆっくり始まりゆっくり終わる)
- 動かすのは幕の transform だけ。Web Animations(element.animate)の finished を待って次の段へ進む

# 付ける場所
- ヘッダーのナビで中身を差し替えるサイト全体
- 幕の色は1色で、サイトの濃い色にする

# 守ってほしいこと
- 幕は position: fixed・inset: 0 で、z-index を高くする。pointer-events: none と aria-hidden="true"
- 切り替えの途中で別のリンクが押されたら、いまの切り替えが終わってから移る(最後に押したものだけ)。幕を出したままにしない
- 切り替えたら、新しい見出し(h2 に tabindex="-1")へフォーカスを移し、いまのページの印(aria-current="page")を付け替える
- 動きを控える設定では幕を出さず、すぐ中身を替える

# 軽さと配慮(どの動きでも守る)
- 動かすのは transform と opacity だけにする(top・left・width・height・margin は動かさない)
- 動きを控える設定(prefers-reduced-motion: reduce)のときは動かさず、最後の状態で表示する
- 画面に入ったかは IntersectionObserver で見る。scroll イベントで毎回位置を測らない
- JavaScript が動かない環境でも中身が見えるようにする(最初に隠す指定は、JavaScript が付ける class の下に書く)
- will-change を付けるなら動いている間だけにする

# 出力
- 足す CSS と JavaScript を分けて出す。ライブラリは使わない
- 時間・距離・速さの変わり方は CSS 変数にまとめ、あとから変えやすくする
- 今あるページを渡したときは、HTML に足す class や属性だけを書き、ほかの見た目は変えない

ページを移るときや、一覧から詳しいページへ入るときの画面の切り替えを8種類の型に分け、AIへの指示文・動く見本・コードを載せています。見本の下で時間や向きを変えると、指示文とコードも同じものに変わります。

画面の切り替えの動きはどの型を選ぶか

まず、画面を幕で覆って切り替えるか、画面そのものを動かすかで分けます。幕の型はページが替わったことをはっきり見せられますが、移るたびに通るので短くします。画面ごと動く型は、薄れる・横へ動く・奥へ入るといった動きで、どこへ移ったのかを伝えます。迷ったら、どのサイトにも合わせやすいフェードから始めます。

こんなとき 向いている動き 近い型(ほかのページ)
ページが替わったことを、ブランドの色ではっきり見せたい色の幕が横切る(ワイプトランジション)ワイプリビール
作品を1ページずつ見せるサイトで、区切りを強めたい縦の帯が順に閉じて開く(シャッタートランジション)カーテンリビール
特設サイトで、最初の1回だけロゴを印象づけたい幕の中央にロゴが出る(ロゴトランジション)ローディング画面
押した場所と、次の画面をつなげて見せたい押した位置から円が広がる(サークルトランジション)—
落ち着いた印象のまま、どのページにも付けたい薄れて次が浮かぶ(フェードトランジション)—
手順のある画面で、進んだのか戻ったのかを伝えたい「次へ」で右から、「戻る」で左から(スライドトランジション)—
一覧から詳しいページへ、階層を降りる感じを出したい押した項目の奥へ入る(ズームトランジション)—
写真で選ぶ一覧で、どれを開いたかを伝えたい写真がつながって広がる(共有要素トランジション)—

ワイプリビールやカーテンリビールは、見出しや写真などの要素1つを幕で隠してから見せる動きで、画面ごとは切り替えません。ローディング画面は読み込みを待つ間を幕で覆う型で、ロゴトランジションのように読み込みと関係なく見せる演出とは別のものです。

どの型でも守ること

  1. 短くする。ページを移るたびに通る動きなので、0.3〜0.6秒くらいに収めます。ロゴを見せる型のように長くなるものは、使う場面を絞ります。
  2. 途中で押されても壊れないようにする。切り替えの途中で別のリンクが押されたら、いまの切り替えが終わってから移ります。幕や写しを出したまま止めないよう、終わりの片付けは必ず通る場所(finally)に書きます。
  3. 切り替えたら、フォーカスと印を移す。新しい見出し(tabindex="-1")へフォーカスを移し、ナビの aria-current="page" を付け替えます。読み上げでは、これでページが替わったことが伝わります。
  4. 動かすのは transform と opacity。幕は scale や translate で動かし、width や left を動かしません。円の clip-path は重ねた1枚だけにします。
  5. 動きを控える設定では、すぐ切り替える。幕も円も出さずに中身だけを替えます(見本の「動きを控える設定で見る」で確かめられます)。

よくある質問 (FAQ)

画面を切り替える前と後の絵をブラウザが撮って、つなぐ動きを付けてくれるしくみです。同じページの中で中身を差し替えるなら document.startViewTransition(更新する関数) を呼び、リンクでページごと移るサイトなら、両方のページの CSS に @view-transition { navigation: auto; } を書きます。対応していないブラウザでは、動きが付かずにそのまま切り替わるだけなので、付けても困ることはありません。

フェードと共有要素の型は、CSS だけで付けられます。両方のページに @view-transition { navigation: auto; } と同じ view-transition-name を書くと、同じオリジンのページどうしを移るときに動きが付きます。幕や円の型は、中身を JavaScript で差し替えるサイト向けの書き方です。

0.3〜0.6秒くらいです。ページを移るたびに通るので、1回目は気持ちよく見えても、何度も移るうちに待たされている感じになります。幕で覆う型は、覆うまでと抜けるまでを合わせてこの長さに収めます。ロゴを見せる型は1秒を超えるので、最初の1回か、区切りの大きい移動だけにします。

いつ中身を替えるかと、途中で押されたときの扱い、切り替えたあとのフォーカスです。「ページ遷移にアニメーションを付けて」だけだと、幕が覆う前に中身が替わる作りや、途中で押すと幕が出たまま止まる作り、読み上げではページが替わったことが伝わらない作りになりがちです。ここの指示文は、それぞれを数字と要素名で書き、Wipe Transition や Shared Element Transition のような英語の一般名も添えています。