دسترسی سریع


آموزش کامل انیمیشن‌های CSS | راهنمای جامع transition و keyframes + ۲۰ مثال عملی

آموزش کامل انیمیشن‌های CSS | راهنمای جامع transition و keyframes + ۲۰ مثال عملی
خلاصه مطلب

انیمیشن‌های CSS یکی از قدرتمندترین ابزارهای طراحی وب مدرن هستند. در این مقاله جامع، از مفاهیم پایه transition تا انیمیشن‌های پیشرفته با keyframes را یاد می‌گیرید. همراه با ۲۰+ مثال واقعی شامل دکمه‌های متحرک، کارت‌های معلق، لودینگ اسپینر، منوی هامبورگری، اسلایدر و انیمیشن اسکرول.

مقدمه: چرا انیمیشن‌های CSS؟

انیمیشن‌های CSS به شما امکان می‌دهند بدون نوشتن یک خط جاوااسکریپت، المان‌های صفحه را متحرک کنید. از افکت‌های ساده hover گرفته تا انیمیشن‌های پیچیده بارگذاری و اسکرول.

مزایای انیمیشن‌های CSS نسبت به جاوااسکریپت:

  • عملکرد بهتر و روان‌تر (استفاده از GPU)

  • کد کمتر و ساده‌تر

  • بدون نیاز به کتابخانه‌های خارجی

  • پشتیبانی عالی مرورگرها

  • قابلیت ترکیب با hover و media queries

دو نوع اصلی انیمیشن در CSS:

  1. Transition – تغییر نرم بین دو حالت (مثل hover)

  2. 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

ساده‌ترین انیمیشن: تغییر رنگ دکمه.

css
.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;  }
html
<button class="button">هاور کن ببین</button>

مثال ۲: بزرگ شدن با transform: scale

افکت بزرگ شدن در hover (بسیار محبوب).

css
.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.

css
.icon {    font-size: 48px;    transition: transform 0.4s ease;    display: inline-block;  }  .icon:hover {    transform: rotate(360deg);  }

مثال ۴: حرکت به راست (translateX)

اسلاید شدن المان در hover.

css
.slide-item {    background: #9b59b6;    padding: 15px;    color: white;    transition: transform 0.3s ease;  }  .slide-item:hover {    transform: translateX(20px);  }

مثال ۵: سایه متحرک (box-shadow)

افکت برجسته شدن با سایه.

css
.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);  }

مثال ۶: چند ویژگی همزمان

تغییر رنگ، اندازه و سایه با هم.

css
.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);  }

مثال ۷: افکت انبساط (تغییر عرض)

نوار پیشرفت یا منوی کشویی.

css
.expand-bar {    width: 100px;    height: 10px;    background: #e74c3c;    transition: width 0.5s ease;  }  .expand-bar:hover {    width: 300px;  }

مثال ۸: افکت محو شدن (opacity)

ظاهر و ناپدید شدن تدریجی.

css
.fade-element {    opacity: 0.5;    transition: opacity 0.4s ease;  }  .fade-element:hover {    opacity: 1;  }

مثال ۹: تأخیر در انیمیشن (transition-delay)

انیمیشن با ۰.۵ ثانیه تأخیر.

css
.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.

css
.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)

ورود تدریجی المان به صفحه.

css
@keyframes fadeIn {    from {      opacity: 0;    }    to {      opacity: 1;    }  }  .fade-in {    animation: fadeIn 1s ease;  }

مثال ۱۲: انیمیشن اسلاید از پایین (Slide Up)

المان از پایین به بالا می‌آید.

css
@keyframes slideUp {    from {      opacity: 0;      transform: translateY(50px);    }    to {      opacity: 1;      transform: translateY(0);    }  }  .slide-up {    animation: slideUp 0.6s ease-out;  }

مثال ۱۳: لودینگ اسپینر چرخان (Loading Spinner)

انیمیشن بی‌نهایت برای بارگذاری.

css
@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;  }
html
<div class="spinner"></div>

مثال ۱۴: انیمیشن پالس (Pulse Effect)

افکت ضربان‌دار برای دکمه یا اعلان.

css
@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) برای خطا

لرزش فرم هنگام خطا.

css
@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)

افکت موج مانند برای دکمه‌ها.

css
@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;  }

مثال ۱۷: انیمیشن متوالی با چند مرحله (بونس)

انیمیشن پیچیده با ۴ مرحله.

css
@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)

شبیه سازی تایپ متن.

css
@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)

المان هنگام ورود به صفحه نمایش داده می‌شود.

css
@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) برای نوار پیشرفت

یک نوار پیشرفت متحرک جذاب.

css
@keyframes progress {    from {      width: 0%;    }    to {      width: 100%;    }  }  .progress-bar {    height: 8px;    background: #2ecc71;    border-radius: 4px;    animation: progress 2s ease-out;  }

مثال ۲۱: انیمیشن نوسان (Wobble)

افکت سرگرم‌کننده برای کارت‌ها.

css
@keyframes wobble {    0%, 100% { transform: rotate(0deg); }    25% { transform: rotate(5deg); }    75% { transform: rotate(-5deg); }  }  .card:hover {    animation: wobble 0.3s ease;  }

مثال ۲۲: انیمیشن فلش زدن (Flash)

توجه کاربر به یک المان.

css
@keyframes flash {    0%, 100% { opacity: 1; }    50% { opacity: 0.3; }  }  .notification {    background: #e74c3c;    padding: 10px;    color: white;    animation: flash 1s ease 3; /* 3 بار فلش بزند */  }

پروژه عملی: ساخت منوی هامبورگری متحرک (کامل)

css
/* 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;  }
javascript
// جاوااسکریپت (فقط برای تغییر کلاس)  document.querySelector('.hamburger').addEventListener('click', () => {    document.querySelector('.hamburger').classList.toggle('active');    document.querySelector('.menu').classList.toggle('active');  });
html
<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، یک صفحه هدیه/تبلیغاتی کامل بسازید که شامل:

  1. یک دکمه با ۳ افکت همزمان (بزرگ شدن + چرخش + تغییر رنگ) با transition

  2. یک لودینگ اسپینر سفارشی (غیر از مثال ۱۳) با keyframes

  3. یک کارت محصول که هنگام hover، از پایین توضیحات آن اسلاید شود

  4. یک هدر با انیمیشن fade-in هنگام بارگذاری صفحه

  5. یک اعلان (notification) با افکت pulse برای جلب توجه

کدهای خود را در بخش نظرات به اشتراک بگذارید. بهترین انیمیشن‌ها را در مقاله بعدی معرفی می‌کنیم.


کلمات کلیدی:

انیمیشن CSS,transition,keyframes,متحرک سازی CSS,افکت hover,لودینگ اسپینر,انیمیشن بدون جاوااسکریپت

اشتراک گذاری:
امتیاز دهید:
(0.0 از 0 رای)
مطالب مشابه

نظرات (0)

هنوز نظری ثبت نشده است. شما اولین نفر باشید!
لطفا نام خود را وارد کنید (حداقل ۲ کاراکتر)
لطفا ایمیل معتبر وارد کنید
حداقل ۱۰ و حداکثر ۲۰۰۰ کاراکتر. نظرات پس از تایید نمایش داده می‌شوند.
نظر باید حداقل ۱۰ کاراکتر باشد
امتیاز: (اختیاری)
نظرات پس از تایید نمایش داده می‌شوند

پرسش و پاسخ

حداقل ۱۰ و حداکثر ۱۰۰۰ کاراکتر. سوالات پس از بررسی منتشر می‌شوند.
لطفا سوال معتبری وارد کنید (حداقل ۱۰ کاراکتر)
لطفا نام معتبر وارد کنید
لطفا ایمیل معتبر وارد کنید
عدد ۵ رقمی نمایش داده شده را وارد کنید
لطفا کد امنیتی را وارد کنید
سوالات پس از تایید نمایش داده می‌شوند
هنوز پرسشی ثبت نشده است.