انیمیشن‌ها

از موتو کد، دانشنامهٔ برنامه‌نویسی

انیمیشن‌ها در CSS[ویرایش | ویرایش]

CSS اجازه می‌دهد که روی عناصر HTML بدون استفاده از جاوا اسکریپت یا Flash انیمیشن ایجاد کنید.[۱]

در این فصل شما درمورد ویژگی‌های زیر مطالبی را خواهید آموخت:

  • @keyframes
  • animation-name
  • animation-duration
  • animation-delay
  • animation-iteration-count
  • animation-direction
  • animation-timing-function
  • animation-fill-mode
  • animation

پشتیبانی مرورگرها از انیمیشن‌ها[ویرایش | ویرایش]

اعداد درون جدول مشخص کننده اولین نسخه مرورگرهایی است که بطور کامل از این ویژگی پشتیبانی می کنند.

ویژگی (Property) Chrome Internet Explorer / Edge Firefox Safari Opera
@keyframes ۴۳٫۰ ۱۰٫۰ ۱۶٫۰ ۹٫۰ ۳۰٫۰
animation-name ۴۳٫۰ ۱۰٫۰ ۱۶٫۰ ۹٫۰ ۳۰٫۰
animation-duration ۴۳٫۰ ۱۰٫۰ ۱۶٫۰ ۹٫۰ ۳۰٫۰
animation-delay ۴۳٫۰ ۱۰٫۰ ۱۶٫۰ ۹٫۰ ۳۰٫۰
animation-iteration-count ۴۳٫۰ ۱۰٫۰ ۱۶٫۰ ۹٫۰ ۳۰٫۰
animation-direction ۴۳٫۰ ۱۰٫۰ ۱۶٫۰ ۹٫۰ ۳۰٫۰
animation-timing-function ۴۳٫۰ ۱۰٫۰ ۱۶٫۰ ۹٫۰ ۳۰٫۰
animation-fill-mode ۴۳٫۰ ۱۰٫۰ ۱۶٫۰ ۹٫۰ ۳۰٫۰
animation ۴۳٫۰ ۱۰٫۰ ۱۶٫۰ ۹٫۰ ۳۰٫۰

انیمیشن‌های CSS چه هستند؟[ویرایش | ویرایش]

انیمیشن به یک عنصر اجازه می‌دهد به تدریج از یک استایل به استایلی دیگر تغییر کند.

می‌توانید هر تعداد ویژگی CSS را که می‌خواهید، هرچند بار که بخواهید تغییر بدهید.

برای استفاده از انیمیشن‌های CSS، ابتدا باید تعدادی keyframe برای انیمیشن مشخص کنید.

Keyframeها نگهدارنده استایلی هستند که عنصر در زمان‌های مشخص خواهد داشت.

قانون @keyframes[ویرایش | ویرایش]

زمانی که استایل‌های CSS را درون قانون @keyframes مشخص می‌کنید، انیمیشن به تدریج از استایل فعلی به استایل جدید تغییر خواهد کرد.

برای اینکه انیمیشن کار کند، می‌بایست انیمیشن را به یک کنترل وصل (bind) کنید.

مثال زیر انیمیشن "مثال" را به عنصر <div> متصل می‌کند. انیمیشن ۴ ثانیه ادامه خواهد داشت، و به تدریج ویژگی background-color عنصر <div> را از "red" به "yellow" تغییر می‌دهد:

مثال
/* The animation code */
@keyframes example {
  from {background-color: red;}
  to {background-color: yellow;}
}

/* The element to apply the animation to */
div {
  width: 100px;
  height: 100px;
  background-color: red;
  animation-name: example;
  animation-duration: 4s;
}

نکته: ویژگی animation-duration مدت زمانی که انیمیشن می‌بایست طول بکشد را مشخص می‌کند. اگر ویژگی animation-duration مشخص نشود، هیچ انیمیشنی اجرا نخواهد شد، زیرا مقدار پیش‌فرض این ویژگی 0s (صفر ثانیه) است.

در مثال بالا با استفاده از کلمه کلیدی “from” و "to" (که ۰٪ نشان دهندهٔ (آغاز) و ۱۰۰٪ نشان دهندهٔ (کامل شدن) است) مشخص کرده ایم که چه زمانی استایل تغییر خواهد کرد.

همچنین استفاده از درصد نیز امکان پذیر است. با استفاده از درصد، همچنین می‌توانید هر تعداد که می خواهید تغییر استایل اضافه کنید.

مثال زیر ویژگی background-color عنصر <div> را هنگامی که انیمیشن به اندازه ۲۵٪ و ۵۰٪ کامل شود، تغییر خواهد داد و دوباره این کار زمانی که انیمیشن به‌طور ۱۰۰٪ کامل شد صورت می‌گیرد:

مثال
/* The animation code */
@keyframes example {
  0%   {background-color: red;}
  25%  {background-color: yellow;}
  50%  {background-color: blue;}
  100% {background-color: green;}
}

/* The element to apply the animation to */
div {
  width: 100px;
  height: 100px;
  background-color: red;
  animation-name: example;
  animation-duration: 4s;
}

مثال زیر مقادیر هردو ویژگی background-color و position عنصر <div> را هنگامی که انیمیشن به میزان ۲۵٪، ۵۰٪ کامل شود، تغییر خواهد داد و این کار را هنگامی که انیمیشن ۱۰۰٪ کامل شد نیز دوباره انجام می دهد:

مثال
/* The animation code */
@keyframes example {
  0%   {background-color:red; left:0px; top:0px;}
  25%  {background-color:yellow; left:200px; top:0px;}
  50%  {background-color:blue; left:200px; top:200px;}
  75%  {background-color:green; left:0px; top:200px;}
  100% {background-color:red; left:0px; top:0px;}
}

/* The element to apply the animation to */
div {
  width: 100px;
  height: 100px;
  position: relative;
  background-color: red;
  animation-name: example;
  animation-duration: 4s;
}

به تأخیر انداختن انیمیشن[ویرایش | ویرایش]

ویژگی animation-delay یک تأخیر برای آغاز یک انیمیشن مشخص می‌کند.

مثال زیر یک تأخیر دو ثانیه ای را قبل از آغاز انیمیشن دارد:

مثال
div {
  width: 100px;
  height: 100px;
  position: relative;
  background-color: red;
  animation-name: example;
  animation-duration: 4s;
  animation-delay: 2s;
}

استفاده از مقادیر منفی مجاز است. اگر از مقادیر منفی استفاده کنید، انیمیشن طوری آغاز می‌شود که به نظر می‌رسد قبلاً برای N ثانیه نمایش داده می شده است.

در مثال زیر، انیمیشن طوری آغاز می‌شود که به نظر می‌رسد قبلاً برای ۲ ثانیه نمایش داده می شده است.

مثال
div {
  width: 100px;
  height: 100px;
  position: relative;
  background-color: red;
  animation-name: example;
  animation-duration: 4s;
  animation-delay: -2s;
}

تعیین تعداد دفعات اجرای انیمیشن[ویرایش | ویرایش]

ویژگی animation-iteration-count تعداد دفعات اجرای یک انیمیشن را مشخص می‌کند:

مثال زیر مشخص می‌کند که انیمیشن قبل از اتمام سه بار اجرا خواهد شد:

مثال
div {
  width: 100px;
  height: 100px;
  position: relative;
  background-color: red;
  animation-name: example;
  animation-duration: 4s;
  animation-iteration-count: 3;
}

مثال زیر از مقدار "infinite" (بی‌نهایت) استفاده می‌کند تا اجرای انیمیشن برای همیشه ادامه پیدا کند:

مثال
div {
  width: 100px;
  height: 100px;
  position: relative;
  background-color: red;
  animation-name: example;
  animation-duration: 4s;
  animation-iteration-count: infinite;
}

اجرای انیمیشن در جهت برعکس یا در دوره های متناوب[ویرایش | ویرایش]

ویژگی animation-direction مشخص می‌کند که یک انیمیشن چگونه می‌بایست اجرا شود، رو به جلو، رو به عقب یا به صورت یکی در میان.

ویژگی animation-direction می‌تواند مقادیر زیر را داشته باشد:

  • normal - انیمیشن به صورت عادی اجرا می‌شود (forwards). این ویژگی پیش‌فرض است
  • reverse- انیمیشن در جهت برعکس (backwards) اجرا می‌شود
  • alternate - انیمیشن ابتدا به صورت forwards اجرا می‌شود، سپس به صورت backwards
  • alternate-reverse - انیمیشن ابتدا به صورت backwards اجرا می‌شود، سپس به صورت forwards


مثال زیر انیمیشن را در جهت برعکس اجرا خواهد کرد:

مثال
div {
  width: 100px;
  height: 100px;
  position: relative;
  background-color: red;
  animation-name: example;
  animation-duration: 4s;
  animation-direction: reverse;
}

مثال زیر از مقدار "alternate" برای اجرای انیمیشن ابتدا به صورت رو به جلو، سپس به صورت وارونه استفاده می‌کند:

مثال
div {
  width: 100px;
  height: 100px;
  position: relative;
  background-color: red;
  animation-name: example;
  animation-duration: 4s;
  animation-iteration-count: 2;
  animation-direction: alternate;
}

مثال زیر از مقدار "alternate-reverse" برای اجرای انیمیشن ابتدا به صورت واورنه، سپس به صورت رو به جلو (forward) استفاده می‌کند:

مثال
div {
  width: 100px;
  height: 100px;
  position: relative;
  background-color: red;
  animation-name: example;
  animation-duration: 4s;
  animation-iteration-count: 2;
  animation-direction: alternate-reverse;
}

مشخص کردن منحنی سرعت انیمیشن[ویرایش | ویرایش]

ویژگی animation-timing-function منحنی سرعت انیمیشن را مشخص می‌کند.

ویژگی animation-timing-function می‌تواند مقدارهای زیر را داشته باشد:

  • ease- حالت انیمیشن که به آرامی آغاز می‌شود، سپس سریع شده، و در پایان به آرامی پایان می‌یابد را مشخص می‌کند (این ویژگی پیش‌فرض است)
  • linear- حالت انیمیشن با یک سرعت یکسان از ابتدا تا انتها را مشخص می‌کند
  • ease-in- حالت انیمیشن با آغاز آرام را مشخص می‌کند
  • ease-out - حالت انیمیشن با پایان آرام را مشخص می‌کند
  • ease-in-out - حالت انیمیشن با آغاز و پایان آرام را مشخص می‌کند
  • cubic-bezier(n,n,n,n) - به شما اجازه می‌دهد مقادیر خود را درون تابع cubic-bazier تعریف کنید


مثال زیر تفاوت برخی از منحنی‌های سرعت را که می‌توان از آنها استفاده کرد را نشان می‌دهد:

مثال
#div1 {animation-timing-function: linear;}
#div2 {animation-timing-function: ease;}
#div3 {animation-timing-function: ease-in;}
#div4 {animation-timing-function: ease-out;}
#div5 {animation-timing-function: ease-in-out;}

مشخص کردن fill-mode برای یک انیمیشن[ویرایش | ویرایش]

انیمیشن‌ها در CSS قبل از اینکه اولین keyframe اجرا شود یا بعد از اجرای آخرین keyframe روی یک عنصر تأثیر نمی‌گذارند.

ویژگی animation-fill-mode هنگامی که انیمیشن اجرا نمی شود (قبل از آغاز اجرا، یا بعد از پایان اجرا، یا هر دوی آن)، برای عنصر هدف یک استایل مشخص می کند مشخص می‌کند.

ویژگی animation-fill-mode می‌تواند مقادیر زیر را داشته باشد:

  • none- مقدار پیش‌فرض. انیمیشن قبل یا بعد از اجرای خود، هیچ استایلی را روی عنصر اعمال نمی‌کند
  • forwards- عنصر مقادیر استایلی که توسط آخرین keyframe تنظیم شده‌است را حفظ می‌کند (با توجه به ویژگی‌های animation-direction و animation-iteration-count)
  • backwards- عنصر مقادیر استایلی که توسط اولین keyframe تنظیم شده‌است را دریافت خواهد کرد. (با توجه به animation-direction)، و آن را هنگام بازه animation-delay حفظ می‌کند
  • both- انیمیشن از قوانین در هردو حالت forwards و backwards پیروی می‌کند که ویژگی‌های انیمیشن را در هر دو جهت توسعه می‌دهد


مثال زیر به عنصر <div> اجازه می‌دهد مقادیر استایل آخرین keyframe را هنگامی که انیمیشن به پایان می‌رسد حفظ کند:

مثال
div {
  width: 100px;
  height: 100px;
  background: red;
  position: relative;
  animation-name: example;
  animation-duration: 3s;
  animation-fill-mode: forwards;
}

مثال زیر به عنصر <div> اجازه می‌دهد مقادیر استایلی که قبل از آغاز انیمیشن توسط اولین keyframe تنظیم شده‌است را حفظ کند (هنگام بازه ویژگی Animation delay):

مثال
div {
  width: 100px;
  height: 100px;
  background: red;
  position: relative;
  animation-name: example;
  animation-duration: 3s;
  animation-delay: 2s;
  animation-fill-mode: backwards;
}

مثال زیر به عنصر <div> اجازه می‌دهد مقادیر استایلی که را قبل از آغاز انیمیشن توسط اولین keyframe تنظیم شده‌است، حفظ کند، و مقادیر استایل آخرین keyframe را هنگام به پایان رسیدن انیمیشن حفظ کند:

مثال
div {
  width: 100px;
  height: 100px;
  background: red;
  position: relative;
  animation-name: example;
  animation-duration: 3s;
  animation-delay: 2s;
  animation-fill-mode: both;
}

ویژگی مختصر Animation[ویرایش | ویرایش]

مثال زیر از شش ویژگی انیمیشن استفاده می‌کند:

مثال
div {
  animation-name: example;
  animation-duration: 5s;
  animation-timing-function: linear;
  animation-delay: 2s;
  animation-iteration-count: infinite;
  animation-direction: alternate;
}

حالت انیمیشن یکسانی همانند مثال بالا را می‌توان با استفاده از ویژگی مختصر animation به دست آورد:

مثال
div {
  animation: example 5s linear 2s infinite alternate;
}

خود را با تمرین ها امتحان کنید![ویرایش | ویرایش]

ویژگی‌های Animation در CSS[ویرایش | ویرایش]

جدول زیر تمامی قوانین @keyframes و تمامی ویژگی‌های انیمیشن در CSS را لیست می‌کند:

ویژگی توضیحات
@keyframes کد انیمیشن را مشخص می‌کند
animation یک ویژگی مختصر برای تنظیم تمامی ویژگی‌های انیمیشن
animation-delay یک تأخیر را برای هنگام آغاز انیمیشن مشخص می‌کند
animation-direction مشخص می کند که انیمیشن می‌بایست به صورت forwards , backwards یا به صورت یکی درمیان (alternate cycles) اجرا شود
animation-duration مشخص می‌کند که چه مدت زمانی می‌بایست طول بکشد تا انیمیشن یک دور کامل اجرا شود
animation-fill-mode استایل عنصر را برای زمانی که انیمیشن در حال اجرا نیست مشخص می‌کند (قبل از اجرا، بعد از اجرا، یا هر دو)
animation-iteration-count تعداد دفعات اجرای انیمیشن را مشخص می‌کند
animation-name نام @keyframe انیمیشن را مشخص می‌کند
animation-play-state مشخص می‌کند انیمیشن در حال اجراست یا متوقف شده‌است
animation-timing-function منحنی سرعت انیمیشن را مشخص می‌کند

منابع آموزشی[ویرایش]