Motion should make Firefox feel faster, clearer, and more human. These principles help teams guide attention, preserve continuity, communicate system status, and add personality without compromising usability.
Motion brings clarity, continuity, and character to Firefox. Used well, it helps people understand what changed, where things came from, and what’s happening next.
Principle 1
Directional
Motion is primarily a navigational tool. It should help users understand where things come from, where they go, what changed, and how interfaces relate across states.
Guidance
- Navigation transitions should preserve spatial relationships, such as panels sliding from their origin.
- Button interactions should reinforce input -> response: press, feedback, result.
- Feature callouts should animate from the UI element they reference, not arbitrarily appear.
- Avoid motion that competes with primary tasks or distracts from content.
Stress test
- Direction: Is the origin, path, and destination clear?
- Continuity: Does the transition stay coherent between states, even when interrupted?
- Purpose: Does the motion support the task rather than feel purely decorative?
- Attention: Does it guide focus without competing with nearby activity?
Principle 2
Fast
Firefox is a tool for getting things done. Motion should never slow users down, distract from content, or add friction. Motion should feel immediate and efficient.
Guidance
- Keep durations short and consistent, especially for frequent actions like opening, closing, and switching tabs, which should feel snappy and lightweight.
- Prioritize perceived performance with instant feedback, even when work continues asynchronously.
- Avoid layered or chained animations, and limit most interactions to one meaningful animated change at a time.
- Make motion responsive to interruptions, rapid input, and repeated actions.
- Use motion to clearly communicate system status, including loading, processing, and completed states.
Stress test
- Responsiveness: Does motion respond immediately to input?
- Efficiency: Does animation stay lightweight during repeated use?
- Simplicity: Does motion let users act right away, without adding unnecessary steps, delays, or layers?
- Resilience: Does animation remain responsive during rapid interaction?
- Feedback: Is feedback communicated quickly, even when processing continues asynchronously?
Loading indicators
Visual cues showing content is loading or processing.
- Consider a spinner animation affordance on anything that may run over 200ms.
- Set a minimum time for loading indicator display times so that animations won't look like a quick confusing flash in case timing runs slightly over 200ms. We recommend 400ms minimum display time.
Don't show a spinner animation if the wait time for the action will be less than 200ms. Any animation under 200ms can be seen as a quick flash and potentially confuse users.
Principle 3
Personality
Motion should express Firefox's personality. It should feel fluid and quietly playful without compromising usability.
Motion should show up in subtle ways, in low-risk, low-frequency moments that reward interaction and make the product feel alive. When motion is used in this way, it’s called expressive motion.
Guidance
- Use expressive motion in onboarding, empty states, and success states.
- Icon and illustration animations can carry more personality than core UI transitions.
- Custom easing curves may be used for icon and onboarding animations when appropriate to the animation's intent and context.
- Loading states can introduce subtle liveliness, but should never feel slow or blocking.
- Avoid overuse so delight doesn’t become distracting or annoying.
Stress test
- Personality: Does motion add character without slowing the interaction?
- Intentionality: Is expressive motion used selectively and purposefully?
- Durability: Will the animation still feel appropriate after repeated exposure?
- Refinement: Does the motion feel fluid and polished rather than attention-seeking?
- Delight: Is delight expressed through subtle timing, easing, or choreography instead of excess movement?
Principle 4
Consistence
Motion should behave consistently across Firefox, using a shared system of timing, easing, and interaction patterns. A consistent motion language builds predictability, learnability, trust, and polish.
Guidance
- Define a standard set of durations, such as fast, standard, and slow tiers.
- Use consistent easing curves to similar interaction types. Reusable components should share motion curves where possible, while icon and onboarding animations may use custom context-specific motion.
- Similar components should animate the same way across surfaces.
- Establish patterns for enter and exit transitions, state changes, and feedback animations.
- Avoid one-off animations unless they serve a clear, intentional purpose or offer opportunities of delight (e.g., a grid of cards with a bounce animation every time you reload the page would be an unnecessary one-off animation).
- Motion may adapt to platform conventions and input methods while preserving core Firefox behaviors.
Stress test
- Consistency: Does the motion behave consistently across similar Firefox interactions?
- Timing: Are timing and easing aligned with established motion patterns?
- System: Does the animation feel like part of the same motion system?
- Necessity: Is new motion behavior introduced only when necessary?
- Adaptability: Does the motion adapt appropriately across platforms while preserving familiar Firefox behavior?
Primary chrome easing curves
Firefox desktop chrome uses the Standard and Emphasized easing curves for most layout and interaction motion, including standardized UI components such as panels, hover states, and menu transitions.
These curves are intended for functional UI motion, not expressive animations. Custom icon and onboarding animations should use motion tailored to their specific context and purpose.
Motion timing by component type
When motion cannot reuse a standard component's timing, map the interaction to the closest family below for duration and easing. Each Duration cell lists an acceptable range in milliseconds.
|
Component family |
Typical pace |
Duration |
Easing |
Practice |
|---|---|---|---|---|
|
Large spatial panels |
Expressive open; slightly quicker close |
Strip 160–200 ms; panels 190–230 ms; content fade 120–150 ms |
Emphasized |
Sidebar chrome, wide attached surfaces. Motion should explain where space came from; avoid snapping. |
|
Small panels & menus |
Medium-fast; exit can be a touch snappier than enter |
Panel travel 120–150 ms enter / 100–130 ms exit; content fade 100–130 ms |
Emphasized, with opacity |
Dropdowns, app menu surfaces. Combine position or scale with opacity so content does not pop in unreadably. |
|
Inline expansions |
Short spatial pass; keep the chrome lightweight |
90–110 ms (exit ~10–20 ms faster than enter) |
Emphasized |
Address bar results and similar strips. Structure and labeling matter more than the slide — never rely on motion alone for meaning. |
|
Drill & layered navigation |
Stagger enter/exit so parent and child stay legible |
Slide in 185 ms; out 130 ms (sub), 150 ms (parent); fade 85–110 ms (faster than slide) |
Emphasized (slide), Standard (fade) |
Submenus and drill-ins. Fade the parent and child quickly; keep the slide slightly longer so the stack stays readable. |
|
Toolbar & chrome hover |
Fast; reads as immediate feedback |
80–120 ms |
Standard |
Background fills on icons and controls following the pointer. Should not read as a separate “scene change.” |
|
Dense list rows |
Fastest hovers in the system |
40–60 ms |
Standard |
Synced tabs, long result lists. Shorter than toolbar hover so rows do not smear while scrolling. |
|
Icon press & micro-scale |
Press ends sooner than release |
Press 60 ms; release 100 ms |
Standard |
Reinforces click without lingering. Keep travel tiny. |
|
Icon & illustrative motion |
Long enough to read as delight; still bounded |
Per phase 150–400 ms typical; expressive sweeps up to ~950 ms when bounded and non-blocking |
Custom (see bookmark star) |
Success feedback, micro-celebrations, and other icon-sized flourishes. Keep motion confined to a small region, skippable or non-blocking, and never the only signal for important state. |
|
Confirmation toast |
Wait for intent, then a light reveal |
Delay 400–600 ms; reveal 100–150 ms |
Standard |
Confirmation toasts (e.g. bookmark saved) use a subtle, anchored reveal. Tab preview hover shares the same Standard easing and delay/reveal ranges. |
Principle 5
Accessible
Motion should be inclusive by default, designed from the start to reduce discomfort and disorientation rather than relying on fallback settings like reduced motion.
Guidance
- Avoid large-scale parallax, excessive zooming, sudden spatial shifts, or persistent ambient motion.
- Favor opacity and subtle position changes over dramatic movement.
- Keep motion predictable and tied to user actions.
- Ensure essential information is available without motion.
- Respect reduced motion preferences, but don’t rely on them as the only safeguard.
- Test with a range of sensitivities and real-world scenarios.
Stress test
- Comfort: Does the motion avoid sudden, excessive, or disorienting movement?
- Predictability: Is the animation anchored to a clear user action?
- Focus: Does the motion avoid sustained or competing visual activity?
- Endurance: Does the movement remain comfortable during extended use?
- Adaptability: Does the animation degrade gracefully when reduced motion is enabled?
WCAG criteria for animation and motion
WCAG success criterion for different animation criteria (from W3C.org):
Guideline 2.2 Enough Time
Provide users enough time to read and use content.
SC 2.2.2 Pause, stop, hide Learn more
For moving, blinking, scrolling, or auto-updating information, all the following are true:
Moving, blinking, scrolling
For any moving, blinking or scrolling information that (1) starts automatically, (2) lasts more than five seconds, and (3) is presented in parallel with other content, there is a mechanism for the user to pause, stop, or hide it unless the movement, blinking, or scrolling is part of an activity where it is essential.
Auto-updating
For any auto-updating information that (1) starts automatically and (2) is presented in parallel with other content, there is a mechanism for the user to pause, stop, or hide it or to control the frequency of the update unless the auto-updating is part of an activity where it is essential.
Guideline 2.3 Seizures and Physical Reactions
Do not design content in a way that is known to cause seizures or physical reactions.
SC 2.3.1 Three Flashes or Below Threshold Learn more
Web pages do not contain anything that flashes more than three times in any one second period, or the flash is below the general flash and red flash thresholds.
SC 2.3.3 Animation from interactions Learn more
Motion animation triggered by interaction can be disabled, unless the animation is essential to the functionality or the information being conveyed.
prefers-reduced-motion
Animated content can cause motion sickness and also be distracting. Users should be able to minimize animations. prefers-reduced-motion is a CSS media feature that can detect if a user has “reduced motion” settings enabled on their device so that developers can provide them an alternative CSS animation with reduced down motion. See Guideline 2.3 Seizures and Physical Reactions to learn more.
In Firefox, this setting is honored if (from MDN):
- In GTK/GNOME: Settings > Accessibility > Seeing > Reduced animation is turned on.
- In older versions of GNOME, GNOME Tweaks > General tab (or Appearance, depending on version) > Animations is turned off.
- Alternatively, add gtk-enable-animations = false to the [Settings] block of the GTK 3 configuration file.
- In Plasma/KDE: System Settings > Workspace Behavior -> General Behavior > "Animation speed" is set all the way to right to "Instant".
- In Windows 10: Settings > Ease of Access > Display > Show animations in Windows.
- In Windows 11: Settings > Accessibility > Visual Effects > Animation Effects
- In macOS: System Preferences > Accessibility > Display > Reduce motion.
- In iOS: Settings > Accessibility > Motion.
- In Android 9+: Settings > Accessibility > Remove animations.
- In Firefox about:config: Add a number preference called ui.prefersReducedMotion and set its value to either 0 for full animation or to 1 to indicate a preference for reduced motion. Changes to this preference take effect immediately.
Tools
Photosensitive Epilepsy Analysis Tool (PEAT)
A tool that helps to measure the effect of an animation on users with photosensitive epilepsy - PEAT. The Trace Center’s Photosensitive Epilepsy Analysis Tool (PEAT) is a free, downloadable resource for developers to identify seizure risks in their web content and software. It is especially helpful for borderline cases where an animation is larger/faster.