本文へスキップ

ページ遷移カーテン

リンクを押すと幕が下から閉じ、閉じきった瞬間に内容を差し替えて上へ開く。3ページ分の擬似ルーティングで、遷移中の連打も最後の行き先だけを採用する。

プレビュー

クリック

操作クリック/タップで動きます。

仕様書

向く場面
  • 世界観を切り替える作品サイトのページ遷移
  • SPA で内容差し替えの瞬間を隠したいとき
  • 行き先のアクセント色を先に見せたい導線
避ける場面
  • 業務アプリの頻繁な画面移動(毎回 0.7 秒待つ)
  • 同一ページ内のタブ切替
構成要素
  • ナビボタン
  • URL 表示
  • ページ内容
  • 遷移の幕
持っている状態
  • 通常
  • フォーカス
  • 押下中
キーボード

Tab でナビの3ボタンへ、Enter/Space で遷移。遷移中の再押下は最後の行き先を採用する

支援技術

nav に aria-label、幕は aria-hidden。現在ページは色+aria-current=page。内容は textContent で差し替え、読み上げ順は不変。reduced-motion では幕を出さず即時に差し替え

動き

閉じる 320ms ease-in(.7,0,.84,0)・開く 420ms ease-out(.16,1,.3,1)。閉じきった1フレームで差し替え、勢いよく覆い静かに現す

デザインの要点

  • 閉じる幕は ease-in(加速)、開く幕は ease-out(減速)。「勢いよく覆って、静かに現れる」順が自然に見える
  • 内容の差し替えは幕が完全に閉じた 1 フレームで行う。差し替えの瞬間が見えると演出の意味が無くなる
  • 遷移中の再クリックは無視せず「最後の行き先」を覚えて幕が閉じた時に採用する。無視すると押せていない不安を作る
  • 幕の色はページのアクセント色にすると、開いた先の世界観が先に伝わる。黒一色は重い印象になる

コード(コピーして使えます)

<div class="pt-app">
  <nav class="pt-nav" aria-label="ページ">
    <button class="pt-link pt-active" type="button" data-route="home" aria-current="page">ホーム</button>
    <button class="pt-link" type="button" data-route="works">制作事例</button>
    <button class="pt-link" type="button" data-route="contact">お問い合わせ</button>
  </nav>
  <div class="pt-stage">
    <div class="pt-url" id="ptUrl">/</div>
    <div class="pt-page" id="ptPage" data-route="home">
      <p class="pt-kicker">ミナト工房</p>
      <h2 class="pt-title">木の道具を、毎日の手に。</h2>
      <p class="pt-text">横浜の小さな工房で、椅子とカトラリーを作っています。</p>
    </div>
    <div class="pt-curtain" id="ptCurtain" aria-hidden="true"></div>
  </div>
</div>

タグ

同じカテゴリ「モーション・トランジション」のほかのパーツ

関連パーツ