CSS Transitions Module Level 1
CSS Transitions Module Level 1
W3C Working Draft
6 January 2026
More details about this document
This version:
Latest published version:
Editor's Draft:
Previous Versions:
History:
Test Suites:
Feedback:
CSSWG Issues Repository
Bugzilla bugs for all levels
Editors:
L. David Baron
Google
Brian Birtles
Mozilla
Former Editors:
Dean Jackson
Apple Inc
David Hyatt
Apple Inc
Chris Marrin
Apple Inc
Suggest an Edit for this Spec:
GitHub Editor
World Wide Web Consortium
W3C
liability
trademark
and
permissive document license
rules apply.
Abstract
CSS Transitions allows property changes in CSS values to occur smoothly over a specified duration.
CSS
is a language for describing the rendering of structured documents
(such as HTML and XML)
on screen, on paper, etc.
Status of this document
This section describes the status of this document at the time of its publication.
A list of current W3C publications
and the latest revision of this technical report
can be found in the
W3C standards and drafts index.
This document was published
by the
CSS Working Group
as a
Working Draft
using the
Recommendation
track
Publication as a Working Draft
does not imply endorsement by
W3C
and its Members.
This is a draft document
and may be updated, replaced
or obsoleted by other documents at any time.
It is inappropriate to cite this document as other than a work in progress.
Please send feedback
by
filing issues in GitHub
(preferred),
including the spec code “css-transitions” in the title, like this:
“[css-transitions]
…summary of comment…
”.
All issues and comments are
archived
Alternately, feedback can be sent to the (
archived
) public mailing list
www-style@w3.org
This document is governed by the
18 August 2025 W3C Process Document
This document was produced by a group operating under the
W3C Patent Policy
W3C maintains a
public list of any patent disclosures
made in connection with the deliverables of the group;
that page also includes instructions for disclosing a patent.
An individual who has actual knowledge of a patent that the individual believes
contains
Essential Claim(s)
must disclose the information in accordance with
section 6 of the W3C Patent Policy
This document
is expected to be relatively close to last call. While some issues raised have yet to be addressed, new features are extremely unlikely to be considered for this level.
1.
Introduction
This section is not normative.
This document introduces new CSS features to enable
implicit transitions
, which describe how CSS properties can be made to change smoothly from one value to another over a given duration.
Tests
crashes
delete-image-set.html
(live test)
(source)
size-container-transition-crash.html
(live test)
(source)
transition-during-style-attr-mutation.html
(live test)
(source)
transition-large-word-spacing-001.html
(live test)
(source)
1.1.
Value Definitions
This specification follows the
CSS property definition conventions
from
[CSS2]
using the
value definition syntax
from
[CSS-VALUES-3]
Value types not defined in this specification are defined in CSS Values & Units
[CSS-VALUES-3]
Combination with other CSS modules may expand the definitions of these value types.
In addition to the property-specific values listed in their definitions,
all properties defined in this specification
also accept the
CSS-wide keywords
as their property value.
For readability they have not been repeated explicitly.
2.
Transitions
Normally when the value of a CSS property changes, the rendered result is instantly updated, with the affected elements immediately changing from the old property value to the new property value. This section describes a way to specify gradual transitions using new CSS properties. These properties are used to animate smoothly from the old state to the new state over time.
For example, suppose that transitions of one second have been defined on the
left
and
background-color
properties. The following diagram illustrates the effect of updating those properties on an element, in this case moving it to the right and changing the background from red to blue. This assumes other transition parameters still have their default values.
Transitions of
left
and
background-color
Transitions are a presentational effect. The
computed value
of a property transitions over time from the old value to the new value. Therefore if a script queries the
computed value
of a property (or other data depending on it) as it is transitioning, it will see an intermediate value that represents the current animated value of the property.
The transition for a property is defined using a number of new properties. For example:
Example(s):
div {
transition-property: opacity;
transition-duration: 2s;
The above example defines a transition on the
opacity
property that, when a new value is assigned to it, will cause a smooth change between the old value and the new value over a period of two seconds.
Each of the transition properties accepts a comma-separated list, allowing multiple transitions to be defined, each acting on a different property. In this case, the individual transitions take their parameters from the same index in all the lists. For example:
Example(s):
div {
transition-property: opacity, left;
transition-duration: 2s, 4s;
This will cause the
opacity
property to transition over a period of two seconds and the left property to transition over a period of four seconds.
In the case where the lists of values in transition properties
do not have the same length, the length of the
transition-property
list determines the number of items in
each list examined when starting transitions. The lists are
matched up from the first value: excess values at the end are
not used. If one of the other properties doesn’t have enough
comma-separated values to match the number of values of
transition-property
, the user agent must calculate its used value by
repeating the list of values until there are enough. This
truncation or repetition does not affect the computed value.
Note: This is analogous to the behavior of the
background-*
properties, with
background-image
analogous to
transition-property
Example(s):
div {
transition-property: opacity, left, top, width;
transition-duration: 2s, 1s;
The above example defines a transition on the
opacity
property of 2 seconds duration, a
transition on the
left
property of 1
second duration, a transition on the
top
property of 2 seconds duration and a
transition on the
width
property of 1
second duration.
While authors can use transitions to create dynamically changing content,
dynamically changing content can lead to seizures in some users.
For information on how to avoid content that can lead to seizures, see
Guideline 2.3:
Seizures:
Do not design content in a way that is known to cause seizures
[WCAG20]
).
Tests
animate-with-color-mix.html
(live test)
(source)
color-transition-premultiplied.html
(live test)
(source)
text-shadow-composition.html
(live test)
(source)
text-shadow-interpolation.html
(live test)
(source)
vertical-align-composition.html
(live test)
(source)
vertical-align-interpolation.html
(live test)
(source)
z-index-interpolation.html
(live test)
(source)
idlharness.html
(live test)
(source)
inherit-background-color-transition.html
(live test)
(source)
inheritance.html
(live test)
(source)
properties-value-001.html
(live test)
(source)
properties-value-002.html
(live test)
(source)
properties-value-003.html
(live test)
(source)
properties-value-implicit-001.html
(live test)
(source)
retargetted-transition-with-box-sizing.html
(live test)
(source)
shadow-root-insertion.html
(live test)
(source)
transition-base-response-001.html
(live test)
(source)
transition-base-response-002.html
(live test)
(source)
transition-base-response-003.html
(live test)
(source)
transition-in-iframe-001.html
(live test)
(source)
2.1.
The
transition-property
Property
The
transition-property
property specifies the name of the CSS property to which the transition is applied.
Name:
transition-property
Value:
none

Initial:
all
Applies to:
all elements
Inherited:
no
Percentages:
N/A
Computed value:
the keyword
none
else a list of identifiers
Canonical order:
per grammar
Animation type:
not animatable
Tests
move-after-transition.html
(live test)
(source)
transition-end-event-shorthands.html
(live test)
(source)
transition-property-computed.html
(live test)
(source)
transition-property-invalid.html
(live test)
(source)
transition-property-valid.html
(live test)
(source)
pseudo-element-transform.html
(live test)
(source)
pseudo-elements-001.html
(live test)
(source)
pseudo-elements-002.html
(live test)
(source)
transition-background-position-with-edge-offset.html
(live test)
(source)
transition-property-001.html
(live test)
(source)
transition-property-002.html
(live test)
(source)
transition-property-003-manual.html (manual test)
(source)
transition-property-004-manual.html (manual test)
(source)
transition-property-005-manual.html (manual test)
(source)
transition-property-006-manual.html (manual test)
(source)
transition-property-007-manual.html (manual test)
(source)
transition-property-008-manual.html (manual test)
(source)
transition-property-009-manual.html (manual test)
(source)
transition-property-010-manual.html (manual test)
(source)
transition-property-011-manual.html (manual test)
(source)
transition-property-012-manual.html (manual test)
(source)
transition-property-013-manual.html (manual test)
(source)
transition-property-014-manual.html (manual test)
(source)
transition-property-015-manual.html (manual test)
(source)
transition-property-016-manual.html (manual test)
(source)
transition-property-017-manual.html (manual test)
(source)
transition-property-018-manual.html (manual test)
(source)
transition-property-019-manual.html (manual test)
(source)
transition-property-020-manual.html (manual test)
(source)
transition-property-021-manual.html (manual test)
(source)
transition-property-022-manual.html (manual test)
(source)
transition-property-023-manual.html (manual test)
(source)
transition-property-024-manual.html (manual test)
(source)
transition-property-025-manual.html (manual test)
(source)
transition-property-026-manual.html (manual test)
(source)
transition-property-027-manual.html (manual test)
(source)
transition-property-028-manual.html (manual test)
(source)
transition-property-029-manual.html (manual test)
(source)
transition-property-030-manual.html (manual test)
(source)
transition-property-031-manual.html (manual test)
(source)
transition-property-032-manual.html (manual test)
(source)
transition-property-033-manual.html (manual test)
(source)
transition-property-034-manual.html (manual test)
(source)
transition-property-035-manual.html (manual test)
(source)
transition-property-036-manual.html (manual test)
(source)
transition-property-037-manual.html (manual test)
(source)
transition-property-038-manual.html (manual test)
(source)
transition-property-039-manual.html (manual test)
(source)
transition-property-040-manual.html (manual test)
(source)
transition-property-041-manual.html (manual test)
(source)
transition-property-042-manual.html (manual test)
(source)
transition-property-043-manual.html (manual test)
(source)
transition-property-044-manual.html (manual test)
(source)
transition-property-045-manual.html (manual test)
(source)
transition-test.html
(live test)
(source)
transition-zero-duration-with-delay.html
(live test)
(source)

all

A value of
none
means that no property will transition.
Otherwise, a list of properties to be transitioned, or the
keyword
all
which indicates that all properties are to be
transitioned, is given.
If one of the identifiers listed is not a recognized property
name, the implementation must
still start transitions on the animatable properties in the
list using the duration, delay, and timing function at their
respective indices in the lists for
transition-duration
transition-delay
, and
transition-timing-function
. In other
words, unrecognized properties must be kept in
the list to preserve the matching of indices.
The

production in

also excludes the keyword
none
in addition to the keywords always excluded from

This means that
none
inherit
, and
initial
are not
permitted as items within a list of more that one identifier;
any list that uses them is syntactically invalid.
For the keyword
all
or if one of the identifiers listed is a
shorthand property, implementations must start transitions for
all its longhand sub-properties (or, for
all
, all properties), using the duration, delay,
and timing function at the index corresponding to the shorthand.
If a property is specified multiple times in the value of
transition-property
(either on its own, via a shorthand that
contains it, or via the
all
value), then the transition that
starts uses the duration, delay, and timing function at the
index corresponding to the
last
item in the value of
transition-property
that calls for animating that property.
Note: The
all
value and
all
shorthand
property work in similar ways, so the
all
value is just like a shorthand that
covers all properties.
2.2.
The
transition-duration
Property
The
transition-duration
property defines the length of time that a transition takes.
Name:
transition-duration
Value: