CSS 緩動曲線產生器

拖曳兩個把手捏出緩動曲線,讓小球沿著它和等速運動賽跑,cubic-bezier() 值隨時複製。

預設
控制點
第一個控制點
第二個控制點
預覽
你的曲線
linear
取值
cubic-bezier(0.25, 0.1, 0.25, 1)
拖曳把手或選個預設來調整曲線。

曲線都在你的瀏覽器裡繪製,這裡設定的內容不會上傳到 BroBroGo。

常見問題

兩個把手和四個數字是什麼意思?

曲線從左下角(開始)走到右上角(結束):橫軸是時間,由左到右;縱軸是進度,由下往上。兩個把手就是讓曲線彎曲的控制點,每個把手有一個 X 和一個 Y,合起來就是 cubic-bezier(x1, y1, x2, y2)。X 始終在 0 到 1 之間,而 Y 可以超出上緣或低於下緣,讓動畫在停下前先衝過頭,或先往回拉一下。

產生的值怎麼用到 CSS 裡?

把 cubic-bezier() 複製走,填到任何需要緩動函式的地方——transition-timing-function、animation-timing-function,或者簡寫,例如 transition: transform 0.3s cubic-bezier(0.25, 0.1, 0.25, 1)。ease、ease-in、ease-out、ease-in-out 這些關鍵字其實就是固定的 cubic-bezier 曲線,點對應的預設就能看到關鍵字背後的具體數值。

能做出彈跳(bounce)或彈性(elastic)效果嗎?

單靠它做不到。一條 cubic-bezier 可以先蓄力、再衝過頭——“back”預設就是把一個把手拉出方框來實現的——但它只能朝一個方向走完再停下。彈跳和彈性會來回反轉好幾次,任何單條 cubic-bezier 都表達不了,那需要 CSS keyframes,或帶許多分段的 linear() 函式。

緩動曲線與 CSS 動畫的運作原理

在 CSS 轉場(transitions)與動畫(animations)中,時間與進度的關係並非只能是單調的等速運動。透過 transition-timing-functionanimation-timing-function 屬性,開發者可以指定動畫在執行過程中的速度變化,而這項技術的核心即是三次貝茲曲線(Cubic Bezier Curve)。

一條三次貝茲曲線由四個點定義:起點、終點,以及兩個控制點。在 CSS 的應用中,起點固定在左下角 (0, 0),代表動畫的起點與開始時間;終點固定在右上角 (1, 1),代表動畫的終點與結束時間。時間軸從左至右推進,動畫進度則由下往上發展。

透過調整兩個控制點的座標 (x1, y1)(x2, y2),即可改變曲線的弧度,進而控制動畫在不同時間點的推進速度。這四個數值最終會組合成 CSS 的 cubic-bezier(x1, y1, x2, y2) 函式。


控制點數值規則與邊界限制

調整控制點時,數值必須遵守 CSS 規範的特定物理限制:

  • 橫軸(X 軸)限制:代表時間進程,數值必須介於 01 之間。在輸入欄位中,若輸入超出此範圍的數值(例如輸入 9)並使輸入框失去焦點,系統會自動將數值限制並還原為最大值 1
  • 縱軸(Y 軸)限制:代表動畫進度,其數值限制在 -0.701.70 之間。Y 軸數值允許低於 0(低於下緣)或高於 1(超出上緣),這能產生動畫在開始前先往回拉(pull-back),或在結束前衝過頭(overshoot)的物理動態效果。

在操作介面時,若清除數值輸入框並使其失去焦點,系統會自動回復至上一次有效的數值。此外,當控制點把手處於聚焦狀態時,按下鍵盤的向左鍵,數值會微調改變,例如變更為 0.99。若輸入空值或非數字,系統則會保持等待狀態,直到輸入完整數值為止。


預設曲線與數值對照

本工具提供多種常見的預設曲線,幫助開發者快速起步,並理解常見 CSS 關鍵字背後的具體數值:

預設名稱 對應之 cubic-bezier() 數值 物理動態特徵
ease 預設緩動,開始時緩慢,隨後加速,最後緩慢結束。
ease-in 漸強效果,由慢轉快。
ease-out 漸弱效果,由快轉慢。
ease-in-out 漸強漸弱,兩頭慢、中間快。
回拉進入 - 回拉進入,起動時先向後微調再向前衝。
回拉退出 cubic-bezier(0.34, 1.56, 0.64, 1) 回拉退出,結束時先衝過頭再回彈至終點。
回拉進出 - 回拉進出,起點與終點皆有超出邊界的物理回彈。

曲線設計的物理局限性

雖然 cubic-bezier() 能創造出豐富的動態,但單一條三次貝茲曲線在物理表現上有其極限。

由於曲線只能由左下角持續向右延伸至右上角,它只能表達「單向發展、中途改變速度、最後穩定停下」的過程。這意味著,它無法在單一函式內實現多次反轉方向的複雜效果,例如物體落地時連續反彈數次的彈跳(bounce)效果,或是來回擺盪多次的彈性(elastic)效果。若要實現此類多階段的動態,必須改用 CSS @keyframes 分段撰寫,或使用包含多個線段的 linear() 函式。


隱私與資料處理說明

本工具完全在您的本機瀏覽器中進行即時運算與繪圖。曲線都在你的瀏覽器裡繪製,這裡設定的內容不會上傳到 BroBroGo。