How to buildOctober 11, 202610 min read
Motion and animationStep 4 of 4

Transitions between screens and states: how motion explains where you've landed

In short

A screen transition exists so people understand where they've landed and how to get back: a step deeper slides in from the right or grows out of the tapped element, going back plays the same motion in reverse, and a modal rises from the bottom. A good transition is short (around 200–300 ms for large screen changes), never blocks input, keeps a shared element — like a card expanding into a page — and falls back to a simple fade when the user has turned on “reduce motion”.

Deep diveLevel: IntermediateMotion Design

After this you will be able to

  • Choose a transition’s motion from the spatial model: deeper, back, modal, side menu, tabs
  • Explain shared element transitions and the FLIP technique
  • Decide when to use the View Transitions API in same-document and cross-document mode, and add it as a progressive enhancement
  • Check transitions against a checklist: 200–300 ms, interruptible, skeleton instead of a blank screen, reduced motion
Contents
  1. 01Why abrupt screen swaps are disorienting
  2. 02The spatial model: forward, back, deeper
  3. 03Continuity: shared elements and state changes
  4. 04The View Transitions API and native transitions
  5. 05Loading between screens: never show emptiness
  6. 06Duration, performance and reduced motion
  7. 07Common mistakes and a checklist

Why abrupt screen swaps are disorienting

When one screen instantly replaces another, people have to rebuild the picture from scratch: is this a new page, a window on top of the old one, or the same page scrolled down? On a phone the whole screen changes, and the link between “before” and “after” is lost. Nielsen Norman Group notes that accordions, anchor links and full-screen menu overlays that appear instantly can be disorienting: without an animated cue it's unclear whether a new page opened or something else happened.

A transition solves this in a fraction of a second: it shows where the new screen came from, where the old one went and which way leads back. It isn't decoration but part of navigation — just like breadcrumbs or a Back button. The previous lesson in this track covered micro-interactions on individual buttons and toggles; this one is about whole screens and large state changes.

The spatial model: forward, back, deeper

It helps to think of an interface as a space people move through. Then every direction gets its own motion, and that motion is the same across the whole product. Nielsen Norman Group describes this kind of animation as an easily understood spatial metaphor for the user's location in the information space. A shopper's path through a catalog is the clearest example.

  1. 01Catalog
  2. 02Product page
  3. 03Reviews
  4. 04Checkout
Every step forward goes one level deeper; Back travels the same path in reverse.

Drill down: from a list into an item

Motion
The new screen slides in from the right or grows out of the tapped element
What the person understands
I went one level down, and the previous screen is still nearby

Going back

Motion
The same motion in reverse: the screen leaves to the right, the list returns
What the person understands
I'm back where I came from

Modal, bottom sheet

Motion
Rises from the bottom and drops back down when closed
What the person understands
This is a temporary task on top of the current screen, not a new page

Side menu

Motion
Slides out from the side where its button is
What the person understands
The menu is attached to the edge and can be pushed back

Sibling tabs

Motion
A short shift towards the selected tab, or a fade in place
What the person understands
I'm on the same level, just in the next section

The core rule is reversibility. Apple's Human Interface Guidelines give an example: if someone reveals a view by sliding it down from the top, they don't expect to dismiss it by sliding it to the side. Motion sets an expectation, and the dismiss gesture has to match it. That's why at InterLAB we define the transition system alongside the design system: one set of motions and durations for the whole product rather than an eyeballed decision for each screen.

Continuity: shared elements and state changes

The strongest continuity technique is the shared element transition. Someone taps a card in a catalog, and instead of disappearing it expands: the image grows into the header of the new page, the title moves into place, and the rest of the content fades in around it. The eye follows a single object and never loses it, so the question “did I tap the right thing?” simply doesn't come up.

The same principle works inside a single screen, when what changes is a state rather than a page:

  • Accordion: the section grows smoothly and the content below slides down instead of jumping — it's clear what opened
  • Tabs: the active indicator slides under the new tab, and the content swaps with a short fade
  • Removing from a list: the row collapses and its neighbours close the gap — it's clear what went away and that nothing broke
  • Adding to a list: the new row pushes its neighbours apart and fades in place, instead of appearing with a jolt of the whole list

To keep these rearrangements smooth even on a modest phone, developers use a technique called FLIP. The name comes from the first letters of four steps:

  1. First — “before”

    Record where the element is and how big it is right now.

  2. Last — “after”

    Apply the new state instantly and measure where the element ended up.

  3. Invert — “put it back”

    Shift the element back to its old position with transform — visually nothing has changed yet.

  4. Play — “let go”

    Remove the shift and the element travels from the old position to the new one. The browser only animates transform, which is cheap.

The View Transitions API and native transitions

For a long time smooth page-to-page transitions were mostly the privilege of single-page apps: on a regular site, following a link simply showed the new page. The View Transitions API changes that. The browser takes a snapshot of the old state, applies the new one and animates the difference. By default that's a cross-fade, and elements that share the same view-transition-name on the old and new screen can be animated from one position to the other — that's how shared elements are built on the web.

Same-document

How it's triggered
Calling document.startViewTransition() around the page update
Where it fits
Single-page apps, filters, tabs, switching list views

Cross-document

How it's triggered
Both pages opt in with the CSS rule @view-transition { navigation: auto; }; a regular link navigation triggers it
Where it fits
Multi-page sites; works only for same-origin navigations

In mobile apps much of this is already built into the standard navigation components, and it's better to rely on them than to invent your own: users know these motions from every other app on their phone. For a distinct task on iOS, Apple's HIG recommends sheets and popovers. On Android, Jetpack Compose builds shared elements from SharedTransitionLayout and the sharedElement and sharedBounds modifiers, while the predictive back gesture shows an animated preview of the screen the person will return to before the gesture is complete.

Loading between screens: never show emptiness

The worst transition is the one that finishes with nothing to show: a blank white screen or a lone spinner. People can't tell whether the app is working. The fix is a skeleton screen: the new screen arrives immediately with grey blocks where the title, image and lines of text will be, and the data fades in as it loads.

Nielsen Norman Group recommends skeleton screens for page loads with a wait under 10 seconds, and a progress bar for longer operations. A skeleton should mirror the structure of the upcoming page: a bare frame of header and background with no content outlines is, by NN/g's assessment, essentially no better than a spinner.

The second technique is optimistic navigation: the transition starts the moment someone taps, without waiting for the server to respond.

  • The screen opens instantly with what's already known: from the card in the list we know the name, image and price — show them straight away
  • Everything else loads into the skeleton in its place, without layout jumps
  • A loading error is shown inside the new screen with a Retry button, not as a silent jump back

Duration, performance and reduced motion

A transition costs people time on every tap, so duration matters more than spectacle. Nielsen Norman Group considers 200–300 ms appropriate for substantial screen changes such as a modal moving into view, treats 400 ms as a very slow animation reserved for big movements, and notes that around 500 ms motion starts to feel like a drag. The same article points out that elements entering the screen usually get a slightly longer duration than those leaving it.

duration
100ms
200ms
300ms
500ms
1000ms
Press Replay and compare: 200–300 ms reads as a transition, 1000 ms reads as waiting.
  • Animate transform and opacity — as web.dev recommends, the browser handles them more cheaply than changes to size and spacing
  • Don't run heavy effects mid-transition: full-screen blur, large shadows
  • Test on an inexpensive Android phone: a juddering transition is worse than none at all
  • Don't block input: if someone taps Back mid-animation, the transition should interrupt and reverse, not play out to the end

Reduced motion deserves its own attention. If someone has turned it on in their system settings, a site can detect it through the prefers-reduced-motion media query. WCAG success criterion 2.3.3 describes the requirement: motion animation triggered by interaction should be possible to disable unless it is essential. For transitions this means replacing slides, scaling and a flying card with a short fade in place. The meaning — “the screen changed” — stays, and the motion that can cause nausea is gone.

Common mistakes and a checklist

Gets in the way

  • A long transition during which nothing can be tapped
  • Every screen animates differently: one slides in from the right, another from the bottom, a third spins
  • Motion for effect that doesn't explain where you've landed
  • Back plays the same animation as forward
  • A blank white screen after a beautiful transition

Helps

  • A short transition that can be interrupted
  • One system: deeper from the right, temporary from the bottom, siblings with a fade
  • A shared element that connects the list and the page
  • Reverse motion when going back
  • A skeleton instead of emptiness
  • Each transition type (drill down, back, modal, tabs) has one motion, and it's the same across the whole product
  • Back plays the forward motion in reverse
  • Modals and sheets rise from the bottom, close the same way and have an obvious close button
  • Large transitions take roughly 200–300 ms, and nothing runs longer than 400–500 ms
  • Transitions can be interrupted, and input isn't blocked during animation
  • A skeleton appears between screens, not a blank page or a lone spinner
  • Only transform and opacity are animated, and transitions are tested on an inexpensive phone
  • With prefers-reduced-motion, slides and scaling are replaced by a fade
A transition has done its job if, afterwards, nobody wonders where they are.
Tell us about your task — we'll review your request and get back to you

Got a project?
We'll scope and estimate it — for free.

Tell us about the product or the problem. After reviewing the task we'll come back with an architecture, a timeline and a price for the first version.

  • Scope and risks estimated before we start
  • NDA — yours or ours
  • Work starts within a week

Please do not send passwords, access keys or source code through this form — we will agree a safe way to share access separately.

By clicking the button you agree to the processing of your personal data.