transition
cover transition / push page transition
次のページが下から立ち上がって現在のページに覆いかぶさり、覆われた側は奥へ引きながら暗くなるページ遷移。カーテンのような中間の幕を挟まず「ページが層として積まれる」ので、前の画面がまだそこにある感じ=戻れる感じが残る。
02 — Prompt template
03 — Params
duration(覆い切るまでの時間 s) — 範囲 0.4〜1.4 / 初期 0.9
0.8〜1.0sが重厚で品がある。0.5sを切ると層が積まれた実感が出ず、ただの切り替えに見える。rise(新ページの立ち上がり距離 %) — 範囲 8〜40 / 初期 24
画面高に対する開始位置のオフセット。20〜25%が目安。大きいほど「下から来た」が強調される。scaleFrom(新ページの初期スケール) — 範囲 0.7〜1 / 初期 0.8
小さく始めて等倍へ寄せると奥から手前に出てくる。1.0にすると平面的なスライドになる。recede(旧ページの後退スケール) — 範囲 1〜1.3 / 初期 1.12
覆われる側を1.1前後まで拡大すると奥へ下がって見える。1.2を超えると画の縁が欠けて気になる。
04 — Vocab
cover / push — 次の画面が現在の画面の上に重なって進む遷移の呼び名。前の画面を捨てるcrossfadeと違い、層として残す。
clip-path: inset() — 要素を上下左右から矩形で切り取る。inset(100% 0 0)は上辺から100%=完全に隠れた状態で、0へ動かすと下から迫り上がって見える。
スタッキングコンテキスト — 重なり順が決まる入れ物。transformやopacityを与えた要素は独自の文脈を作るので、z-indexが効かないときはまずここを疑う。
イージングの共有 — 同時に動く複数レイヤーに同じ曲線を使うこと。片方だけeaseにすると、2枚が別々のものとして知覚される。
View Transitions API — ブラウザ標準の遷移機構。::view-transition-old / -new に対してこの動きをCSSだけで書けるが、対応外ブラウザ用の即差し替えは自前で用意する。
05 — NG → OK examples
NG
言い方: 「「ページ遷移で次のページが下から出てくるようにして」」
なぜNG: 「下から出てくる」だけだと新ページを translateY で滑らせるだけの実装が返り、旧ページが動かないので層が積まれた感じが出ない。覆われる側の後退と減光まで指定しないとこの遷移にはならない。
OK
言い方: 「「cover transitionを実装。新ページは translateY(24%) scale(0.8) + clip-path: inset(100% 0 0) から transform:none / inset(0) へ0.9s。旧ページは同じ0.9s・同じイージングで translateY(-6%) scale(1.12) / opacity 0.48 へ。transformとclip-pathのみでリフロー禁止、reduced-motion時は即差し替え」」
なぜOK: 2枚それぞれの開始・終了状態と、両者が同じ時間・同じイージングを共有することまで指定してある。この遷移の質はほぼ「2枚が揃って動くか」で決まる。
