نمونه‌هایی از پویانمایی‌های CSS با عملکرد بالا

در این پست با نحوه ایجاد برخی‌از پویانمایی‌های پرطرفدار در CodePen آشنا شوید. These animations all use the performant techniques discussed in other articles in this section.

برای آشنایی با تئوری پشت این توصیه‌ها، چرا برخی‌از پویانمایی‌ها کند هستند؟ را ببینید و برای نکات کاربردی، راهنمای پویانمایی‌ها را ببینید.

پویانمایی بار کردن جادوگر

مشاهده پویانمایی بار کردن «جادوگر» در CodePen

این پویانمایی بار کردن کاملاً با CSS ساخته شده است. تصویر به‌علاوه همه پویانمایی‌ها در CSS و HTML ایجاد شده است، بدون تصویر یا جاوا اسکریپت. برای درک نحوه ایجاد آن و میزان عملکرد آن می‌توانید از Chrome DevTools استفاده کنید.

بازرسی پویانمایی با Chrome DevTools

With the animation running, open the Performance tab in Chrome DevTools and record a few seconds of the animation. در «خلاصه» باید ببینید که مرورگر هنگام اجرای این پویانمایی هیچ عملیات «چیدمان» یا «رنگ‌آمیزی» انجام نمی‌دهد.

خلاصه در DevTools
خلاصه پس‌از نمایه‌سازی پویانمایی جادوگر.

برای اینکه بدانید این پویانمایی چگونه بدون ایجاد چیدمان و رنگ‌آمیزی به‌دست آمده است، هرکدام از عناصر متحرک را در Chrome DevTools بازرسی کنید. می‌توانید از پانل پویانمایی‌ها برای پیدا کردن عناصر پویانمایی‌شده مختلف استفاده کنید، با کلیک کردن روی هر عنصر، آن عنصر در DOM برجسته می‌شود.

«پانل پویانمایی» بخش‌های مختلف پویانمایی ما را نشان می‌دهد.
مشاهده و انتخاب موارد در «پانل پویانمایی Chrome DevTools».

برای مثال، مثلث را انتخاب کنید، و ببینید که چگونه جعبه عنصر درطول سفرش به هوا، درحالی‌که می‌چرخد، تغییر شکل می‌دهد و سپس به موقعیت شروع برمی‌گردد.

ویدیویی که نشان می‌دهد چگونه می‌توانیم مسیر مثلث را در Chrome DevTools ردیابی کنیم.

درحالی‌که عنصر همچنان انتخاب شده است، به «پانل سبک‌ها» نگاه کنید. در آنجا می‌توانید CSS را که شکل مثلث را می‌کشد، و پویانمایی مورداستفاده را ببینید.

روش کار

مثلث بااستفاده از شبه‌عنصر ::after برای افزودن محتوای تولیدشده ایجاد می‌شود، و از حاشیه‌ها برای ایجاد شکل استفاده می‌شود.

.triangle {
    position: absolute;
    bottom: -62px;
    left: -10px;
    width: 110px;
    height: 110px;
    border-radius: 50%;
}

.triangle::after {
    content: "";
    position: absolute;
    top: 0;
    right: -10px;
    width: 0;
    height: 0;
    border-style: solid;
    border-width: 0 28px 48px 28px;
    border-color: transparent transparent #89beb3 transparent;
}

پویانمایی با خط CSS زیر اضافه می‌شود،

animation: path_triangle 10s ease-in-out infinite;

با ماندن در Chrome DevTools می‌توانید با پیمایش به پایین «پانل سبک»، قاب‌های کلیدی را پیدا کنید. در آنجا خواهید دید که پویانمایی بااستفاده از transform برای تغییر موقعیت عنصر و چرخاندن آن ایجاد شده است. ویژگی transform یکی از ویژگی‌های شرح‌داده‌شده در راهنمای پویانمایی‌ها است، که باعث نمی‌شود مرورگر عملیات چیدمان یا رنگ‌آمیزی را انجام دهد (که دلایل اصلی پویانمایی‌های کند هستند).

@keyframes path_triangle {
  0% {
    transform: translateY(0);
  }
  10% {
    transform: translateY(-172px) translatex(10px) rotate(-10deg);
  }
  55% {
    transform: translateY(-172px) translatex(10px) rotate(-365deg);
  }
  58% {
    transform: translateY(-172px) translatex(10px) rotate(-365deg);
  }
  63% {
    transform: rotate(-360deg);
  }
}

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

دایره تپنده

مشاهده دایره تپنده در CodePen

گاهی‌اوقات از این نوع پویانمایی برای جلب توجه به چیزی در صفحه استفاده می‌شود. برای درک پویانمایی می‌توانید از Firefox DevTools استفاده کنید.

بازرسی کردن پویانمایی با Firefox DevTools

With the animation running, open the Performance tab in Firefox DevTools and record a few seconds of the animation. ضبط را متوقف کنید، در آبشار باید ببینید که هیچ ورودی‌ای برای Recalculate Style (محاسبه مجدد سبک) وجود ندارد. اکنون می‌دانید که این پویانمایی باعث محاسبه مجدد سبک نمی‌شود، و بنابراین عملیات چیدمان و رنگ‌آمیزی انجام نمی‌شود.

جزئیات پویانمایی در Firefox Waterfall
The Firefox DevTools Waterfall.

Staying in Firefox DevTools inspect the circle to see how this animation works. <div> با کلاس pulsating-circle موقعیت دایره را علامت‌گذاری می‌کند، اما خودش دایره‌ای رسم نمی‌کند.

.pulsating-circle {
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translateX(-50%) translateY(-50%);
    width: 30px;
    height: 30px;
}

دایره قابل‌مشاهده و پویانمایی‌ها بااستفاده از شبه‌عناصر ::before و ::after به‌دست می‌آیند.

عنصر ::before حلقه ماتی را ایجاد می‌کند که به خارج از دایره سفید گسترش می‌یابد، بااستفاده از پویانمایی‌ای به‌نام pulse-ring، که transform: scale و opacity را پویانمایی می‌کند.

.pulsating-circle::before {
    content: '';
    position: relative;
    display: block;
    width: 300%;
    height: 300%;
    box-sizing: border-box;
    margin-left: -100%;
    margin-top: -100%;
    border-radius: 45px;
    background-color: #01a4e9;
    animation: pulse-ring 1.25s cubic-bezier(0.215, 0.61, 0.355, 1) infinite;
}

@keyframes pulse-ring {
  0% {
    transform: scale(0.33);
  }
  80%, 100% {
    opacity: 0;
  }
}

راه دیگر برای دیدن اینکه کدام ویژگی‌ها پویانمایی می‌شوند، انتخاب پانل پویانمایی‌ها در Firefox DevTools است. سپس تجسمی از پویانمایی‌های درحال استفاده و ویژگی‌هایی را که پویانمایی می‌شوند خواهید دید.

With the ::before pseudo-element selected we can see which properties are animating.

خود دایره سفید بااستفاده از شبه‌عنصر ::after ایجاد و پویانمایی می‌شود. پویانمایی pulse-dot از transform: scale برای بزرگ و کوچک کردن نقطه درطول پویانمایی استفاده می‌کند.

.pulsating-circle::after {
  content: '';
  position: absolute;
  left: 0;
  top: 0;
  display: block;
  width: 100%;
  height: 100%;
  background-color: white;
  border-radius: 15px;
  box-shadow: 0 0 8px rgba(0, 0, 0, 0.3);
  animation: pulse-dot 1.25s cubic-bezier(0.455, 0.03, 0.515, 0.955) -0.4s infinite;
}

@keyframes pulse-dot {
  0% {
    transform: scale(0.8);
  }
  50% {
    transform: scale(1);
  }
  100% {
    transform: scale(0.8);
  }
}

پویانمایی‌ای مثل این می‌تواند در جاهای مختلفی از برنامه‌تان استفاده شود، مهم است که این جزئیات کوچک بر عملکرد کلی برنامه‌تان تأثیر نگذارد.

کره سه‌بعدی CSS خالص

مشاهده Pure CSS 3D Sphere در CodePen

این پویانمایی بسیار پیچیده به‌نظر می‌رسد، اما از تکنیک‌هایی استفاده می‌کند که قبلاً در مثال‌های قبلی دیده‌ایم. پیچیدگی از پویانمایی تعداد زیادی عنصر ناشی می‌شود.

Chrome DevTools را باز کنید و یکی از عناصر دارای کلاس plane را انتخاب کنید. کره از مجموعه‌ای از صفحه‌ها و پره‌های چرخان تشکیل شده است.

به‌نظر می‌رسد هواپیما درحال چرخش است.

این صفحه‌ها و پره‌ها داخل یک پوشش <div> قرار دارند، و این عنصر است که بااستفاده از transform: rotate3d می‌چرخد.

.sphere-wrapper {
  transform-style: preserve-3d;
  width: 300px;
  height: 300px;
  position: relative;
  animation: rotate3d 10s linear infinite;
}

@keyframes rotate3d {
  0% {
    transform: rotate3d(1, 1, 1, 0deg);
  }
  25% {
    transform: rotate3d(1, 1, 1, 90deg);
  }
  50% {
    transform: rotate3d(1, 1, 1, 180deg);
  }
  75% {
    transform: rotate3d(1, 1, 1, 270deg);
  }
  100% {
    transform: rotate3d(1, 1, 1, 360deg);
  }
}

نقطه‌ها را می‌توان به‌صورت تودرتو در عناصر plane و spoke پیدا کرد، آن‌ها از پویانمایی‌ای استفاده می‌کنند که از تبدیل برای مقیاس‌بندی و ترجمه آن‌ها استفاده می‌کند. این کار جلوه تپشی ایجاد می‌کند.

نقطه با کره می‌چرخد و نبض می‌زند.
.spoke-15 .dot,
.spoke-21 .dot {
  animation: pulsate 0.5s infinite 0.83333333s alternate both;
  background-color: #55ffee;
}

@-webkit-keyframes pulsate {
  0% {
    transform: rotateX(90deg) scale(0.3) translateZ(20px);
  }
  100% {
    transform: rotateX(90deg) scale(1) translateZ(0px);
  }
}

کار انجام شده برای ساخت این پویانمایی، تنظیم درست زمان‌بندی، و ایجاد جلوه چرخش و تپش بوده است. پویانمایی‌ها به‌خودی‌خود بسیار ساده هستند و از روش‌هایی استفاده می‌کنند که عملکرد بسیار خوبی دارند.

با باز کردن Chrome DevTools و ضبط «عملکرد» درحین اجرا، می‌توانید ببینید این پویانمایی چگونه عمل می‌کند. پس‌از بارگیری اولیه، پویانمایی Layout یا Paint را راه‌اندازی نمی‌کند، و به‌آرامی اجرا می‌شود.

نتیجه‌گیری

From these examples you can see how animating a few properties using performant methods can create some very cool animations. با پیش‌فرض قرار دادن روش‌های کارآمد شرح‌داده‌شده در راهنمای پویانمایی‌ها می‌توانید وقتتان را صرف ایجاد جلوه موردنظرتان کنید و کمتر نگران کند شدن صفحه باشید.