محرّر منحنيات cubic-bezier
صمّم منحنيات التسارع في CSS بمحرّر cubic-bezier قابل للسحب، وقارنها بالحركة الخطية في معاينة حية، وانسخ cubic-bezier() أو نسخة linear().
اسحب المقبضين (P1 وP2). يمتد الزمن من اليسار إلى اليمين، والتقدّم من الأسفل إلى الأعلى، ويمكن أن يتجاوز المقبضان 1 أو ينزلا تحت 0 لإحداث ارتداد. عند تحديد مقبض، استخدم مفاتيح الأسهم (مع Shift للتحرك 0.1).
معاينة الحركة
الحركة متوقفة لأن نظامك يطلب تقليل الحركة. اضغط تشغيل لتشغيلها رغم ذلك.
المنحنى نفسه بعد أخذ عيّنات منه في صورة دالة linear() في CSS (Chrome 113+ وFirefox 112+ وSafari 17.2+). كلما زادت النقاط تبع المنحنى بدقة أكبر.
كيفية استخدام محرّر cubic-bezier
- اسحب المقبضين على الرسم البياني. تشكّل P1 (نقطة التحكم الأولى) بداية الحركة، وتشكّل P2 نهايتها. يمتد الزمن من اليسار إلى اليمين، والتقدّم من الأسفل إلى الأعلى.
- أو اكتب قيمة في قيمة cubic-bezier(): صيغة كاملة مثل
cubic-bezier(0.4, 0, 0.2, 1)، أو أربعة أرقام، أو كلمة مفتاحية مثلease-in-out. وتعدّل الحقول x1 وy1 وx2 وy2 إحداثيًا واحدًا في كل مرة. - ابدأ من قائمة منحنيات جاهزة (كلمات CSS المفتاحية، والعائلات من Sine إلى Back، ومنحنيات Material Design) أو من أزرار الكلمات المفتاحية. وعندما يطابق منحناك منحنًى جاهزًا، يظهر اسمه بجانب الأزرار.
- راقب معاينة الحركة: تقطع النقطة التي على منحناك والنقطة التي على المسار linear المسافة نفسها في المدة نفسها. استخدم إيقاف مؤقت وتشغيل وإعادة التشغيل للمقارنة بينهما.
- انسخ النتيجة من دالة التوقيت في CSS، أو انسخ تقريب linear() واختر عدد المقاطع.
لوحة المفاتيح: حدّد مقبضًا واستخدم مفاتيح الأسهم لتحريكه 0.01، أو 0.1 مع Shift.
إذا كان نظامك مضبوطًا على تقليل الحركة، تبدأ المعاينة متوقفة. اضغط تشغيل إذا أردت تشغيلها رغم ذلك.
ما معنى cubic-bezier()؟
دالة التسارع (easing) في CSS تربط الزمن المنقضي من الانتقال (من 0 إلى 1) بمقدار تقدّمه (من 0 إلى 1). وتصف cubic-bezier(x1, y1, x2, y2) هذا الربط بمنحنى بيزييه تكعيبي يبدأ من (0, 0) وينتهي عند (1, 1)، وتشدّه نقطتا تحكم هما P1 = (x1, y1) وP2 = (x2, y2).
- قيم x تمثّل الزمن، ويجب أن تبقى بين 0 و1، وإلا لما كانت الدالة منحنى توقيت صالحًا. ويُبقيها المحرّر ضمن هذا النطاق.
- قيم y تمثّل التقدّم، ويمكن أن تنزل تحت 0 أو تتجاوز 1. فقيمة y أكبر من 1 تجعل الحركة تتجاوز هدفها ثم تعود، مثل منحنيات Back، وقيمة أقل من 0 تجعلها تتحرك إلى الخلف أولًا.
- الميل الحاد يعني حركة سريعة، والميل المسطّح يعني حركة بطيئة. تبدأ
ease-outسريعة وتنتهي بطيئة، وهذا يبدو طبيعيًا للعناصر التي تدخل الشاشة. أماease-inفتفعل العكس وتناسب العناصر التي تغادرها.
كلمات CSS المفتاحية اختصارات: ease = cubic-bezier(0.25, 0.1, 0.25, 1)، وease-in = (0.42, 0, 1, 1)، وease-out = (0, 0, 0.58, 1)، وease-in-out = (0.42, 0, 0.58, 1)، وlinear = (0, 0, 1, 1).
تقريب linear()
تسرد الدالة الأحدث linear() قيم التقدّم عند أزمنة متباعدة بالتساوي، مثل linear(0, 0.25, 0.5, 0.75, 1)، وتصل بينها بخطوط مستقيمة. تأخذ الأداة عيّنات من منحناك (فتحلّ معادلة بيزييه لكل خطوة زمنية) وتكتب تلك القيم بثلاث منازل عشرية. ومع 20 إلى 40 مقطعًا تكون النتيجة مطابقة بصريًا للمنحنى. الفائدة الحقيقية من linear() هي للمنحنيات التي لا يستطيع بيزييه رسمها، كالارتدادات والنوابض، لكنها تتيح لك أيضًا استخدام صيغة واحدة. وهي تعمل في Chrome وEdge 113 فما فوق، وFirefox 112 فما فوق، وSafari 17.2 فما فوق، لذا احتفظ بقيمة cubic-bezier() بديلًا احتياطيًا.
الأسئلة الشائعة
أين أستخدم القيمة؟
في transition-timing-function أو animation-timing-function أو في الصيغة المختصرة: transition: transform 300ms cubic-bezier(0.4, 0, 0.2, 1);. وتقبلها واجهة Web Animations API بوصفها قيمة easing.
ما المدد المناسبة؟
تستغرق تغييرات الواجهة الصغيرة عادةً من 150 إلى 300 ms، والحركات الكبيرة عبر الشاشة من 300 إلى 500 ms. أما الحركات الأطول فسرعان ما تبدو بطيئة.
لماذا لا أستطيع سحب مقبض إلى ما بعد الحافة اليسرى أو اليمنى؟
لأن x تمثّل الزمن، والزمن لا يعود إلى الوراء: ترفض CSS قيم x خارج النطاق من 0 إلى 1.
ما المنحنيات التي يستخدمها Material Design؟
المنحنى القياسي الكلاسيكي هو cubic-bezier(0.4, 0, 0.2, 1)، مع صيغ للتباطؤ والتسارع والحركة الحادة. ويضيف Material 3 المنحنيات «المؤكَّدة» (emphasized)، وكلها موجودة في قائمة منحنيات جاهزة.
كيف أتعامل مع تفضيل تقليل الحركة؟
احترم @media (prefers-reduced-motion: reduce) في شيفرة CSS: قصّر الحركات الكبيرة أو أزلها، واحتفظ بتأثيرات الظهور والتلاشي البسيطة.
أدوات ذات صلة
- مولّد الظل box-shadow في CSS صمّم ظلال box-shadow في CSS بطبقات متعددة مع معاينة مباشرة: الإزاحة والتمويه والانتشار واللون والعتامة وinset، مع أنماط نيومورفيزم جاهزة.
- ساحة تجارب Flexbox وGrid ابنِ تخطيطات flexbox وCSS grid بصريًا: اضبط خصائص الحاوية والعناصر، وسمِّ مناطق الشبكة، وشاهد النتيجة مباشرةً، وانسخ شيفرة CSS وHTML نظيفة.
- مولّد التدرّجات اللونية CSS أنشئ تدرّجات CSS خطية وشعاعية ومخروطية مع معاينة مباشرة: أضف نقاط الألوان واسحبها، واضبط الزاوية، وانسخ شيفرة CSS نظيفة بنقرة واحدة.