CSS transition-timing-function Property
Description
The transition-timing-function controls the pacing of a CSS transition by mapping the elapsed portion of the transition's duration to the progression of the animated property. In other words, it determines whether a change happens at a steady rate, accelerates, decelerates, or follows a more complex curve over the same total time. It is strictly about how progress is distributed across the duration; it does not change the length of the transition or which properties are affected.
Because it shapes perceived motion, this property is a key tool for creating natural, responsive interactions. Used together with transition-duration and transition-delay, it lets you fine-tune timing so that elements feel snappy or smooth without altering when the transition starts or how long it runs. It can be applied differently for separate properties (for example, one timing curve for opacity and another for transform) and is often combined via the transition shorthand when defining multiple transition aspects at once.
On a practical level, the visual effect produced by this property depends on both the element and the type of property being transitioned: transforms and opacity tend to feel smoother at certain pacing than layout-driven properties like width or height. For longer or multi-step interactions, coordinating the pacing specified here with the timing used in animations (see animation-timing-function) helps maintain consistent motion language across a UI. Also keep in mind that complex or extreme pacing can draw attention to transitions or make them feel unnatural, so subtlety is often preferable.
When troubleshooting or refining transitions, think of transition-timing-function as the designer’s control over motion personality rather than a mechanism for changing when things happen. If a transition looks sluggish or too abrupt, adjust the pacing relative to the duration and delay rather than trying to compensate by changing unrelated properties. Testing transitions in context — alongside user interactions and other animated elements — will reveal how a timing choice affects overall perceived responsiveness.
Definition
- Initial value
- ease
- Applies to
- All elements, :before and :after pseudo elements
- Inherited
- No
- Computed value
- Same as specified value
- Animatable
- No
- JavaScript syntax
- object.style.transitionTimingFunction
Interactive Demo
to see transition.
Syntax
transition-timing-function: <single-transition-timing-function> [ ',' <single-transition-timing-function> ]*
Values
- easeThe ease function is equivalent to cubic-bezier(0.25, 0.1, 0.25, 1).
- linearThe linear function is equivalent to cubic-bezier(0, 0, 1, 1).
- ease-inThe ease-in function is equivalent to cubic-bezier(0.42, 0, 1, 1).
- ease-outThe ease-out function is equivalent to cubic-bezier(0, 0, 0.58, 1).
- ease-in-outThe ease-in-out function is equivalent to cubic-bezier(0.42, 0, 0.58, 1)
- step-startThe step-start function is equivalent to steps(1, start).
- step-endThe step-end function is equivalent to steps(1, end).
- steps(<integer>[, [ start | end ] ]?) Specifies a stepping function, described above, taking two parameters. The first parameter specifies the number of intervals in the function. It must be a positive integer (greater than 0). The second parameter, which is optional, is either the value 'start' or 'end', and specifies the point at which the change of values occur within the interval. If the second parameter is omitted, it is given the value 'end'.
- cubic-bezier(<number>, <number>, <number>, <number>)Specifies a cubic-bezier curve. The four values specify points P1 and P2 of the curve as (x1, y1, x2, y2). Both x values must be in the range [0, 1] or the definition is invalid. The y values can exceed this range.
Example
Browser Support
The following information will show you the current browser support for the CSS transition-timing-function property. Hover over a browser icon to see the version that first introduced support for this CSS property.
This property is supported by all modern browsers.
Desktop
Tablets & Mobile
Last updated by CSSPortal on: 1st January 2026
