سالهاست که css از اجزای اصلی یک صفحه وب است. ساخت اشکال متحرک تنها از طریق javascript یا ابزارهایی شبیه Macromedia Flash امکانپذیر بود. در نهایت انیمیشن ها و ترنزیشن های CSS اضافه شدند و اکنون ما گزینههای فراوانی برای ساخت اشکال متحرک داریم. در این مقاله نحوه کار ترنزیشن و انیمیشن در css و روش ایجادشان را برایتان توضیح میدهم .
ترنزیشنها همانطور که از اسمشان مشخص است تغییر تدریجی یک یا چند خصوصیت را امکانپذیر میکنند. در حالت عادی هر تغییر خصوصیتی سریعا نتیجهاش مشخص میشود. اما با ترنزیشنها، شما مشخص میکنید که کدام ویژگی به صورت تدریجی تغییر کند، چه مقدار زمان طول بکشد تا این تغییر رخ بدهد و از چه timing functionای برای این عملیات استفاده شود.
بیایید مثال زیر را با هم بررسی کنیم:
در مثال بالا ما استایل یک عنصر را با کلاسی به نام some-text مشخص میکنیم. زمانی که نشانگر موس روی یک عنصر قرار بگیرد، ما رنگ پیش زمینه و پس زمینه را تغییر میدهیم و border-radius را به صفر تغییر میدهیم. همانطور که پیش از این گفتم این تغییر سریعاً و بدون هیچ گونه ترنزیشن در Css اتفاق میوفتد.
حالا میخواهیم یک ترنزیشن ساده به مثال بالا اضافه کنیم:
.some-text { font-family: sans-serif; cursor: pointer; padding: 20px; margin: 20px; width: 300px; background-color: #4545CD; color: white; line-height: 1.4; border-radius: 10px; } .some-text:hover { background-color: #BCBCEF; color: #222; border-radius: 0; }
همانطور که احتمالا متوجه شدهاید، مثال بالا ویژگی border-radius را به صورت ناگهانی تغییر نمیدهد. هنگامی که مقدار این ویژگی تغییر میکند؛ مرورگر یک ترنزیشن آرام انجام میدهد. مدت زمان این ترنزیشن در Css یک دوم ثانیه یا 500 میلیثانیه است.
برای اینکه این افکت را به دست بیاوریم میتوانیم از ویژگی خلاصهنویسی transition استفاده کنیم. اولین مقداری که باید وارد کنیم نام ویژگیای است که میخواهیم ترنزیشن را بر روی آن اعمال کنیم (در مثال بالا border-radius) مقدار بعدی مدت زمان ترنزیشن است که بر حسب ثانیه (به طور مثال دوثانیه یا نیم ثانیه) و یا میلیثانیه (به طور مثال 300 میلی ثانیه یا 2500 میلی ثانیه) وارد میشود.
با استفاده از کاما به عنوان جداکننده، میتوانید یک ترنزیشن در Css را به چندین ویژگی اعمال کنید.
.some-text { transition: border-radius 500ms,color 1s,background-color 1s; /*...*/}
در اینجا نتیجه را میبینید:
یکی دیگر از گزینههایی که میتوانید برای یک ترنزیشن در Css تنظیم کنید که Timing function است. Timing function روشی را که از طریق آن ترنزیشن در طول یک فریم پیش میرود را کنترل میکند. به عبارت دیگر با تنظیم Timing function شما ترنزیشنتان را به وجود میآورید:
Timing functionهای دیگری هم وجود دارد اما این مواردی که ذکر شد جزو معمولترینها هستند. به منظوراستفاده از اینها، شما باید نام timing function مورد نظرتان را به عنوان سومین گزینه خلاصهنویسی transition استفاده کنید.
.some-text { transition: border-radius 500ms ease-in; /*...*/}
سادهترین روش تعریف یک ترنزیشن در Css، استفاده از ویژگی خلاصهنویسی transition است که به شما امکان میدهد چندین گزینه را همزمان تنظیم کنید. همچنین این گزینهها را میتوانید به صورت جداگانه نیز تنظیم نمائید:
نام خصوصیتی که میخواهید ترنزیشن در Css را بر روی آن اعمال کنید.
مدت زمان ترنزیشن بر اساس ثانیه یا میلی ثانیه
Timing function ای که باید استفاده شود.
میتوانید تاخیری را برای شروع یک ترنزیشن در Css در نظر بگیرید و شروع ترنزیشن را به تعویق بیاندازید. اینکار از طریق ویژگی transition-delay امکانپذیر است. اگر بخواهید از تابع خلاصهنویسی transition استفاده کنید هم میتوانید به عنوان انتخاب چهارم و پس از timing function آن را اضافه کنید. این مقدار بر حسب ثانیه یا میلیثانیه تعریف میشود.
.some-text { transition: border-radius 500ms ease-in 2s; /*...*/}
انیمیشنها ویژگیهایی شبیه ترنزیشنها دارند با یک تفاوت: انیمیشن ها در CSS برای راه اندازی نیازی به تغییر مقدار یک ویژگی ندارند. شما کنترل کاملی بر زمان و نحوه انجام آنها دارید. آنها حتی میتوانند چندین بار یا به طور نامحدود تکرار شوند.
Keyframeها روشی هستند که از طریق آنها مراحل یک انیمیشن تعیین میشود. با keyframe ها شما میتوانید زمان و چگونگی تغییر یک یا چند value را در بازه زمانی مشخص کنید:
@keyframes slide-anim { from { margin-left: 0; margin-top: 0; } to { margin-left: 200px; margin-top: 200px; }}
در تکه کد بالا ما انیمیشنی به نام slide-anim ایجاد کردهایم. کد با دادن صفر به ویژگیهای margin-left و margin-top شروع میشود و با دادن 200px به هر دو، پایان مییابد. برای استفاده از این ویژگی ما باید ویژگی animation را به عنصری که میخواهیم متحرک کنیم اضافه کنیم.
.ball::before { animation: slide-anim 2s infinite; /*...*/}
اجباری نیست که از انیمیشنهای از پیش تعریف شده استفاده کنید. در حقیقت هر چقدر که دلتان میخواهد، میتوانید انیمیشنتان را به صورت خاص طراحی کنید.
@keyframes slide-anim { 0% { margin-left: 0; margin-top: 0; } 25% { margin-left: 200px; margin-top: 0; background-color: red; border-radius: 0; } 50% { margin-left: 200px; margin-top: 200px; background-color: green; border-radius: 50%; } 75% { margin-left: 0; margin-top: 200px; background-color: orange; border-radius: 0; } 100% { margin-top: 0; }}
نتیجه چیزی شبیه شکل زیر خواهد بود:
همانند ترنزیشنها، تعریف انیمیشن ها در CSS با استفاده از ویژگی خلاصهنویسی animation راحتتر است. علاوه بر این، میتوانید از ویژگیهای جداگانه موجود نیز استفاده کنید:
اینها گزینههای دیگری هستند که شما میتوانید از آنها برای کنترل انیمیشنتان استفاده کنید.
Timing functionروشی است که پیشرفت انیمیشن در طول یک فریم را کنترل میکند.
یک تاخیر در شروع انیمیشن تنظیم میکند و شروع آن را به تعویق میاندازد.
کنترل نحوه پخش شدن انیمیشن: به جلو (normal، مقدار پیش فرض)، عقب (reverse) یا متناوب (alternate-reverse و alternate).
این ویژگی مشخص میکند که بعد از پایان انیمیشن عنصر چه styleای داشته باشد. این ویژگی میتواند styleهای تنظیم شده توسط آخرین keyframe (forwards)، اولین keyframe (backwards)، اولین و آخرین keyframeها (both) را حفظ کند، یا حتی عنصر را به style اصلی خود تنظیم کند (none، مقدار پیش فرض).
انیمیشن ها و ترنزیشن های CSS از رویکردهای CSS برای متحرکسازی عناصر در یک صفحه وب هستند، بدون اینکه برای این کار به JavaScript نیاز داشته باشید. با استفاده از ترنزیشن در CSS، میتوانید یک ویژگی را به تدریج (و نه به طور ناگهانی) تغییر دهید. با استفاده از انیمیشنهای CSS، شما میتوانید عنصری را متحرک کرده و ظاهر آن را به صورت فریم به فریم کنترل کنید.
آیا میخواهید یک برنامه نویس حرفهای بشوید؟ پس در دوره های برنامه نویسی آنلاین من شرکت کنید. اگر مقاله انیمیشن ها و ترنزیشن های CSS را دوست داشتید آن را با دوستانتان به اشتراک بگذارید.