Skip to content

Easing and duration ​

Easing and duration create responsive and expressive motion

Applying easing and duration · Tokens & specs

Note

In the expressive update, components and motion now use the motion physics system, which uses springs. Products should migrate to the new system. The easing and duration system is still used for transitions and can be used by teams that haven't yet updated to GM3 Expressive, but is no longer maintained.

Tokens ​

Motion easing and duration can be implemented using easing and duration tokens. Learn more about design tokens

Design tokens

Token table

Machine-readable relationship table

Motion tokens · 1 token set · 45 tokens · live token table · DSDB TOKEN_TYPE_UNSPECIFIED.20543ce18892f7d9

  • Default context: Platform: Android · Motion scheme: Standard
  • Not configurable here (group default used): Theme: Light · Audience: 1P Baseline · Font: Static · Contrast: Default · iOS dark theme elevation: None · iOS weight setting: Default · Language height: Small
  • Other contexts: Platform: Web, Compose · Motion scheme: Expressive. "Other contexts" lists values that differ from the default when only that one context changes.
  • Reference chain: aliases from the token to its source value (token → alias → … → value). "—" means the token holds a literal value.

Motion · md.sys.motion · 45 tokens

For all motion. Includes spring tokens (physics system), and legacy easing and duration tokens.

GroupTokenTypeReference chainResolved valueOther contexts
Easingmd.sys.motion.easing.emphasizedCubic bezier—M 0,0 C 0.05, 0, 0.133333, 0.06, 0.166666, 0.4 C 0.208333, 0.82, 0.25, 1, 1, 1Web: cubic-bezier(0.2, 0, 0, 1) via md.sys.motion.easing.standard
Compose: cubic-bezier(0.2, 0, 0, 1)
Easingmd.sys.motion.easing.emphasized.accelerateCubic bezier—cubic-bezier(0.3, 0, 0.8, 0.15)—
Easingmd.sys.motion.easing.emphasized.decelerateCubic bezier—cubic-bezier(0.05, 0.7, 0.1, 1)—
Easingmd.sys.motion.easing.standardCubic bezier—cubic-bezier(0.2, 0, 0, 1)—
Easingmd.sys.motion.easing.standard.accelerateCubic bezier—cubic-bezier(0.3, 0, 1, 1)—
Easingmd.sys.motion.easing.standard.decelerateCubic bezier—cubic-bezier(0, 0, 0, 1)—
Easingmd.sys.motion.easing.legacyCubic bezier—cubic-bezier(0.4, 0, 0.2, 1)—
Easingmd.sys.motion.easing.legacy.accelerateCubic bezier—cubic-bezier(0.4, 0, 1, 1)—
Easingmd.sys.motion.easing.legacy.decelerateCubic bezier—cubic-bezier(0, 0, 0.2, 1)—
Easingmd.sys.motion.easing.linearCubic bezier—cubic-bezier(0, 0, 1, 1)—
Durationmd.sys.motion.duration.short1Duration—50ms—
Durationmd.sys.motion.duration.short2Duration—100ms—
Durationmd.sys.motion.duration.short3Duration—150ms—
Durationmd.sys.motion.duration.short4Duration—200ms—
Durationmd.sys.motion.duration.medium1Duration—250ms—
Durationmd.sys.motion.duration.medium2Duration—300ms—
Durationmd.sys.motion.duration.medium3Duration—350ms—
Durationmd.sys.motion.duration.medium4Duration—400ms—
Durationmd.sys.motion.duration.long1Duration—450ms—
Durationmd.sys.motion.duration.long2Duration—500ms—
Durationmd.sys.motion.duration.long3Duration—550ms—
Durationmd.sys.motion.duration.long4Duration—600ms—
Durationmd.sys.motion.duration.extra-long1Duration—700ms—
Durationmd.sys.motion.duration.extra-long2Duration—800ms—
Durationmd.sys.motion.duration.extra-long3Duration—900ms—
Durationmd.sys.motion.duration.extra-long4Duration—1000ms—
Stylemd.sys.motion.pathMotion path—standard path Linear—
Springmd.sys.motion.spring.fast.spatial.dampingNumeric—0.9Expressive: 0.6
Springmd.sys.motion.spring.fast.spatial.stiffnessNumeric—1400Expressive: 800
Springmd.sys.motion.spring.fast.effects.dampingNumeric—1—
Springmd.sys.motion.spring.fast.effects.stiffnessNumeric—3800—
Springmd.sys.motion.spring.default.spatial.dampingNumeric—0.9Expressive: 0.8
Springmd.sys.motion.spring.default.spatial.stiffnessNumeric—700Expressive: 380
Springmd.sys.motion.spring.default.effects.dampingNumeric—1—
Springmd.sys.motion.spring.default.effects.stiffnessNumeric—1600—
Springmd.sys.motion.spring.slow.spatial.dampingNumeric—0.9Expressive: 0.8
Springmd.sys.motion.spring.slow.spatial.stiffnessNumeric—300Expressive: 200
Springmd.sys.motion.spring.slow.effects.dampingNumeric—1—
Springmd.sys.motion.spring.slow.effects.stiffnessNumeric—800—
Othermd.sys.motion.spring.fast.spatialCustom compositecomposite
+2 variation axes
damping 0.9 · stiffness 1400Expressive: damping 0.6 · stiffness 800
Othermd.sys.motion.spring.fast.effectsCustom compositecomposite
+2 variation axes
damping 1 · stiffness 3800—
Othermd.sys.motion.spring.default.spatialCustom compositecomposite
+2 variation axes
damping 0.9 · stiffness 700Expressive: damping 0.8 · stiffness 380
Othermd.sys.motion.spring.default.effectsCustom compositecomposite
+2 variation axes
damping 1 · stiffness 1600—
Othermd.sys.motion.spring.slow.spatialCustom compositecomposite
+2 variation axes
damping 0.9 · stiffness 300Expressive: damping 0.8 · stiffness 200
Othermd.sys.motion.spring.slow.effectsCustom compositecomposite
+2 variation axes
damping 1 · stiffness 800—

Easing ​

Emphasized easing set ​

This set is the most common because it captures the expressive style of M3.

Emphasized

Emphasized decelerate

Emphasized accelerate

Info/PlatformEmphasizedEmphasized decelerateEmphasized accelerate
Tokenmd.sys.motion.easing.emphasizedmd.sys.motion.easing.emphasized.deceleratemd.sys.motion.easing.emphasized.accelerate
AndroidpathInterpolator(M 0,0 C 0.05, 0, 0.133333, 0.06, 0.166666, 0.4 C 0.208333, 0.82, 0.25, 1, 1, 1)PathInterpolator(0.05f, 0.7f, 0.1f, 1f)PathInterpolator(0.3f, 0f, 0.8f, 0.15f)
CSSN/A (Use Standard as a fallback)cubic-bezier(0.05, 0.7, 0.1, 1.0)cubic-bezier(0.3, 0.0, 0.8, 0.15)
FluttereaseInOutCubicEmphasizedCubic(0.05, 0.7, 0.1, 1.0);Cubic(0.3, 0.0, 0.8, 0.15);
iOSN/A (Use Standard as a fallback)ControlPoints:0.05f:0.7f:0.1f:1.0f];ControlPoints:0.3f:0.0f:0.8f:0.15f];
After EffectsUse After Effects Easing Panel (download)Use After Effects Easing Panel (download)Use After Effects Easing Panel (download)

Standard easing set ​

This set is used for simple, small, or utility-focused transitions.

Standard

Standard decelerate

Standard accelerate

StandardStandard decelerateStandard accelerate
Tokenmd.sys.motion.easing.standardmd.sys.motion.easing.standard.deceleratemd.sys.motion.easing.standard.accelerate
AndroidPathInterpolator(0.2f, 0f, 0f, 1f)PathInterpolator(0f, 0f, 0f, 1f)PathInterpolator(0.3f, 0f, 1f, 1f)
CSScubic-bezier(0.2, 0.0, 0, 1.0);cubic-bezier(0, 0, 0, 1);cubic-bezier(0.3, 0, 1, 1);
FlutterCubic(0.2, 0.0, 0, 1.0);Cubic(0, 0, 0, 1);Cubic(0.3, 0, 1, 1);
iOSControlPoints:0.2f:0.0f:0.0f:1.0fControlPoints:0.0f:0.0f:0.0f:1.0fControlPoints:0.3f:0.0f:1.0f:1.0f];
After EffectsUse After Effects Easing Panel (download)Use After Effects Easing Panel (download)Use After Effects Easing Panel (download)

Duration ​

Short durations ​

These are used for small utility-focused transitions.

TokenValue
md.sys.motion.duration.short150ms
md.sys.motion.duration.short2100ms
md.sys.motion.duration.short3150ms
md.sys.motion.duration.short4200ms

Selection controls have a short duration of 200ms with Standard easing

Medium durations ​

These are used for transitions that traverse a medium area of the screen.

TokenValue
md.sys.motion.duration.medium1250ms
md.sys.motion.duration.medium2300ms
md.sys.motion.duration.medium3350ms
md.sys.motion.duration.medium4400ms

A FAB expanding into a Sheet uses a 400ms duration with Emphasized easing

Long durations ​

These durations are often paired with Emphasized easing. They're used for large expressive transitions.

TokenValue
md.sys.motion.duration.long1450ms
md.sys.motion.duration.long2500ms
md.sys.motion.duration.long3550ms
md.sys.motion.duration.long4600ms

A Card expanding to full screen uses a long 500ms duration with Emphasized easing

Extra long durations ​

Though rare, some transitions use durations above 600ms. These are usually used for ambient transitions that don't involve user input.

TokenValue
md.sys.motion.duration.extra-long1700ms
md.sys.motion.duration.extra-long2800ms
md.sys.motion.duration.extra-long3900ms
md.sys.motion.duration.extra-long41000ms

An ambient carousel auto-advance transition uses an extra long 1000ms duration with emphasized easing

Unofficial offline mirror. Content © Google, licensed under CC BY 4.0.