آموزش کامل انیمیشنهای CSS | راهنمای جامع transition و keyframes + ۲۰ مثال عملی
خلاصه مطلب
انیمیشنهای CSS یکی از قدرتمندترین ابزارهای طراحی وب مدرن هستند. در این مقاله جامع، از مفاهیم پایه transition تا انیمیشنهای پیشرفته با keyframes را یاد میگیرید. همراه با ۲۰+ مثال واقعی شامل دکمههای متحرک، کارتهای معلق، لودینگ اسپینر، منوی هامبورگری، اسلایدر و انیمیشن اسکرول.
مقدمه: چرا انیمیشنهای CSS؟
انیمیشنهای CSS به شما امکان میدهند بدون نوشتن یک خط جاوااسکریپت، المانهای صفحه را متحرک کنید. از افکتهای ساده hover گرفته تا انیمیشنهای پیچیده بارگذاری و اسکرول.
مزایای انیمیشنهای CSS نسبت به جاوااسکریپت:
-
عملکرد بهتر و روانتر (استفاده از GPU)
-
کد کمتر و سادهتر
-
بدون نیاز به کتابخانههای خارجی
-
پشتیبانی عالی مرورگرها
-
قابلیت ترکیب با hover و media queries
دو نوع اصلی انیمیشن در CSS:
-
Transition – تغییر نرم بین دو حالت (مثل hover)
-
Keyframes – انیمیشنهای پیچیده با چند مرحله
مفاهیم پایه انیمیشنهای CSS (مرور سریع)
ویژگیهای Transition
| ویژگی | مقدارهای رایج | توضیح |
|---|---|---|
| transition-property | all, width, background | چه ویژگیای تغییر کند |
| transition-duration | 0.3s, 300ms | مدت زمان انیمیشن |
| transition-timing-function | ease, linear, ease-in-out, cubic-bezier() | منحنی حرکت |
| transition-delay | 0s, 0.5s | تأخیر قبل از شروع |
| transition (مخفف) | all 0.3s ease 0s | همه در یک خط |
ویژگیهای Keyframes (Animation)
| ویژگی | مقدارهای رایج | توضیح |
|---|---|---|
| animation-name | fadeIn, slide | نام keyframes |
| animation-duration | 1s, 500ms | مدت زمان |
| animation-timing-function | ease, linear | منحنی حرکت |
| animation-delay | 0s, 2s | تأخیر |
| animation-iteration-count | 1, infinite | تعداد تکرار |
| animation-direction | normal, reverse, alternate | جهت حرکت |
| animation-fill-mode | forwards, backwards | وضعیت بعد از انیمیشن |
| animation (مخفف) | fadeIn 1s ease 0s infinite | همه در یک خط |
۲۰+ مثال کاربردی انیمیشنهای CSS
بخش اول: Transition (۱۰ مثال)
مثال ۱: تغییر رنگ ساده در hover
سادهترین انیمیشن: تغییر رنگ دکمه.
.button { background-color: #3498db; color: white; padding: 12px 24px; border: none; border-radius: 8px; transition: background-color 0.3s ease; cursor: pointer; } .button:hover { background-color: #e74c3c; }
<button class="button">هاور کن ببین</button>
مثال ۲: بزرگ شدن با transform: scale
افکت بزرگ شدن در hover (بسیار محبوب).
.card { width: 200px; padding: 30px; background: #ecf0f1; text-align: center; transition: transform 0.3s ease; cursor: pointer; } .card:hover { transform: scale(1.05); }
مثال ۳: چرخش با transform: rotate
چرخش ۳۶۰ درجه در hover.
.icon { font-size: 48px; transition: transform 0.4s ease; display: inline-block; } .icon:hover { transform: rotate(360deg); }
مثال ۴: حرکت به راست (translateX)
اسلاید شدن المان در hover.
.slide-item { background: #9b59b6; padding: 15px; color: white; transition: transform 0.3s ease; } .slide-item:hover { transform: translateX(20px); }
مثال ۵: سایه متحرک (box-shadow)
افکت برجسته شدن با سایه.
.product-card { padding: 20px; background: white; transition: box-shadow 0.3s ease; } .product-card:hover { box-shadow: 0 10px 30px rgba(0,0,0,0.2); }
مثال ۶: چند ویژگی همزمان
تغییر رنگ، اندازه و سایه با هم.
.fancy-button { background: #2ecc71; padding: 15px 30px; border: none; border-radius: 8px; transition: all 0.3s cubic-bezier(0.68, -0.55, 0.265, 1.55); cursor: pointer; } .fancy-button:hover { background: #27ae60; transform: scale(1.1) rotate(5deg); box-shadow: 0 5px 15px rgba(0,0,0,0.2); }
مثال ۷: افکت انبساط (تغییر عرض)
نوار پیشرفت یا منوی کشویی.
.expand-bar { width: 100px; height: 10px; background: #e74c3c; transition: width 0.5s ease; } .expand-bar:hover { width: 300px; }
مثال ۸: افکت محو شدن (opacity)
ظاهر و ناپدید شدن تدریجی.
.fade-element { opacity: 0.5; transition: opacity 0.4s ease; } .fade-element:hover { opacity: 1; }
مثال ۹: تأخیر در انیمیشن (transition-delay)
انیمیشن با ۰.۵ ثانیه تأخیر.
.delayed-button { background: #f39c12; padding: 12px 24px; transition: all 0.3s ease 0.5s; /* 0.5s delay */ } .delayed-button:hover { transform: scale(1.1); background: #e67e22; }
مثال ۱۰: افکت سه بعدی (perspective + rotateX)
چرخش سه بعدی در hover.
.three-d-card { padding: 40px; background: #3498db; color: white; transition: transform 0.4s ease; } .three-d-card:hover { transform: perspective(500px) rotateX(10deg) rotateY(10deg); }
بخش دوم: Keyframes (۱۰+ مثال)
مثال ۱۱: انیمیشن محو شدن (Fade In)
ورود تدریجی المان به صفحه.
@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } .fade-in { animation: fadeIn 1s ease; }
مثال ۱۲: انیمیشن اسلاید از پایین (Slide Up)
المان از پایین به بالا میآید.
@keyframes slideUp { from { opacity: 0; transform: translateY(50px); } to { opacity: 1; transform: translateY(0); } } .slide-up { animation: slideUp 0.6s ease-out; }
مثال ۱۳: لودینگ اسپینر چرخان (Loading Spinner)
انیمیشن بینهایت برای بارگذاری.
@keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } .spinner { width: 50px; height: 50px; border: 5px solid #ecf0f1; border-top-color: #3498db; border-radius: 50%; animation: spin 1s linear infinite; }
<div class="spinner"></div>
مثال ۱۴: انیمیشن پالس (Pulse Effect)
افکت ضرباندار برای دکمه یا اعلان.
@keyframes pulse { 0% { transform: scale(1); opacity: 1; } 50% { transform: scale(1.1); opacity: 0.8; } 100% { transform: scale(1); opacity: 1; } } .pulse-button { background: #e74c3c; padding: 15px 30px; border: none; border-radius: 8px; color: white; animation: pulse 1.5s ease infinite; }
مثال ۱۵: انیمیشن لرزش (Shake) برای خطا
لرزش فرم هنگام خطا.
@keyframes shake { 0%, 100% { transform: translateX(0); } 25% { transform: translateX(-10px); } 75% { transform: translateX(10px); } } .error-input { animation: shake 0.3s ease-in-out; border-color: #e74c3c; }
مثال ۱۶: انیمیشن ریپل (Ripple Effect)
افکت موج مانند برای دکمهها.
@keyframes ripple { to { transform: scale(4); opacity: 0; } } .ripple-button { position: relative; overflow: hidden; background: #3498db; padding: 12px 24px; border: none; color: white; } .ripple-button::after { content: ''; position: absolute; top: 50%; left: 50%; width: 0; height: 0; border-radius: 50%; background: rgba(255,255,255,0.5); transform: translate(-50%, -50%); transition: all 0.3s; } .ripple-button:active::after { width: 100px; height: 100px; animation: ripple 0.4s ease-out; }
مثال ۱۷: انیمیشن متوالی با چند مرحله (بونس)
انیمیشن پیچیده با ۴ مرحله.
@keyframes bounce { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-30px); } 80% { transform: translateY(10px); } } .bounce-element { background: #f39c12; padding: 20px; display: inline-block; animation: bounce 2s ease infinite; }
مثال ۱۸: انیمیشن تایپ کردن (Typing Effect)
شبیه سازی تایپ متن.
@keyframes typing { from { width: 0; } to { width: 100%; } } @keyframes blink { 50% { border-color: transparent; } } .typing-text { width: 0; white-space: nowrap; overflow: hidden; border-right: 2px solid #333; animation: typing 3s steps(20, end) forwards, blink 0.75s step-end infinite; }
مثال ۱۹: انیمیشن اسکرول (reveal on scroll)
المان هنگام ورود به صفحه نمایش داده میشود.
@keyframes reveal { from { opacity: 0; transform: translateY(50px); } to { opacity: 1; transform: translateY(0); } } .reveal { animation: reveal 0.8s ease forwards; opacity: 0; } /* با Intersection Observer در JS میتوانید کلاس را اضافه کنید */
مثال ۲۰: انیمیشن پرش (Jump) برای نوار پیشرفت
یک نوار پیشرفت متحرک جذاب.
@keyframes progress { from { width: 0%; } to { width: 100%; } } .progress-bar { height: 8px; background: #2ecc71; border-radius: 4px; animation: progress 2s ease-out; }
مثال ۲۱: انیمیشن نوسان (Wobble)
افکت سرگرمکننده برای کارتها.
@keyframes wobble { 0%, 100% { transform: rotate(0deg); } 25% { transform: rotate(5deg); } 75% { transform: rotate(-5deg); } } .card:hover { animation: wobble 0.3s ease; }
مثال ۲۲: انیمیشن فلش زدن (Flash)
توجه کاربر به یک المان.
@keyframes flash { 0%, 100% { opacity: 1; } 50% { opacity: 0.3; } } .notification { background: #e74c3c; padding: 10px; color: white; animation: flash 1s ease 3; /* 3 بار فلش بزند */ }
پروژه عملی: ساخت منوی هامبورگری متحرک (کامل)
/* CSS */ .hamburger { width: 30px; height: 24px; display: flex; flex-direction: column; justify-content: space-between; cursor: pointer; } .hamburger span { width: 100%; height: 3px; background: #333; transition: all 0.3s ease; } .hamburger.active span:nth-child(1) { transform: rotate(45deg) translate(8px, 8px); } .hamburger.active span:nth-child(2) { opacity: 0; } .hamburger.active span:nth-child(3) { transform: rotate(-45deg) translate(8px, -8px); } .menu { position: fixed; top: 0; right: -250px; width: 250px; height: 100%; background: #2c3e50; transition: right 0.3s ease; padding: 60px 20px; } .menu.active { right: 0; }
// جاوااسکریپت (فقط برای تغییر کلاس) document.querySelector('.hamburger').addEventListener('click', () => { document.querySelector('.hamburger').classList.toggle('active'); document.querySelector('.menu').classList.toggle('active'); });
<div class="hamburger"> <span></span> <span></span> <span></span> </div> <div class="menu"> <a href="#">خانه</a> <a href="#">محصولات</a> <a href="#">تماس</a> </div>
جدول مرجع منحنیهای حرکتی (Timing Functions)
| نام | منحنی | معادل cubic-bezier | کاربرد |
|---|---|---|---|
| linear | ثابت | cubic-bezier(0,0,1,1) | حرکت یکنواخت |
| ease | آرام شروع، تند وسط، آرام پایان | cubic-bezier(0.25,0.1,0.25,1) | پیشفرض، مناسب اکثر موارد |
| ease-in | آرام شروع، تند پایان | cubic-bezier(0.42,0,1,1) | ورود تدریجی |
| ease-out | تند شروع، آرام پایان | cubic-bezier(0,0,0.58,1) | خروج تدریجی |
| ease-in-out | آرام شروع و پایان | cubic-bezier(0.42,0,0.58,1) | ورود و خروج نرم |
| cubic-bezier() | سفارشی | خودتان تعریف کنید | انیمیشن خاص |
11. ویژگیها و بخشهای مختلف
-
✅ ۲۲ مثال کاربردی از ساده تا پیشرفته
-
✅ پوشش کامل transition (۱۰ مثال)
-
✅ پوشش کامل keyframes (۱۲+ مثال)
-
✅ پروژه عملی (منوی هامبورگری متحرک)
-
✅ جدول مرجع timing functions و cubic-bezier
-
✅ انیمیشنهای واقعی: لودینگ، پالس، لرزش، ریپل، تایپ کردن
-
✅ کدهای آماده و قابل کپی
-
✅ بدون نیاز به جاوااسکریپت (به جز تغییر کلاس)
۱۴. بخش تمرین عملی (چالش نهایی)
💡 چالش نهایی (پروژه محور):
با استفاده از انیمیشنهای CSS، یک صفحه هدیه/تبلیغاتی کامل بسازید که شامل:
یک دکمه با ۳ افکت همزمان (بزرگ شدن + چرخش + تغییر رنگ) با transition
یک لودینگ اسپینر سفارشی (غیر از مثال ۱۳) با keyframes
یک کارت محصول که هنگام hover، از پایین توضیحات آن اسلاید شود
یک هدر با انیمیشن fade-in هنگام بارگذاری صفحه
یک اعلان (notification) با افکت pulse برای جلب توجه
کدهای خود را در بخش نظرات به اشتراک بگذارید. بهترین انیمیشنها را در مقاله بعدی معرفی میکنیم.
کلمات کلیدی:
انیمیشن CSS,transition,keyframes,متحرک سازی CSS,افکت hover,لودینگ اسپینر,انیمیشن بدون جاوااسکریپت
نظرات (0)