designmotionhq

interaction

Filter Chips

200 results. Three taps. 12 left.

Watch on Instagram

Key insights

  • Give every chip three distinct visual states — idle (surface + border, tappable but not chosen), active (filled + check, clearly selected), and disabled (dimmed, no results behind it). If active looks like idle, the filter feels broken.
  • Make the combination logic legible: OR within a group widens the net (more colors = more matches), AND across groups narrows it (adding a size filters the set down).
  • Update the result count on the same frame as the tap. If the number doesn't move, users read it as 'nothing happened' and tap twice.
  • Always ship a single clear-all reset. Stacked filters trap users, and one tap back to zero is the escape hatch — pair it with a live count so the reset is legible.
  • When chips outrun the screen, keep them in one horizontal scrolling row with a right-edge fade that hints at more. Wrapping into a multi-row wall buries the results below the fold.
  • Pin active filters in a sticky summary bar on top so users can always see why the list shrank.

Do / Don't

  • Do: Update the result count instantly on every tap, same frame as the state change
  • Do: Give each chip clearly distinct idle, active, and disabled states
  • Do: Offer a single clear-all reset paired with a live result count
  • Don't: Let active chips look identical to idle ones — the filter reads as broken
  • Don't: Wrap overflowing chips into a multi-row wall that pushes results off-screen
  • Don't: Leave the count unchanged after a tap — users assume it failed and tap again

Want Claude to build this correctly?

UX Engine gives Claude Code the senior-designer reasoning behind every pattern.

The Design System Blueprint

An 11-page visual guide to consistent, scalable UI: colors, typography, spacing, components, motion.

Get the Blueprint — free

The PDF, plus emails about new patterns and my tools. Unsubscribe anytime.

Related patterns