תגובת כפתור חדה
.btn { transition: transform 180ms cubic-bezier(0.4, 0, 0.2, 1);}.btn:hover { transform: translateY(-2px);}רוב ההרמה קורית מהר בהתחלה ואז מתייצבת, ולכן הכפתור מרגיש מגיב לסמן ולא איטי.
לצייר עקומות easing מותאמות ב-CSS עם תצוגה מקדימה של האנימציה.
עודכן לאחרונה
ב-Coddy לומדים דרך כתיבת קוד אמיתי בדפדפן: שיעורים אינטראקטיביים, משוב מיידי ועזרה מ-AI כשנתקעים.
*פונקציית 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 שלכם. הכול רץ בדפדפן בלבד.
linear: התקדמות שווה בכל יחידת זמן.cubic-bezier(0.4, 0, 0.2, 1): התחלה מהירה, סיום איטי. iOS משתמשת במשהו קרוב ל-cubic-bezier(0.42, 0, 0.58, 1) (ease-in-out).לחצו על תבנית שקרובה לתחושה שאתם מחפשים. *Material standard* ו-*Bouncy out* הן נקודות פתיחה טובות לתנועה בממשק, ו-*ease-out* היא ברירת המחדל הבטוחה לאנימציות כניסה.
הידיות בצבע טורקיז הן שתי נקודות הבקרה. גררו את הראשונה כדי לכוונן איך האנימציה *מתחילה*, ואת השנייה כדי לכוונן איך היא *מסתיימת*. משיכת ידית מעל הקצה העליון יוצרת חריגה.
בחרו משך מציאותי לאנימציה האמיתית שלכם. מעברים בממשק נמשכים בדרך כלל 150 עד 300ms, ותנועות הדגשה 400 עד 600ms. לחצו על *הפעלה חוזרת* כדי להריץ שוב את התצוגה במשך החדש.
לערכים מדויקים, הקלידו בשדות X1/Y1/X2/Y2 שמתחת לעקומה. Y יכול לרדת מתחת ל-0 או לעלות מעל 1, ו-X תמיד בטווח 0..1.
לחצו על *העתקה* כדי לקבל את כלל ה-transition המלא. הדביקו אותו בגיליון הסגנונות והחליפו את transform במאפיין שאתם מנפישים.
סוגי 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) | חורג ומתייצב: כניסות שובבות |
.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 שלילי אומר שהאנימציה זזה לרגע בכיוון *ההפוך* לפני שהיא מגיעה ליעד. הרעיון לקוח מאנימציה קלאסית: תנופה קטנה לאחור גורמת לתנועה העיקרית להרגיש מכוונת.
ease-in לאנימציות כניסה. הוא מתחיל לאט ומסיים מהר, ההפך ממה שמרגיש מגיב. השתמשו ב-ease-out במקום.linear לתנועה בממשק כי הוא נראה ניטרלי. תנועה במהירות קבועה נראית מכנית. היא נכונה לפסי התקדמות ולספינרים, אבל כמעט לא לשום דבר אחר.cubic-bezier()?cubic-bezier(x1, y1, x2, y2). הנקודה הראשונה מעצבת איך האנימציה *מתחילה*, והשנייה איך היא *מסתיימת*. X תמיד בין 0 ל-1 (זמן), ו-Y יכול לחרוג מ-0..1 לאפקטים של overshoot/anticipate (התקדמות).cubic-bezier(0.4, 0, 0.2, 1). ליציאות, *ease-in* מתאים. הימנעו מ-*linear* אלא אם אתם מנפישים התקדמות.ease ל-ease-out?ease גם מתחיל בעדינות. ease-out מתחיל במהירות מלאה ומאט, והתנועה ה*מיידית* הזו היא הסיבה שהוא מרגיש מגיב יותר מ-ease.cubic-bezier(0.18, 0.89, 0.32, 1.28) חורג בכ-28% לפני שהוא מתייצב. לתנועה עם כמה קפיצות צריך @keyframes או ספריית פיזיקת קפיצים, כי cubic-bezier יכול לחרוג רק פעם אחת.@keyframes?animation-timing-function, בקיצור animation או לכל keyframe בנפרד. לתנועה מורכבת עם כמה שלבים, אפשר להחיל easing שונה בין כל זוג keyframes.