Animation in frontend has gone from “nice-to-have” to core UX.
In 2025, users expect smooth, context-aware transitions — not just buttons that move.
Framer Motion and Tailwind CSS — two tools that, when combined, give you an elegant, scalable animation workflow without the usual headache of CSS keyframes or timeline-based libraries.
💡 What Are These Tools?
🧩 Tailwind CSS
✅ Utility-first CSS framework
✅ You use short class names like p-4, bg-blue-500, rounded-xl
✅ No need to leave your HTML or JSX file
Example:
<div class="p-4 bg-blue-500 text-white rounded-xl">
Hello Tailwind!
</div>
🎬 Framer Motion
✅ A React animation library
✅ Lets you animate anything easily
✅ Works great with Next.js, React, or Remix
Example:
import { motion } from "framer-motion";
<motion.div animate={{ x: 100 }}>I move!</motion.div>
🚀 Why Use Both Together?
✅ Tailwind handles style
✅ Framer Motion handles movement
✅ You get clean design + smooth animation ✨
🧱 Example 1: Simple Hover Animation
Let’s make a button that moves a little when hovered.
import { motion } from "framer-motion";
export default function Button() {
return (
<motion.button
whileHover={{ scale: 1.1 }}
whileTap={{ scale: 0.95 }}
className="px-4 py-2 bg-indigo-600 text-white rounded-lg font-medium"
>
Hover Me 🚀
</motion.button>
);
}
🧠 What’s happening:
✅ whileHover → scales up the button slightly
✅ whileTap → shrinks it when clicked
✅ Tailwind adds styling and shape
✅ Result → A smooth, responsive button that feels alive ✨
🎛️ Example 2: Fade-In Animation
Let’s make a card that fades in when it appears.
import { motion } from "framer-motion";
export default function Card() {
return (
<motion.div
initial={{ opacity: 0, y: 30 }}
animate={{ opacity: 1, y: 0 }}
transition={{ duration: 0.6 }}
className="p-6 bg-white rounded-2xl shadow-lg"
>
<h2 className="text-xl font-semibold">Animated Card</h2>
<p className="text-gray-600 mt-2">
This card fades in smoothly when loaded.
</p>
</motion.div>
);
}
🧠 Explanation:
✅ initial → where animation starts
✅ animate → where it ends
✅ transition → how fast or smooth
✅ Tailwind gives it padding, color, and shadow
✅ Simple, clear, and works perfectly across devices.
🧭 Bonus Tip: Animate Page Transitions
If you use Next.js, wrap your pages with AnimatePresence:
import { AnimatePresence, motion } from "framer-motion";
<AnimatePresence mode="wait">
<motion.div
key={router.asPath}
initial={{ opacity: 0 }}
animate={{ opacity: 1 }}
exit={{ opacity: 0 }}
transition={{ duration: 0.3 }}
>
{children}
</motion.div>
</AnimatePresence>
🧠 Final Thoughts
In 2025, good animations = better UX.
Framer Motion and Tailwind make it possible to add motion without complexity.
They’re:
✅ Easy to learn 🧑💻
✅ Clean to use 💅
✅ Fun to experiment with 🚀
If you’re building modern UIs — this combo should be your go-to animation stack.
Top comments (0)