Fusion UI LogoFusion UI Logo
Fusion UI LogoFusion UI Logo
/
Getting Started
Concepts
Components
Example Apps
Getting Started
Concepts
Components
Example Apps
Fusion UI LogoFusion UI Logo
Getting Started
Concepts
Components
Example Apps
Overview
Foundations
Color
Typography
Spacing & Radius
Core Concepts
Surfaces & Elevation
States
Nesting
Views & Offsets
Animations
Touch & Mobile

Animations

Durations, easing, what moves and how reduced motion is respected.

Principles

  • Motion explains change. Things move to show where they come from and where they go: the tab indicator slides to the new tab, a panel grows out of its button, a sheet slides in from the edge.
  • Motion is fast. Durations stay at or below 250ms, so the interface never waits for an animation.
  • Motion is optional. Everything works and makes sense without it, for people who turned it off.

Durations

Press play to compare the three durations.

--duration--xx-fast · 50ms · Tiny changes of small controls, e.g. checkbox marks
--duration--x-fast · 150ms · Hover, color changes, overlays coming and going
--duration--fast · 250ms · Expanding panels, moving indicators

Easing & transitions

All animations use one easing, ease-in-out. The transition tokens combine duration and easing, ready for the transition property.

TokenValue
--easingease-in-out
--transition--xx-fastvar(--duration--xx-fast) var(--easing)
--transition--x-fastvar(--duration--x-fast) var(--easing)
--transition--fastvar(--duration--fast) var(--easing)
.panel {
transition:
grid-template-rows var(--transition--fast),
opacity var(--transition--x-fast);
}

What moves

ElementAnimationDuration
Hover and focusColor, background and borderx-fast
Tabs, segmented button, on-page menuIndicator slides to the active itemfast
Expansion panelHeight grows from 0 to the contentfast
Sheet, modal, popover, blanketSlide or fade in and outx-fast
ToolbarSlides in from the bottomx-fast
ViewsOffsets of fixed views follow each otherx-fast
ListGridBoard

The panel grows to its content height with --transition--fast.

Hover me: color changes use --transition--x-fast

Reduced motion

When the operating system asks for reduced motion, fusion-css sets all duration tokens to 0s. Every transition and animation built on the tokens is skipped automatically — one more reason to never hard code durations.

Motion started from JavaScript has to check the media query itself.

const reduceMotion = window.matchMedia("(prefers-reduced-motion: reduce)").matches;
element.scrollIntoView({behavior: reduceMotion ? "instant" : "smooth"});
On this page
  • Principles
  • Durations
  • Easing & transitions
  • What moves
  • Reduced motion