يشرح هذا الدليل كيفية إنشاء صور متحركة عالية الأداء باستخدام CSS.
يمكنك الاطّلاع على لماذا تكون بعض الصور المتحركة بطيئة؟ لمعرفة النظرية وراء هذه الاقتراحات.
توافُق المتصفح
تتوفّر جميع خصائص CSS التي يوصي بها هذا الدليل في المتصفّحات المختلفة.
transform
opacity
will-change
نقل عنصر
لنقل عنصر، استخدِم قيم الكلمات الرئيسية translate أو rotation للسمة transform.
على سبيل المثال، لإظهار عنصر في العرض، استخدِم translate.
.animate {
animation: slide-in 0.7s both;
}
@keyframes slide-in {
0% {
transform: translateY(-1000px);
}
100% {
transform: translateY(0);
}
}
استخدِم rotate لتدوير العناصر. يقوم المثال التالي بتدوير عنصر
360 درجة.
.animate {
animation: rotate 0.7s ease-in-out both;
}
@keyframes rotate {
0% {
transform: rotate(0);
}
100% {
transform: rotate(360deg);
}
}
تغيير حجم عنصر
لتغيير حجم عنصر، استخدِم قيمة الكلمة الرئيسية scale للسمة transform.
.animate {
animation: scale 1.5s both;
}
@keyframes scale {
50% {
transform: scale(0.5);
}
100% {
transform: scale(1);
}
}
تغيير مستوى ظهور عنصر
لإظهار عنصر أو إخفائه، استخدِم opacity.
.animate {
animation: opacity 2.5s both;
}
@keyframes opacity {
0% {
opacity: 1;
}
50% {
opacity: 0;
}
100% {
opacity: 1;
}
}
تجنُّب السمات التي تؤدي إلى تغيير التنسيق أو الرسم
قبل استخدام أي سمة CSS للحركة (بخلاف transform وopacity)،
يجب تحديد تأثير السمة في مسار العرض.
تجنَّب أي سمة تؤدي إلى تشغيل التنسيق أو الرسم ما لم يكن ذلك ضروريًا للغاية.
فرض إنشاء الطبقة
كما هو موضّح في مقالة لماذا تكون بعض الصور المتحركة بطيئة؟، يتيح وضع العناصر في طبقة جديدة للمتصفّح إعادة رسمها بدون الحاجة إلى إعادة رسم بقية التنسيق.
يمكن للمتصفحات عادةً اتخاذ قرارات جيدة بشأن العناصر التي يجب وضعها في طبقة جديدة، ولكن يمكنك فرض إنشاء الطبقة يدويًا باستخدام السمة will-change.
كما يوحي الاسم، تخبر هذه الخاصية المتصفح أن هذا العنصر سيتم تغييره بطريقة ما.
في CSS، يمكنك تطبيق will-change على أي محدّد:
body > .sidebar {
will-change: transform;
}
ومع ذلك، تشير المواصفات إلى أنّه يجب إضافة هذه السمة فقط إلى العناصر التي تكون على وشك التغيير دائمًا. على سبيل المثال، يمكن استخدام ذلك لشريط جانبي يمكن للمستخدم تمريره للداخل
والخارج. إذا لم يتغيّر العنصر بشكل متكرّر، يمكنك تطبيق will-change باستخدام JavaScript عندما يكون من المحتمل حدوث تغيير. تأكَّد من منح المتصفّح وقتًا كافيًا لإجراء التحسينات اللازمة، وأزِل السمة عند توقُّف التغيير.
لفرض إنشاء الطبقة في متصفّح لا يتيح استخدام will-change، يمكنك ضبط transform: translateZ(0).
تصحيح أخطاء الصور المتحركة البطيئة أو التي تتضمّن خللاً
أدوات مطوّري البرامج في Chrome وأدوات مطوّري البرامج في Firefox يمكن أن تساعدك في معرفة سبب بطء الصور المتحركة أو حدوث خلل فيها.
التحقّق مما إذا كانت الحركة تؤدي إلى تشغيل التنسيق
من المرجّح أن تكون الحركة التي تنقل عنصرًا باستخدام أي سمة غير transform بطيئة. يقارن المثال التالي بين صورة متحركة تستخدم transform
وصورة متحركة تستخدم top وleft.
.box { position: absolute; top: 10px; left: 10px; animation: move 3s ease infinite; } @keyframes move { 50% { top: calc(90vh - 160px); left: calc(90vw - 200px); } }
.box { position: absolute; top: 10px; left: 10px; animation: move 3s ease infinite; } @keyframes move { 50% { transform: translate(calc(90vw - 200px), calc(90vh - 160px)); } }
يمكنك اختبار ذلك في المثالين التاليين واستكشاف الأداء باستخدام "أدوات مطوري البرامج".
أدوات مطوري البرامج في Chrome
- افتح لوحة الأداء.
- سجِّل أداء وقت التشغيل أثناء عرض الحركة.
- افحص علامة التبويب ملخّص.
إذا ظهرت لك قيمة غير صفرية لـ العرض في علامة التبويب الملخّص، قد يعني ذلك أنّ صورتك المتحركة تجعل المتصفّح ينفّذ عمل التنسيق.
Firefox DevTools
في أدوات مطوّري البرامج في Firefox، يمكن أن يساعدك العرض الانحداري لطلبات الشبكة في فهم الأماكن التي يقضي فيها المتصفّح الوقت.
- افتح لوحة الأداء.
- ابدأ في تسجيل الأداء أثناء حدوث الحركة.
- أوقِف التسجيل وافحص علامة التبويب عرض انحداري لطلبات الشبكة.
إذا ظهرت لك إدخالات إعادة احتساب النمط، يعني ذلك أنّ المتصفّح عليه العودة إلى بداية العرض الانحداري لطلبات الشبكة لعرض الصورة المتحركة.
التحقّق من اللقطات التي تم إسقاطها
- افتح علامة التبويب العرض في "أدوات مطوّري البرامج في Chrome".
- ضَع علامة في مربّع الاختيار عداد اللقطات في الثانية.
- شاهِد القيم أثناء تشغيل الصورة المتحركة.
انتبه إلى تصنيف اللقطات في أعلى واجهة مستخدم مقياس عدد اللقطات في الثانية.
يعرض هذا العمود قيمًا مثل 50% 1 (938 m) dropped of 1878. وتشير النسبة المرتفعة، مثل 99%، إلى أنّ الرسوم المتحركة عالية الأداء، ما يعني أنّه يتم إسقاط عدد قليل من اللقطات وأنّ الرسوم المتحركة تبدو سلسة.
التحقّق مما إذا كانت الصورة المتحركة تؤدي إلى تفعيل عملية الرسم
بعض الخصائص أكثر تكلفة للمتصفح ليرسمها من غيرها. على سبيل المثال، يستغرق رسم أي شيء يتضمن تمويهًا (مثل الظل) وقتًا أطول من رسم مربع أحمر. لا تظهر هذه الاختلافات دائمًا في CSS، ولكن يمكن أن تساعدك أدوات مطوّري البرامج في المتصفّح في تحديد المناطق التي تحتاج إلى إعادة رسم، بالإضافة إلى المشاكل الأخرى في الأداء المتعلّقة بالرسم.
أدوات مطوري البرامج في Chrome
- افتح علامة التبويب العرض في "أدوات مطوّري البرامج في Chrome".
- اختَر وميض الرسم.
- حرِّك المؤشر على الشاشة.
إذا رأيت الشاشة بأكملها تومض، أو تم تمييز المناطق التي لا تعتقد أنه يجب تغييرها، فقم بالتحقيق أكثر.
إذا كنت بحاجة إلى تحديد ما إذا كانت سمة معيّنة تسبّب مشاكل في الأداء مرتبطة بالرسم، يمكنك الاستعانة بـ محلّل الرسم في "أدوات مطوّري البرامج في Chrome".
Firefox DevTools
- افتح الإعدادات وأضِف زرّ Toolbox من أجل تبديل وميض الرسم.
- في الصفحة التي تريد فحصها، فعِّل الزر وحرِّك الماوس أو مرِّر الشاشة للاطّلاع على المناطق المميَّزة.
التحريك في مرحلة التركيب
Where possible, restrict animations to opacity and transform to keep
animations on the compositing stage of the rendering path. استخدِم "أدوات مطوّري البرامج" للتحقّق من المرحلة التي تتأثر بالصور المتحركة في مسار العرض.
استخدِم محلّل الطلاء لمعرفة ما إذا كانت أي عمليات طلاء مكلفة بشكل خاص. إذا وجدت أي شيء، فتحقق مما إذا كانت خاصية CSS مختلفة تعطي نفس الشكل والمظهر مع أداء أفضل.
استخدِم السمة will-change باعتدال، وفقط إذا واجهت مشكلة في الأداء.