規劃產生 CSS cubic bezier 所需的步驟,意味著要先決定動態目標、將四個控制座標分別對應到該目標,並在把宣告複製進樣式表之前定義好驗證檢查項目。Cubic-bezier 時間函式由兩個固定錨點 (0,0) 與 (1,1) 以及兩個可編輯的控制點 x1/y1 和 x2/y2 構成,所以規劃的問題本質上在於如何妥善運用這四個數字。在你開啟任何視覺化編輯器或拖曳任何一個點之前,你應該能夠用白話描述這個動態:元素從哪裡開始、結束於何處、變化應該要加速、減速、超出目標還是平穩收尾。CSS Cubic Bezier 產生器提供圖表、範例表格以及動態預覽來檢視結果,但在你接觸它之前所做的規劃決策,將決定輸出是否有效,以及動畫感受是否恰當。把規劃視為一份簡短的前置檢查清單,而不是天馬行空的腦力激盪,接下來的工作流程就會變得機械化。

規劃對 Cubic Bezier 曲線而言實際代表什麼
在這個情境下,規劃並不是腦力激盪想法或列舉功能。它是一組在曲線存在之前就必須做出的明確決策:被動畫化的屬性、移動的距離、總持續時間、目標對象,以及 CSS 有效性規則和無障礙指引所施加的限制。一旦這些決策被寫下來(即使是隨意地記錄),剩下的工作就會簡化為挑選或計算四個數字、複製一行 CSS,以及在實際元件中確認時間感受是否正確。
W3C 的 CSS Easing Functions Level 1 規範將 cubic-bezier() 定義為一種時間函式,其曲線永遠從進度點 (0,0) 出發,並結束於 (1,1)。你所提供的四個數字僅描述兩個中間控制點,不含其他。規劃的意義在於一開始就正視這項限制,避免浪費時間想像那些 CSS 會拒絕的座標。
在開啟工具之前先釐清動態目標
大多數 cubic-bezier 的問題都從錯誤的方向開始。設計師試圖讓一條曲線產生他們尚未明確定義的感受。請反過來,先用一句話寫下這個動態的描述:這個面板緩慢滑入,然後俐落歸位;這個開關先脫離軌道再回穩;或是這個載入指示器從暗到亮以穩定節奏淡入。一句寫下的文字會迫使你在加速、減速以及振盪式動態之間做出選擇,進而決定你是否需要超出目標、預期動作,或兩者皆非。
在這句話之外,請再記錄三個具體的數字:
- 被動畫化的 CSS 屬性(transform、opacity、background-color 等)
- 預期的距離或數值範圍,例如 translateX 240 像素
- 總持續時間(毫秒),介面動態多落在 150 到 600 ms 之間
當這三個數字固定後,cubic-bezier 的選擇就會化約為在已知範圍內調整形狀的問題。同樣的 easing 字串在 200 ms 感覺恰到好處,在 800 ms 可能顯得遲緩,在 80 ms 則可能過於倉促,因此持續時間屬於規劃輸入的一部分,而不是事後才想到的細節。
將四個控制座標對應到動態意圖
這四個數字各自帶有獨立的意義,個別進行規劃可以避免最常見的錯誤:把它們視為一組神祕的四重奏。根據 MDN 的 cubic-bezier 參考資料,x1 與 x2 描述輸入時間的位置,因此 CSS 要求兩者都必須落在閉區間 0 到 1 內。任何超出該範圍的值都會使宣告失效,瀏覽器將退回預設的 ease。請先規劃 x1 與 x2,當動態在時間軸的開頭或結尾需要保持緩慢時,選擇較小的值。
y1 與 y2 描述輸出進度。它們可以合理地落在 0 以下或 1 以上,這會產生預期動作(anticipation,意即動畫值短暫反向再繼續前進)或超出目標(overshoot,即數值越過目標後再返回)。大多數介面動態應將 y 座標維持在 0 到 1 之內,以避免讓使用者感到意外;當動態本身即是訊息的一部分時,才適合將 y1 或 y2 設定為負值或大於 1。
一個實用的規劃捷徑是在腦中繪製圖形:x1 決定曲線離開起點的速度,x2 決定它逼近終點的積極程度,y1 設定前半段的推進幅度,y2 設定後半段的推進幅度。最終呈現的形狀應該對應到你在前一步所寫下的那句話。如果對不起來,代表曲線行為錯誤,必須在任何動畫執行之前先調整座標。
選擇 Easing 家族:關鍵字或自訂曲線
你並非總是需要自訂曲線。CSS 定義了五個 easing 關鍵字,各自對應到固定的 cubic-bezier 座標,從關鍵字出發往往是取得可用結果的最快途徑。規劃工作包含判斷既有關鍵字是否已涵蓋你所描述的動態。下表列出每個關鍵字,以及瀏覽器實際解讀的標準化 cubic-bezier 宣告。
| CSS 關鍵字 | 標準化 cubic-bezier() 宣告 | 典型用途 |
|---|---|---|
| linear | cubic-bezier(0, 0, 1, 1) | 等速運動;機械性或裝飾性動態 |
| ease | cubic-bezier(0.25, 0.1, 0.25, 1) | 通用預設;輕微的加速與減速 |
| ease-in | cubic-bezier(0.42, 0, 1, 1) | 元素離開畫面;起步緩慢再全力衝出 |
| ease-out | cubic-bezier(0, 0, 0.58, 1) | 元素進入畫面;起步快速、輕柔收尾 |
| ease-in-out | cubic-bezier(0.42, 0, 0.58, 1) | 元素橫越視窗;平衡的弧線 |
如果這些都不符合你所描述的動態,請規劃輸入自訂座標。在關鍵字與自訂曲線之間做選擇本身就是一種方法決策,而這份關於挑選產生 CSS cubic bezier 的正確方法的指南,會說明每條路徑在哪些情況下值得投入。CSS Cubic Bezier 產生器即使在選用關鍵字時,仍然會明確顯示全部四個數字,因此你能記錄、分享並修改曲線,而不會遺失原本的意圖。
如何逐步產生並測試 CSS Cubic Bezier
規劃完成後,實際的產生步驟其實很短。CSS Cubic Bezier 產生器提供確認曲線是否符合先前所設定目標所需的圖表、範例表格與預覽。
- 開啟工具,從五個標準 easing 預設中擇一,或在座標輸入欄位中輸入 x1、y1、x2、y2 的數值,並維持 x1 與 x2 在 0 到 1 之間。
- 在方形圖表上檢視曲線,確認其彎曲方向符合動態目標的描述,接著讀取輸入進度 0、0.25、0.5、0.75 與 1 的五列範例,了解輸出進度實際落在何處。
- 點擊 Run preview,觀察圓形在 900 ms 內以該 easing 字串於兩個位置之間移動,並反覆切換以比較正向與反向動態。
- 點擊 Copy CSS 複製完整的 transition-timing-function 宣告(含其尾端分號),然後連同屬性、持續時間、延遲以及任何 reduced-motion 替代方案一起貼到你的樣式表中。
- 在真實距離與持續時間、承受實際渲染負擔的真實元件中測試該宣告,再行上線。
如果在第一步選擇了關鍵字,可見的宣告仍會顯示全部四個數字,這代表你能記錄、分享並修改它,而不會失去原本的意圖。
規劃驗證、測試與 Reduced-Motion 行為
在產生器中看起來對的曲線,在真實介面裡可能感覺不對。規劃包含預留時間在實際情境中驗證 easing。距離、持續時間、屬性與渲染成本都會影響相同數字帶來的主觀感受,因此工具內的範例表格與動態預覽只是起點,不是最終答案。200 像素的 translateX 在 300 ms 搭配 ease-out 所呈現的效果,會與相同 easing 用於 20 像素的微幅位移或 40 ms 的轉換截然不同,因為視覺會依據可用時間來感知動態。
Reduced-motion 偏好屬於規劃的一部分,而不是事後補救。啟用減少動態的使用者不應被迫承受超出目標、大幅預期動作或過長的持續時間。常見的規劃模式是為每個自訂 cubic-bezier 搭配一段媒體查詢,將動畫降為接近即時或完全移除動態。CSS 允許技術上有效但令人不悅或困惑的曲線,因此規劃步驟應包含一項檢查問題:看不見動態的使用者是否仍能理解發生了什麼變化?如果答案為否,無論數字看起來多麼優雅,該曲線在上線前都需要修改。
開始前的規劃檢查清單
在開啟任何 cubic-bezier 編輯器之前套用一份簡短的規劃檢查清單,可消除大部分拖慢工作流程的反覆嘗試。
- 寫下一句話描述該動態。
- 記錄屬性、距離與持續時間。
- 判斷標準關鍵字是否已涵蓋該動態。
- 確認 x1 與 x2 將維持在 0 到 1 之間。
- 決定 y1 或 y2 應維持在 0 到 1 之內,或是刻意允許超出目標。
- 為啟用減少動態的使用者規劃替代方案。
- 在上線前預留時間於真實元件中進行測試。
當這些決策完成後,產生曲線就只是輸入四個數字、觀察預覽、複製宣告的事。CSS Cubic Bezier 產生器會處理數學運算、對 W3C 有效性規則的檢查,以及預覽,讓你先前所做的規劃決策可以即時檢視,而不是在動畫上線後才意外發現問題。
如果你正在權衡選項,規劃產生 CSS Toggle Switch 的步驟對此有詳細說明。