FRAMER

Framer Motion入門 — React アニメーションの定番ライブラリ

Framer Motion は React で宣言的にアニメーションを書けるライブラリです。<motion.div>whileHoveranimate などの props を渡すだけで、複雑なアニメーションが驚くほど簡潔に実装できます。本ガイドでは、Framer Motion の中核となる5つの機能を、Motion Lab の実例とともに解説します。

motion コンポーネントと initial / animate

Framer Motion の基本は motion. プレフィックス付きの要素です。<motion.div>initial(初期状態)と animate(目標状態)を渡すと、マウント時に自動で補間アニメーションが走ります。

: initial={{ opacity: 0, y: 24 }} animate={{ opacity: 1, y: 0 }} で「下からフェードイン」。transition で duration や ease を細かく制御できます。

実装デモ:Framer Fade Up

whileHover / whileTap — インタラクティブな状態

whileHover whileTap はホバー中・タップ中だけ適用される状態です。CSS の :hover に近いですが、type: 'spring' を指定すればバネ物理でぬるっと弾みます。

: whileHover={{ scale: 1.12 }} transition={{ type: 'spring', stiffness: 300 }}

実装デモ:Framer Spring Hover

variants で stagger(時間差表示)

variants は名前付きの状態セットです。親に staggerChildren を設定すると、子要素が少しずつ遅れて animate され、リストやグリッドの登場が一気に上質になります。

親の show.transition.staggerChildren = 0.12 と、子の hidden/show variant を組み合わせるのが定番パターン。

実装デモ:Framer Stagger List

AnimatePresence — 消える瞬間のアニメーション

React では条件付きレンダリングで要素が DOM から消えると、通常は瞬時に消えます。<AnimatePresence> で包むと exit プロップが効き、消える瞬間にもアニメーションを当てられます。

モーダル・トースト・タブ切替など「閉じる」動きが重要な UI で必須のテクニック。

実装デモ:Framer AnimatePresence

drag — ドラッグ操作

<motion.div drag> と書くだけで要素がドラッグ可能になります。dragConstraints で可動範囲、dragSnapToOrigin で離したら原点に戻る挙動を制御できます。

カード並べ替え・スワイプ UI・インタラクティブなヒーローに。

実装デモ:Framer Drag

FAQ

Framer Motion と CSS アニメーションはどちらを使う?
単純なホバーや状態変化は CSS で十分です。React アプリで状態に連動する複雑な動き・リストの stagger・exit アニメーションが必要になったら Framer Motion が圧倒的に楽になります。
Framer Motion は重い?
ツリーシェイクに対応しており、使った機能だけがバンドルされます。多用しなければ実用上の負荷は限定的です。気になる場合は LazyMotion で必要な機能だけ読み込めます。
React 以外でも使える?
Framer Motion は React 専用です。バニラ JS では Motion One(同系統の軽量ライブラリ)や GSAP が選択肢になります。
CSS だけで近い動きは作れる?
spring の弾みは cubic-bezier(.34,1.56,.64,1) のようなオーバーシュート ease で近似できます。Motion Lab の Framer 系エフェクトは、ライブデモをこの方式の CSS で再現しています。