
Key takeaways
- Motion in software should name a state change — not fill a quiet screen.
- Every animation needs a job on the taxonomy. If it has no job, cut it or gate it behind reduced motion.
- Hand off duration, easing, purpose, and the static fallback in one table. Guessing in code is how motion becomes decoration.
They opened the panel. Something moved for six hundred milliseconds. They still could not tell what changed.
That is motion design for software when animation is decoration. The interface looks alive. The user is no wiser. A dashboard that pulses on every hover, a modal that slides from nowhere, a list that staggers in because the template did — none of that explains state. It spends attention.
UI motion design is not a reel of transitions. It is how the product tells someone what just happened: data arrived, a step finished, an error blocked the send, a view replaced another. If the motion does not answer a question, it is noise — and noise gets turned off.
Four jobs motion can do — and one it cannot
Before you pick easing or duration, name the job. Interface animation purpose falls into a short taxonomy. If an animation does not fit one row, it does not ship.
| Job | What the user needs to know | Example |
|---|---|---|
| State change | Something appeared, updated, or left | Row added after save; error banner entered |
| Spatial continuity | Where this came from or where it went | Panel expanded from the control that opened it |
| Priority | What to read or act on first | Focus moved to the blocking field |
| Feedback | The system received the action | Button loading, success check, failed send |
The job motion cannot do is atmosphere. Ambient loops, parallax for parallax, staggered reveals with no new information — those are mood, not mechanism. They do not survive a busy screen or a user who has motion sensitivity turned on. Web design trends for 2027 already named quieter motion as useful production, not a palette choice. This is the software version: motion that explains state, not decorates the interface.
Motion design for SaaS gets expensive when every screen invents its own rules. A design system should carry four durations, two easings, and the reduced-motion fallback — not forty-one bespoke tweens in the handoff. Campaign motion that leaves the product should follow the same stage gates as animation production from storyboard to delivery: lock timing before polish.
Run the reduced-motion acceptance test
Enable reduced motion before you sign off the prototype. On macOS: System Settings → Accessibility → Display → Reduce motion. On Windows: Settings → Accessibility → Visual effects → Animation effects off. In the browser, confirm `prefers-reduced-motion: reduce` applies — that media query is how CSS and JavaScript should respect the preference.
Complete the product’s primary tasks with motion reduced:
1. Open and close every overlay — modal, drawer, popover, command palette. 2. Expand and collapse navigation, accordions, and nested settings. 3. Submit a form — loading, success, validation error, and recovery. 4. Move between major views — list to detail, tab to tab, route to route. 5. Trigger any auto-playing or looping animation on the landing or empty state.
Pass criteria:
| Check | Pass | Fail |
|---|---|---|
| State change | User can tell what changed without the animation | Change is only visible while moving |
| Essential information | Meaning does not depend on motion alone | Direction, order, or severity exists only in the tween |
| Interaction response | Action still feels acknowledged — instant swap, opacity, or focus | Control goes silent after click |
| Distraction | No infinite loop on the task path | Background motion continues during work |
| Duration | Reduced path is instant or near-instant | Same long choreography, slower |
W3C — Understanding Animation from Interactions (WCAG 2.2) treats motion triggered by interaction as something users must be able to disable unless animation is essential to the function or the information conveyed. Essential is narrow: a spinner that shows work in progress may qualify; a hero that drifts because the mood board did not.
This is the same family of work as accessibility as conversion: a path someone cannot follow is a bounce you will misread as traffic. Reduced motion is not an edge case. It is a finish line for whether your state changes work without the reel.
Handoff spec a front-end can ship
Designers often export a prototype and write "smooth transition." Front-end engineers guess. QA argues about whether it matched intent. The fix is one table per flow — not a separate motion bible nobody opens.
| Field | What to specify | Example |
|---|---|---|
| Element | Component and state | `SettingsDrawer` open / close |
| Trigger | User or system event | Tap `Account`; Escape key |
| Purpose | Taxonomy job | Spatial continuity + state change |
| From → To | Start and end states | Off-canvas right → visible; focus on first field |
| Duration | Max time at full motion | 240ms open; 180ms close |
| Easing | Named curve | `ease-out` open; `ease-in` close |
| Reduced motion | Exact fallback | Instant display; opacity 0→1 in 1ms or none |
| Focus | Where focus lands | First interactive control in drawer |
| Notes | Exceptions, breakpoints | No slide on viewports under 640px — full-screen swap |
Purpose and reduced-motion columns are not optional. Without them, implementation defaults to decoration — everything gets the same slide because that is what the library exports.
Keep durations short enough to read as response, not performance. Opening feedback under three hundred milliseconds; closing can be slightly faster. If an animation runs longer than the user’s next action, it is in the way.
When motion belongs in the system
Not every screen earns custom motion. Static software with one animated hero is inconsistent. Motion design for software belongs in the component layer: buttons, fields, overlays, lists, toasts. The product behaves the same in the settings panel as on the dashboard.
Web design sets type, color, and layout. Web development ships the tokens and the `prefers-reduced-motion` branch in code. Motion sits between them — too often locked in a prototype file the build never reads.
For a marketing site, one considered entrance on the primary call to action may be enough. For an app, the handoff table multiplies: every recurring pattern needs a row. That is why an app prototype is where motion purpose gets proven — toggles, errors, and empty states on real flows — before a full website or product surface scales the same rules across dozens of URLs.
Cut motion when:
- The static layout already shows the change — a new row, a visible badge, a clear error string.
- The animation repeats on every visit with no new information.
- The team cannot describe the taxonomy job in one sentence.
- Reduced motion fails the acceptance test and nobody has time to fix the fallback.
Keep motion when spatial continuity prevents disorientation — a drawer that clearly belongs to its trigger, a shared-element transition between list and detail, focus that follows a destructive confirm. Those are state explanations. They earn their milliseconds.
Explain the change, then ship the rules
You can audit motion alone: tag every animation with a taxonomy job, run the reduced-motion test on the critical paths, and fill the handoff table before engineering starts. That work does not require a rebuild. It requires naming what changed instead of what looked impressive in the review.
It gets harder when motion lives in twelve prototype files, no component owns the fallback, and marketing wants a loop on every landing while the app team wants instant swaps. Somebody has to hold the system — durations, easings, reduced-motion defaults, and QA that re-runs when a library updates.
CLICK.BLUE has designed and built interfaces since 2014 — twelve-plus years, fifty-plus businesses, a hundred-plus websites. Motion that explains state belongs in the design system and the handoff, not in a one-off hero someone forgot to disable.
Start with the flows that confuse people today. Name the job. Pass the reduced-motion test. Then ship the table the build can actually follow.



