hover
text swap hover / button text roll
ボタン内の文字が上へ抜け、同じ文字が下から入ってくる入れ替え演出。overflow: clipの枠に同一テキストを2段重ねて列ごと動かすだけの、コスパ最強のボタンマイクロインタラクション。
02 — Prompt template
03 — Params
duration(入れ替わりの時間 s) — 範囲 0.15〜0.8 / 初期 0.35
0.25〜0.4sがキビキビして見える。0.6s超はボタンとしてはもたつく。direction(抜けていく方向) — 選択: up / down(初期: up)
文字が抜けていく方向。upが定番。「戻る」系のナビにはdownも合う。
04 — Vocab
overflow: clip — hiddenと違いスクロールコンテナを作らない切り抜き。position: stickyを殺さないので基本こちらを使う。
2段構造 — 同じテキストを縦に2枚並べ、列ごと1行ぶん動かす構造。入れ替わって見えるが実体はただの平行移動。
translateY(-100%) — 要素自身の高さを基準に1行ぶん動かす指定。pxで書くとフォントサイズ変更で入れ替わりがズレる。
line-height固定 — 枠の高さと各行の高さを一致させること。ここがズレると入れ替わりの瞬間に文字が欠けたり隙間が出る。
05 — NG → OK examples
NG
言い方: 「「ホバーでボタンの文字が入れ替わるようにして」」
なぜNG: opacityのクロスフェードや、文字がその場で差し替わるだけの実装が返ってくる。「同じ文字が2枚あって列ごと平行移動する」構造は言わないと伝わらない。
OK
言い方: 「「text slide swapを実装。overflow: clipの枠+同一テキスト2段の列をtranslateY(-100%)、0.35s cubic-bezier(0.22,1,0.36,1)、leaveで戻す。移動量は%指定」」
なぜOK: 構造(clip枠+2段の列)・移動量の単位・数値・イージングまで指定。「%指定」の一言でフォントサイズを変えても崩れない実装になる。
