Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
aiskillstore avatar

Framer Motion

  • 15 installs
  • 404 repo stars
  • Updated August 5, 2026
  • aiskillstore/marketplace

framer-motion is a Claude skill covering Framer Motion animation patterns for React, including motion components, variants, gestures, page transitions, and scroll animations.

About

This skill covers Framer Motion animations for React applications. It provides motion component usage, variants, gestures, page and list transitions, scroll-triggered animations, transition and easing options, reduced-motion handling, and reusable templates. A developer uses it when adding animations to React or Next.js interfaces.

  • Framer Motion animation patterns for React and Next.js applications
  • Covers motion components, variants, gestures, page transitions, and scroll animations
  • Includes reduced-motion handling and ready-to-use component templates

Framer Motion by the numbers

  • 15 all-time installs (skills.sh)
  • Ranked #1,610 of 2,245 Frontend Development skills by installs in the Skillselion catalog
  • Data as of Aug 5, 2026 (Skillselion catalog sync)
At a glance

framer-motion capabilities & compatibility

Free; installs the open-source framer-motion npm package.

Capabilities
react animation · page transitions · scroll animation · gesture handling
Use cases
frontend · ui design
IDEs
vscode · cursor ide
Runs
Runs locally
Pricing
Free
From the docs

What framer-motion says it does

Comprehensive Framer Motion animation library for React.
SKILL.md
Always respect user preferences:
SKILL.md
npx skills add https://github.com/aiskillstore/marketplace --skill framer-motion

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs15
repo stars404
Last updatedAugust 5, 2026
Repositoryaiskillstore/marketplace

What it does

Add Framer Motion animations, transitions, and gestures to React and Next.js interfaces.

When should I use this skill?

When adding animations to React or Next.js applications.

What you get

React components animated with Framer Motion, respecting reduced-motion preferences.

  • animated React components
  • page transition wrapper
  • animated list component

By the numbers

  • 4 reference guides (motion component, variants, gestures, hooks)
  • 4 example patterns
  • 2 component templates

Files

SKILL.mdMarkdownGitHub ↗

Framer Motion Skill

Production-ready animations for React applications.

Quick Start

Installation

npm install framer-motion
# or
pnpm add framer-motion

Basic Usage

import { motion } from "framer-motion";

// Simple animation
<motion.div
  initial={{ opacity: 0 }}
  animate={{ opacity: 1 }}
  transition={{ duration: 0.5 }}
>
  Content
</motion.div>

Core Concepts

ConceptGuide
Motion Componentreference/motion-component.md
Variantsreference/variants.md
Gesturesreference/gestures.md
Hooksreference/hooks.md

Examples

PatternGuide
Page Transitionsexamples/page-transitions.md
List Animationsexamples/list-animations.md
Scroll Animationsexamples/scroll-animations.md
Micro-interactionsexamples/micro-interactions.md

Templates

TemplatePurpose
templates/page-transition.tsxPage transition wrapper
templates/animated-list.tsxAnimated list component

Quick Reference

Basic Animation

<motion.div
  initial={{ opacity: 0, y: 20 }}
  animate={{ opacity: 1, y: 0 }}
  exit={{ opacity: 0, y: -20 }}
  transition={{ duration: 0.3 }}
>
  Content
</motion.div>

Hover & Tap

<motion.button
  whileHover={{ scale: 1.05 }}
  whileTap={{ scale: 0.95 }}
  transition={{ type: "spring", stiffness: 400, damping: 17 }}
>
  Click me
</motion.button>

Variants

const container = {
  hidden: { opacity: 0 },
  show: {
    opacity: 1,
    transition: { staggerChildren: 0.1 }
  }
};

const item = {
  hidden: { opacity: 0, y: 20 },
  show: { opacity: 1, y: 0 }
};

<motion.ul variants={container} initial="hidden" animate="show">
  {items.map(i => (
    <motion.li key={i} variants={item}>{i}</motion.li>
  ))}
</motion.ul>

AnimatePresence (Exit Animations)

import { AnimatePresence, motion } from "framer-motion";

<AnimatePresence mode="wait">
  {isVisible && (
    <motion.div
      key="modal"
      initial={{ opacity: 0 }}
      animate={{ opacity: 1 }}
      exit={{ opacity: 0 }}
    >
      Modal content
    </motion.div>
  )}
</AnimatePresence>

Scroll Trigger

<motion.div
  initial={{ opacity: 0, y: 50 }}
  whileInView={{ opacity: 1, y: 0 }}
  viewport={{ once: true, margin: "-100px" }}
  transition={{ duration: 0.5 }}
>
  Animates when scrolled into view
</motion.div>

Drag

<motion.div
  drag
  dragConstraints={{ left: -100, right: 100, top: -100, bottom: 100 }}
  dragElastic={0.1}
>
  Drag me
</motion.div>

Layout Animation

<motion.div layout layoutId="shared-element">
  Content that animates when layout changes
</motion.div>

Transition Types

// Tween (default)
transition={{ duration: 0.3, ease: "easeOut" }}

// Spring
transition={{ type: "spring", stiffness: 300, damping: 20 }}

// Spring presets
transition={{ type: "spring", bounce: 0.25 }}

// Inertia (for drag)
transition={{ type: "inertia", velocity: 50 }}

Easing Functions

// Built-in easings
ease: "linear"
ease: "easeIn"
ease: "easeOut"
ease: "easeInOut"
ease: "circIn"
ease: "circOut"
ease: "circInOut"
ease: "backIn"
ease: "backOut"
ease: "backInOut"

// Custom cubic-bezier
ease: [0.17, 0.67, 0.83, 0.67]

Reduced Motion

Always respect user preferences:

import { motion, useReducedMotion } from "framer-motion";

function Component() {
  const prefersReducedMotion = useReducedMotion();

  return (
    <motion.div
      initial={{ opacity: 0, y: prefersReducedMotion ? 0 : 20 }}
      animate={{ opacity: 1, y: 0 }}
      transition={{ duration: prefersReducedMotion ? 0 : 0.3 }}
    >
      Respects motion preferences
    </motion.div>
  );
}

// Or use media query
const variants = {
  initial: { opacity: 0 },
  animate: { opacity: 1 },
};

<motion.div
  variants={variants}
  initial="initial"
  animate="animate"
  className="motion-reduce:transition-none"
>

Common Patterns

Fade In Up

const fadeInUp = {
  initial: { opacity: 0, y: 20 },
  animate: { opacity: 1, y: 0 },
  transition: { duration: 0.4 }
};

<motion.div {...fadeInUp}>Content</motion.div>

Staggered List

const container = {
  hidden: { opacity: 0 },
  show: {
    opacity: 1,
    transition: { staggerChildren: 0.1, delayChildren: 0.2 }
  }
};

const item = {
  hidden: { opacity: 0, x: -20 },
  show: { opacity: 1, x: 0 }
};

Modal

<AnimatePresence>
  {isOpen && (
    <>
      {/* Backdrop */}
      <motion.div
        initial={{ opacity: 0 }}
        animate={{ opacity: 1 }}
        exit={{ opacity: 0 }}
        className="fixed inset-0 bg-black/50"
        onClick={onClose}
      />
      {/* Modal */}
      <motion.div
        initial={{ opacity: 0, scale: 0.95 }}
        animate={{ opacity: 1, scale: 1 }}
        exit={{ opacity: 0, scale: 0.95 }}
        className="fixed inset-x-4 top-1/2 -translate-y-1/2 ..."
      >
        Modal content
      </motion.div>
    </>
  )}
</AnimatePresence>

Accordion

<motion.div
  initial={false}
  animate={{ height: isOpen ? "auto" : 0 }}
  transition={{ duration: 0.3, ease: "easeInOut" }}
  className="overflow-hidden"
>
  <div className="p-4">Accordion content</div>
</motion.div>

Best Practices

1. Use variants: Cleaner code, easier orchestration 2. Respect reduced motion: Always check useReducedMotion 3. Use `layout` sparingly: Can be expensive, use only when needed 4. Exit animations: Wrap with AnimatePresence 5. Spring for interactions: More natural feel for hover/tap 6. Tween for page transitions: More predictable timing 7. GPU-accelerated properties: Prefer opacity, scale, x, y over width, height

Related skills

Forks & variants (1)

Framer Motion has 1 known copy in the catalog totaling 1 installs. They canonicalize to this original listing.

FAQ

How do I run exit animations?

Wrap the element in AnimatePresence and provide an 'exit' prop on the motion component.

Does it handle reduced motion?

Yes, it uses useReducedMotion to disable movement when the user prefers reduced motion.

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.