Menu

מחולל Cubic-Bezier Easing

לצייר עקומות easing מותאמות ב-CSS עם תצוגה מקדימה של האנימציה.

מאת Nethanel Bar, Co-founder & CEO

עודכן לאחרונה

מוכנים ללמוד תכנות באמת?

ב-Coddy לומדים דרך כתיבת קוד אמיתי בדפדפן: שיעורים אינטראקטיביים, משוב מיידי ועזרה מ-AI כשנתקעים.

מה זה מחולל easing מסוג cubic-bezier?

*פונקציית easing* ב-CSS קובעת איך אנימציה מאיצה ומאטה לאורך משך הזמן שלה. מילות המפתח ease, ease-in, ease-out ו-ease-in-out הן קיצורים לארבע עקומות מסוימות. לכל דבר מעבר לארבע האלה, CSS מספקת את cubic-bezier(): פונקציה שמקבלת ארבעה מספרים ומשרטטת עקומה מותאמת אישית.

ארבעת המספרים האלה הם הקואורדינטות של שתי נקודות בקרה (x1, y1, x2, y2). קשה לכתוב אותם ידנית, כי שינויים זעירים משפיעים מאוד על המראה, וחריגות קטנות יוצרות תנועה *קופצנית* שאי אפשר לראות מהמספרים בלבד. עורך ויזואלי מאפשר לגרור את הידיות ולראות את העקומה מגיבה, וזה הרבה יותר מהיר מכיוונון של שברים עשרוניים.

העורך של Coddy משרטט את העקומה בזמן אמת, מנפיש כדור תצוגה לפי ה-easing שבחרתם ומציע תבניות מוכנות לדפוסים נפוצים: מילות המפתח של CSS, העקומה הסטנדרטית של Material Design, יציאה קופצנית ועקומת anticipate עם חריגה. העתיקו את מחרוזת cubic-bezier() שנוצרה והדביקו אותה ב-CSS שלכם. הכול רץ בדפדפן בלבד.

מה כדאי לדעת על easing מסוג cubic-bezier

  • העקומה מציגה *התקדמות* כפונקציה של *זמן*. הזמן נע משמאל לימין (0 → 1), וההתקדמות מלמטה למעלה (0 → 1). אלכסון ישר הוא linear: התקדמות שווה בכל יחידת זמן.
  • קואורדינטות ה-X של שתי נקודות הבקרה מוגבלות לטווח 0..1. קואורדינטות ה-Y יכולות לרדת מתחת ל-0 או לעלות מעל 1, וכך מקבלים easing קופצני, anticipate ו-overshoot (האנימציה חורגת לרגע מהיעד או מתחילה בכיוון ההפוך).
  • עקומות *Ease-out* (רוב ההתקדמות קורית בהתחלה) מרגישות מגיבות וחדות, ומתאימות לכניסות ולתגובות של כפתורים. עקומות *Ease-in* (ההתקדמות קורית בסוף) מרגישות איטיות: בדרך כלל לא מתאימות לממשק, אבל שימושיות ליציאות.
  • ה-easing ה*סטנדרטי* ש-Material Design ממליצה עליו הוא cubic-bezier(0.4, 0, 0.2, 1): התחלה מהירה, סיום איטי. iOS משתמשת במשהו קרוב ל-cubic-bezier(0.42, 0, 0.58, 1) (ease-in-out).
  • באנימציות קצרות (≤200ms) רוב סוגי ה-easing נראים דומים, והמשך חשוב יותר מהעקומה. באנימציות ארוכות יותר (300ms ומעלה), ה-easing הוא מה שגורם לתנועה להרגיש מלוטשת או מרושלת.

איך לעצב easing מסוג cubic-bezier

  1. התחילו מתבנית מוכנה

    לחצו על תבנית שקרובה לתחושה שאתם מחפשים. *Material standard* ו-*Bouncy out* הן נקודות פתיחה טובות לתנועה בממשק, ו-*ease-out* היא ברירת המחדל הבטוחה לאנימציות כניסה.

  2. גררו את שתי הידיות

    הידיות בצבע טורקיז הן שתי נקודות הבקרה. גררו את הראשונה כדי לכוונן איך האנימציה *מתחילה*, ואת השנייה כדי לכוונן איך היא *מסתיימת*. משיכת ידית מעל הקצה העליון יוצרת חריגה.

  3. בחרו משך והפעילו שוב

    בחרו משך מציאותי לאנימציה האמיתית שלכם. מעברים בממשק נמשכים בדרך כלל 150 עד 300ms, ותנועות הדגשה 400 עד 600ms. לחצו על *הפעלה חוזרת* כדי להריץ שוב את התצוגה במשך החדש.

  4. כוונון מדויק בשדות המספרים

    לערכים מדויקים, הקלידו בשדות X1/Y1/X2/Y2 שמתחת לעקומה. Y יכול לרדת מתחת ל-0 או לעלות מעל 1, ו-X תמיד בטווח 0..1.

  5. העתיקו את ה-CSS

    לחצו על *העתקה* כדי לקבל את כלל ה-transition המלא. הדביקו אותו בגיליון הסגנונות והחליפו את transform במאפיין שאתם מנפישים.

טבלת עזר ל-cubic-bezier

סוגי easing נפוצים וערכי ה-cubic-bezier שמאחוריהם. כל ארבע מילות המפתח שלמטה הן כינויים לעקומות cubic-bezier מסוימות.

Easingערכי cubic-bezierמתי להשתמש
ease(0.25, 0.1, 0.25, 1)ברירת המחדל של transition: עדין אבל כללי
linear(0, 0, 1, 1)מהירות קבועה: בדרך כלל לא מתאים לממשק, מתאים לספינרים
ease-in(0.42, 0, 1, 1)התחלה איטית, סיום מהיר: הכי טוב ליציאות
ease-out(0, 0, 0.58, 1)התחלה מהירה, סיום איטי: הכי טוב לכניסות ולתגובות
ease-in-out(0.42, 0, 0.58, 1)סימטרי: הכי טוב למתגים שנעים הלוך ושוב
Material standard(0.4, 0, 0.2, 1)תנועת ממשק מודרנית וחדה
Bouncy out(0.18, 0.89, 0.32, 1.28)חורג ומתייצב: כניסות שובבות

דוגמאות cubic-bezier לנסות

תגובת כפתור חדה

easing סטנדרטי במעבר עכבר
.btn {    transition: transform 180ms cubic-bezier(0.4, 0, 0.2, 1);}.btn:hover {    transform: translateY(-2px);}

רוב ההרמה קורית מהר בהתחלה ואז מתייצבת, ולכן הכפתור מרגיש מגיב לסמן ולא איטי.

כניסה קופצנית

חריגה ואז התייצבות
.card {    transition: transform 350ms cubic-bezier(0.18, 0.89, 0.32, 1.28);}

ערך Y2 של 1.28 גורם לעקומה לחרוג מעבר ליעד ואז להתייצב. השתמשו בזה במשורה: תנועה קופצנית מעייפת אם כל דבר זז כך.

תנופה לאחור לפני התנועה קדימה

משיכה לאחור ואז זינוק קדימה
.hero {    transition: transform 500ms cubic-bezier(0.68, -0.55, 0.27, 1.55);}

Y1 שלילי אומר שהאנימציה זזה לרגע בכיוון *ההפוך* לפני שהיא מגיעה ליעד. הרעיון לקוח מאנימציה קלאסית: תנופה קטנה לאחור גורמת לתנועה העיקרית להרגיש מכוונת.

טעויות easing נפוצות

  • שימוש ב-ease-in לאנימציות כניסה. הוא מתחיל לאט ומסיים מהר, ההפך ממה שמרגיש מגיב. השתמשו ב-ease-out במקום.
  • בחירה ב-linear לתנועה בממשק כי הוא נראה ניטרלי. תנועה במהירות קבועה נראית מכנית. היא נכונה לפסי התקדמות ולספינרים, אבל כמעט לא לשום דבר אחר.
  • הגזמה עם חריגה בכל מעבר. easing קופצני הוא הדגשה, לא ברירת מחדל: כשמשתמשים בו בכל מקום, התוצאה נראית כמו כאוס.
  • ניסיון לתקן תנועה שמרגישה איטית על ידי שינוי ה-easing במקום המשך. אם ease-out של 600ms מרגיש איטי, נסו קודם 300ms.
  • שכחה שקואורדינטות ה-X של שתי הידיות מוגבלות לטווח 0..1. ניסיון לגרור ידית אל מחוץ לצד השמאלי או הימני של הקנבס לא עושה כלום: רק Y יכול לצאת מגבולות התיבה.

שאלות נפוצות על Cubic-Bezier

מה המשמעות של ארבעת המספרים ב-cubic-bezier()?
אלה קואורדינטות ה-x וה-y של שתי נקודות בקרה: cubic-bezier(x1, y1, x2, y2). הנקודה הראשונה מעצבת איך האנימציה *מתחילה*, והשנייה איך היא *מסתיימת*. X תמיד בין 0 ל-1 (זמן), ו-Y יכול לחרוג מ-0..1 לאפקטים של overshoot/anticipate (התקדמות).
באיזה easing כדאי להשתמש לאנימציות בממשק?
לכניסות (משהו שמופיע) ולתגובות (מעבר עכבר על כפתור, פוקוס), השתמשו ב-*ease-out* או בעקומה הסטנדרטית של Material Design, cubic-bezier(0.4, 0, 0.2, 1). ליציאות, *ease-in* מתאים. הימנעו מ-*linear* אלא אם אתם מנפישים התקדמות.
מה ההבדל בין ease ל-ease-out?
שניהם מסתיימים לאט, אבל ease גם מתחיל בעדינות. ease-out מתחיל במהירות מלאה ומאט, והתנועה ה*מיידית* הזו היא הסיבה שהוא מרגיש מגיב יותר מ-ease.
איך יוצרים אנימציה קופצנית ב-CSS?
גררו את הידית השנייה מעל החלק העליון של הקנבס (Y2 > 1). לדוגמה, cubic-bezier(0.18, 0.89, 0.32, 1.28) חורג בכ-28% לפני שהוא מתייצב. לתנועה עם כמה קפיצות צריך @keyframes או ספריית פיזיקת קפיצים, כי cubic-bezier יכול לחרוג רק פעם אחת.
אפשר להשתמש ב-cubic-bezier עם אנימציות @keyframes?
כן. השתמשו בו בתור animation-timing-function, בקיצור animation או לכל keyframe בנפרד. לתנועה מורכבת עם כמה שלבים, אפשר להחיל easing שונה בין כל זוג keyframes.

למידע נוסף

כלי פיתוח נוספים

איור של שפות התכנות ב-Coddy

ללמוד תכנות עם Coddy

להתחיל