designmotionhq

interaction

Star Rating

Five stars looks trivial. Hover, half-fills, and honest averages are where it breaks.

Watch on Instagram

Key insights

  • Preview on hover, don't wait for the click. Stars should fill ahead of the cursor so users see the value they're about to commit — a widget that only reacts on click hides the target until it's too late.
  • Keep the preview state separate from the committed value. When the pointer leaves without clicking, snap the display back to the saved rating; a naive build leaves it stuck on the last hovered star.
  • For averages, render fractional stars — a 4.4 is four full stars plus a fifth clipped to 44%. Rounding it up to five full stars is a lie that inflates perceived quality.
  • Stagger the fill ~30ms per star, left to right. Popping all five at once feels flat and lifeless; the sequential sweep feels alive.
  • Use fractional fill for input precision too — clumsy whole-star jumps read as cheap next to a smooth half-star land.
  • Stars are the input; pair them with a summary view (an average ring plus a distribution breakdown) to communicate the aggregate score at a glance.

Do / Don't

  • Do: Fill stars ahead of the cursor on hover so the value previews before commit
  • Do: Render partial fills so a 4.4 shows four stars plus a 44%-filled fifth
  • Do: Stagger the fill roughly 30ms per star, left to right, when a rating commits
  • Don't: Round averages up to full stars — it misrepresents the real score
  • Don't: Leave the preview stuck on the hovered value after the pointer leaves
  • Don't: Pop all five stars simultaneously — it reads as flat and dead

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