アニメーション
UX を高める機能的なアニメーションの考え方とインタラクションの規約を定める
アニメーションは、見た目を飾るためではなく、利用者の操作を助けるために使う。手応えを返し、変化のつながりを示し、視線を導く。目的を持たない動きは、注意をそらし、待ち時間を生むため避ける。ここでは、いつ・なぜ動かすかという考え方と、本チームで守る具体規約を正本として定める。
hover や focus をいつ出すかはアフォーダンスが正本である。本ページではそれを再掲せず、動きそのものに絞る。
前提知識
規約を述べる前に、アニメーションを支える基本概念を最小限おさえる。
機能的アニメーションと装飾的アニメーション
UI のアニメーションには、目的を持つ機能的なものと、目を引くための装飾的なものがある。本チームで使うのは前者だけである。機能的アニメーションは、次のいずれかを果たす。
- フィードバック — 操作が受け付けられたことを、その場で返す。
- 連続性 — 変化の前後をつなぎ、要素がどこから来てどこへ行ったかを示す。
- 方向づけ — 視線を次に見るべき場所へ導く。
これらに当てはまらない動きは、装飾的アニメーションとして避ける。利用者が動きそのものを意識して気づくほど目立つなら、過剰である。
マイクロインタラクション
マイクロインタラクションとは、ボタンを押す・トグルを切り替えるといった小さな操作に対する、ごく短い反応である。手応えを返し、操作が届いたことを伝える。UI を直感的に感じさせる土台であり、控えめで速いほどよい。
デュレーションとイージング
- デュレーション(継続時間)は、動きにかける時間である。短すぎると気づけず、長すぎると待たされる。
- イージングは、動きの速度変化である。一定速度の動きは機械的に見える。現実の物体のように、加速と減速を伴わせると自然になる。
移動距離が大きい動きほど時間を要し、小さい動きは短く済む、という関係がある。ただし本チームでは、後述のとおり Tailwind の組込みスケールに値を限定する。
設計方針
アニメーションは、次の方針に従って実装する。
目的のある動きへの限定
アニメーションは、フィードバック・連続性・方向づけのいずれかを果たすときだけ使う。装飾のためには使わない。動きを足す前に、それが利用者の理解や操作を助けるかを問う。助けないなら入れない。
控えめで速い動き
動きは控えめで速いほどよい。利用者は同じ動きを何度も目にするため、長い動きは毎回の待ち時間になる。瞬時の切り替えは避けつつ、意識されない程度の短さにとどめる。
レイアウトの維持
位置や大きさそのものではなく、transform と opacity で動きを表現する。width・height・margin・top などレイアウトに関わる property をアニメートすると、毎フレームの再レイアウトで動きが乱れ、負荷も高い。transform と opacity は再レイアウトを伴わず安価に扱える。
インタラクションの規約
- 状態変化(hover / focus / active)には短いトランジションを添える。既定は
transition-colors、継続時間はduration-150とする。瞬時の切り替えを避け、操作可能であることを穏やかに伝えるためである。状態をいつ出すかはアフォーダンスに従い、ここでは動きの付け方だけを定める。 - 出現と退場(ダイアログ・ドロップダウン・ツールチップなど)は
transformとopacityだけをアニメートする。継続時間は 150〜250ms、出現は ease-out を基本とし、Radix のdata-stateに対して付与する。 - 継続時間とイージングは Tailwind の組込みスケール(
duration-150/ease-outなど)に限定する。任意値は使わない。場当たりな値を避け、動きの一貫性を保つためである。
アクセシビリティ
動きは、一部の利用者にとって不快や体調不良の原因になる。前庭障害のある利用者には、スクロールやホバーで要素が動くと、めまいや吐き気を引き起こすことがある。
prefers-reduced-motionを尊重する。動きを減らす設定の利用者には、本質的でない動きを無効化する(WCAG 2.3.3)。これは各アプリのglobals.cssのグローバル設定で全コンポーネントに一括適用しており、個別コンポーネントでの対応は不要である。- 動きに意味を依存させない。動きが無効化されても情報が伝わるよう、動きはあくまで補助とする。状態や変化は、色・アイコン・ラベルでも伝わるようにする。
確認手段
実装後は各アプリの開発用ページ(museum なら /dev/components)と実画面で、次を確認する。
- 動きが目的(フィードバック・連続性・方向づけ)を果たし、装飾的でないこと。
- OS の「視差効果を減らす」設定を有効にした状態で、本質的でない動きが無効化されること。
関連項目
- アフォーダンス — hover や focus をいつ出すか、インタラクティブ状態のモデル