media

Scroll unroll / Unfurl animation / Parchment unroll

筒から引き出した紙が、巻いた芯ごと下へ転がりながら開いて中身を見せるリビール。仕組みは「窓と中の紙を逆向きに動かす切り開き」と芯の translateY を同じ時間・同じイージングで走らせるだけで、「巻物らしさ」は開く縁に乗った芯の陰影と、先に飛ぶキャップの前振りで決まる。

筒から引き出した紙が、巻いた芯ごと下へ転がりながら開いて中身を見せるリビール。仕組みは「窓と中の紙を逆向きに動かす切り開き」と芯の translateY を同じ時間・同じイージングで走らせるだけで、「巻物らしさ」は開く縁に乗った芯の陰影と、先に飛ぶキャップの前振りで決まる。

01Demo触って、数値を決める

Now今の値duration 1.10lead 0.60rollSize 16
1.10

0.9〜1.4sが目安。出典は1.1s。0.7sを切ると芯が「転がる」より「落ちる」に見え、2sを超えると証書の授与のような儀式感が強くなる。

0.60

押してから紙が動き出すまで。この間にキャップが lead×0.4s 遅れて0.5sで外れる。0.4〜0.8sで「筒を開けてから引き出す」順序が伝わる。0だとキャップと紙が同時に動いて前振りが消える。

16

開く縁に乗る巻いた紙の太さ。紙の幅の3%前後(幅500pxなら14〜18px)が自然。細すぎると縁に引いた線にしか見えず、clip-pathのリビールと区別がつかない。

02Prompt数値はスライダーと連動

prompt.md
証書・地図・招待状などの紙ものの表示に scroll unroll(巻物がほどける)を実装してください。 - きっかけ: 「Unroll」ボタンか、巻かれた紙の部分をクリック/タップすると1回ほどける(本番ではモーダルを開いた瞬間に1回自動で)。開いた後にもう一度押すと同じ時間・同じイージングで巻き上げて元に戻す。動いている間の操作は無視する - 構成: 上に筒(横長の棒)、その右端にキャップ、筒の下に紙(画像)、紙の上に重ねて芯(巻いた紙の太さ 16px の横棒)。芯は紙より左右に1%ずつはみ出させ、上下方向のグラデーション(明→暗)で円柱の陰影を付ける - 切り開き: 紙の置き場(overflow: hidden)の中に同寸の窓(overflow: hidden)を置き、その中に紙を入れる。窓を translateY(-100%) → translateY(0)、紙を translateY(100%) → translateY(0) と逆向きに同量動かすと、画面上の紙は止まったまま上端から下へ切り開かれる - 芯は紙と同じ大きさの外枠に入れて translateY(0) → translateY(100%) で動かし、芯の中心が常に開いた縁に乗るようにする(芯自体は translateY(-50%) で縁に中心を合わせる) - 窓・紙・芯の3つは必ず同じ 1.10s・同じ cubic-bezier(0.3, 0.6, 0.3, 1)・同じ遅延 0.60s で走らせる。どれかがずれると、芯が紙から離れて「線が下りてくるだけ」に見える - 切り開きを clip-path: inset() のアニメーションで作らない。clip-path はメインスレッドで描かれ、コンポジタで動く芯の transform と負荷時にずれて、芯が縁より先に下りる - 前振り: キャップは押した 0.60×0.4 s 後から0.5sの cubic-bezier(0.5, 0, 0.7, 0.4) で外れる(40%で右上へ translate(12px, −8px) rotate(20deg)、100%で右下へ translate(36px, 30px) rotate(70deg) opacity 0)。巻き上げが終わったら0.25sのフェードで元の位置に戻す - 動かすのは transform と opacity だけ(top / height / clip-path はアニメーションさせない) - prefers-reduced-motion 時はキャップも芯も動かさず、紙を開いた状態/巻いた状態に即座に切り替える

03 Vocab この動きを構成する語彙

  • unroll / unfurl — 巻いたものを広げること。unfurlは旗や帆が風で広がるニュアンスも含む。UIでは証書・地図・巻物を開く演出の呼び名として通じる。

  • 芯(roller / rod) — 開く縁に乗っている、巻いた紙の太さぶんの棒。これがあるだけで、ただのマスクの切り開きが「紙が転がってほどける」動きに読み替わる。

  • 同期(lockstep) — 複数の要素を同じ時間・同じイージング・同じ遅延で動かし、互いの位置関係を保つこと。値が同じでも、片方が clip-path(メインスレッド)・片方が transform(コンポジタ)だと描かれるタイミングがずれるので、同じ種類のプロパティで揃える。

  • 逆向きの入れ子(counter-translate) — overflow: hidden の窓を動かし、中身を同じ量だけ逆へ動かす手法。中身は画面上で止まったまま、見える範囲だけが広がる。clip-path を使わずに transform だけで切り開ける。

  • 前振り(anticipation) — 本番の動きの直前に置く小さな予告の動き。ここではキャップが先に外れて飛ぶことで、「これから中身が出てくる」と目を準備させる。

  • cubic-bezier(0.3, 0.6, 0.3, 1) — 出だしがやや速く、終端でゆっくり止まるイーズアウト寄りの曲線。重みのある紙が自重で転がり、最後にふわりと止まる印象になる。

04 NG → OK 伝え方の差分

NG

言い方: 「卒業証書がくるくるっと開く感じで出して」

なぜNG: 何が転がるのかが決まらない。紙をscaleYで縦に伸ばして文字ごと潰れる実装や、ただ上から下へ clip-path で切り開くだけ(芯が無い)のリビールが返ってきがち。芯を付けても、切り開きを clip-path・芯を transform で動かすと描かれるスレッドが違い、芯が縁より先に下りて離れる。

OK

言い方: 「scroll unrollを実装。overflow:hiddenの窓をtranslateY(-100%→0)、中の紙を(100%→0)と逆に動かして切り開き、芯(16px・上下グラデ)は紙と同寸の外枠でtranslateY(0→100%)。3つとも1.1s cubic-bezier(0.3,0.6,0.3,1)・遅延0.6s。clip-pathは使わない。キャップは0.24sから0.5sで右下へ飛ばす。reduced-motionは即切替」

なぜOK: 切り開きと芯を同じ時間・同じイージング・同じ遅延で、しかも全部 transform で走らせる、という一番ずれやすい点を固定している。芯を「紙と同寸の外枠の translateY(100%)」で動かすので、紙の高さが変わっても縁から外れない。

動きの伝え方辞典

Motion dictionary

この辞典について

デザイナーとして「あの動き」を言葉で伝えられずに困ったのが、はじまりです。名前と数値のない動きに、名前と数値を付けています。毎朝ひとつずつ増えています。

編者
monaka design.(志藤 諒太)Webサイトのデザインをしています。動きの設計も込みで。
版
毎朝更新
写真
Unsplash(紙と活字の18枚)
© monaka design.motion-dict.framer.website

Create a free website with Framer, the website builder loved by startups, designers and agencies.