Design VocabularyDesign vocabulary · Edition 01

VOCABULARY / ENTRY

Ripple Effect

ripple-effect

Add to comparison +

A translucent circular wave that spreads outward from the touch point when a control is pressed, covering the control's surface and then fading; it is one concrete way Material Design expresses the pressed state, and belongs to the translucent "state layer" laid over a control.

Illustration · Editorial artwork, no interactive specimen yet
A frame-by-frame sketch: the same list row in a fictional FIELDNOTES app appears three times, showing from left to right a small circle at the touch point as the fingertip presses, a translucent circular wave spread to half the row's width, and the wave filling the whole row as it begins to fade; the text in the row is shown as grey placeholder bars.
A frame-by-frame sketch: the same list row in a fictional FIELDNOTES app appears three times, showing from left to right a small circle at the touch point as the fingertip presses, a translucent circular wave spread to half the row's width, and the wave filling the whole row as it begins to fade; the text in the row is shown as grey placeholder bars.

Recognizing it

  • The wave spreads outward with the finger or pointer's press position as its centre, rather than the whole surface changing colour at once
  • The wave is a translucent overlay, so the label and icon beneath stay readable
  • On release or moving away the wave fades and the control returns to its resting look

Concept boundary

A ripple is one way of implementing pressed-state feedback, not the pressed state itself: the pressed state answers "was my press received?", and the ripple answers it with a wave spreading from the touch point, where a colour change, an inset, or a shadow could answer the same question. It carries a distinct Material lineage and looks borrowed inside other design languages; nor is it a loading indicator or a result — a finished wave does not mean the action is done. Unlike hover and focus states, in Material's implementation the spreading animation belongs to the moment of pressing alone, while hover and focus show only a static state layer.

When to consider it

  • The product uses or sits close to the Material design language, and users already know this press feedback
  • Large tappable areas such as list rows and cards need to show where exactly the press landed
  • A touch interface has no hover state and needs a press confirmation more visible than a plain colour change

When to be cautious

  • The product's visual language has nothing to do with Material, so a borrowed ripple looks like part of another system
  • The ripple is the only feedback, and nothing remains once it is switched off under a reduced-motion preference
  • The page navigates or refreshes before the wave has played, so the user sees only a passing flicker

Tradeoff

A ripple says both where the press landed and that it landed, which is easier to notice on large touch targets than a colour change alone; the cost is its strong Material identity and its reliance on animation — when the animation is switched off or drops frames on low-end devices, it either vanishes or feels sluggish.

Conditional rules · Editorial advice

When A ripple expresses the pressed stateRecommendedStart the wave at the instant of pressing, and make sure that even with the animation switched off the control still shows a static colour or state-layer change for the press.
When A tap immediately navigates or replaces the contentRecommendedLeave the ripple enough time to be seen before the transition begins, or use press feedback that does not depend on animation.

Related entries

Pressed-State Feedback ↗Related, but different · Press feedback has to be designed for a pressable control

The ripple is one concrete implementation of pressed-state feedback in the Material language; the pressed state's requirements — immediate, distinguishable, acting only on release — bind the ripple as well, and the ripple is only one possible answer.

State Transition Animation ↗Related, but different · A ripple and a page or component transition play one after the other from a single tap

The ripple confirms the input was received and the transition explains how the interface changes; when they stack, let the ripple be seen before the transition starts.

Haptic Feedback ↗Works with · A press on a touch device needs stronger confirmation

The ripple confirms the press through the visual channel and haptic feedback through another; when the ripple is switched off under a reduced-motion preference, haptics and a static colour change can take over.

Focus Indicator ↗Related, but different · The same control supports both keyboard and pointer use

A ripple spreads only on press and cannot stand in for a persistently visible keyboard focus indicator; both must be present without obscuring each other.

Sources and what they support

Material Web · Ripple (docs/components/ripple.md) ↗

The documentation of Material Design's official web component library defines ripples as state layers that communicate the status of a component or interactive element, a state layer being a semi-transparent covering on the element. It says ripples display on hover and press pointer interactions, and notes that ripples are visual components with no assistive technology requirements. This entry takes from it that the ripple is a visual implementation of press feedback, and that it cannot carry accessible state information.

Retrieved: 2026-10-20 · Snapshot unconfirmed
Compose Multiplatform API · androidx.compose.material3 · ripple ↗

The API documentation calls Ripple a Material implementation of Indication that expresses different interactions by drawing ripple animations and state layers: it responds to a press by starting a new ripple animation, and to other interactions by showing a fixed state layer whose alpha varies with the interaction. This entry uses it to separate the ripple's spreading animation, which belongs to pressing, from the static state layer shown on hover and focus.

Retrieved: 2026-10-20 · Snapshot unconfirmed

Definitions reference these sources. Digital specimens, selection advice, relationships, and recipes are editorial work and have not been validated through user research.

Type extensions and implementation notes

This entry has no runnable specimen; the illustration is an editorial sketch that shows the wave spreading in frames and does not represent a verified implementation. Before shipping, confirm on a real touch device that the wave starts at the touch point and is distinguishable from hover and focus states, and recheck the static fallback with the system reduced-motion setting on.

{
  "states": [
    "rest",
    "pressed",
    "spreading",
    "fading"
  ],
  "a11y": [
    "The ripple is visual feedback only; the control's role, name, and state must still be expressed through accessible properties",
    "Under a reduced-motion preference the spreading animation is not played and a static state layer takes its place",
    "The ripple's translucent overlay must not lower the contrast between the label text and its background"
  ],
  "motion": "The wave begins spreading from the touch point on press, covers the control, and fades on release; under a reduced-motion preference the spread is omitted and only a static pressed state layer remains"
}

Open the Agent JSON file for this entryThis file repeats every field of this entry verbatim and adds its sources, archive status, and editorial scope.