figma guide

Designing rating stars and review UI in Figma: patterns, states, and handoff

Design star ratings, half-stars, review cards, and interactive score input in Figma with accessible states, variants, and Dev Mode specs for ecommerce and SaaS.

Published
Updated
Jun 16, 2026
Read time
6 min
Level
Beginner

Quick answer

Rating UI spans read-only display (4.2 ★ average), interactive input (tap to score), and full review cards (avatar, title, body, date)—model each as separate components with shared Star primitives and consistent size tokens (sm/md/lg). Build Star with fill=empty | half | full and state=default | hover | focus | disabled; wrap five stars in RatingDisplay (read-only) and RatingInput (editable). Support half-star display even if input is whole-star only, and document precision in Dev Mode. Pair with cards, avatars, and forms. Start from the Figma guides hub.


Who this is for

  • Product designers shipping ecommerce PDPs, marketplaces, app store listings, and SaaS review modules.
  • Design system teams aligning star icons, numeric scores, and review list density across surfaces.
  • Engineers implementing role="img" summaries, keyboard-selectable inputs, and half-star rounding rules.

Rating UI types

TypeInteractive?Typical placementComponent
Aggregate displayNoProduct header, search resultsRatingDisplay
User inputYesPost-purchase, feedback formsRatingInput
Review cardPartial (helpful vote)Review listsReviewCard
Compact badgeNoTable cells, cardsRatingBadge
Distribution barNoReview summary sidebarRatingHistogram

Verdict: never merge read-only and editable into one ambiguous component—engineers bind different events and ARIA roles.


Star primitive anatomy

PartPurposeSpec tip
Star iconVisual unitSVG or icon font; 16/20/24px sizes
Fill layerEmpty / half / fullMask or overlaid half polygon
GapSpace between stars2–4px; include in row width
Label (optional)Numeric score4.2 beside stars
Count (optional)Review volume(128) muted text
Star
├── Variant: fill=empty | half | full
├── Variant: size=sm | md | lg
├── Variant: state=default | hover | focus | disabled
└── Layer: Icon (vector)

RatingDisplay
├── Property: value (0–5, step 0.5)
├── Property: showValue (boolean)
├── Property: showCount (boolean)
└── Layer: Row of 5 Star instances (bound)

Use boolean operations or masks for crisp half-star fills at export—see export guide for SVG handoff.


Display vs input behavior

AspectRatingDisplayRatingInput
Roleimg with aria-labelradiogroup or slider
ValueRounded for displayUser-selected
Half starsShow 4.5 as 4 full + 1 halfOften whole stars only
HoverNonePreview fill up to cursor
FocusN/AOne star focusable or group
DisabledGray starsdisabled on group

Document rounding: e.g. 4.26 → 4.3 display, or 4.2 (128 reviews) with one decimal. Mismatch between stars and number erodes trust.


Size tokens

TokenStar pxUse case
sm14–16Tables, dense lists
md18–20Product cards, review cards
lg24–28Hero PDP, feedback form

Keep the same star shape across sizes—scale proportionally; do not swap icon sets per size.


RatingInput states

StateVisualNotes
EmptyAll stars outlinePrompt: “Rate your experience”
Hover previewFill up to hovered starDocument if hover clears on mouse leave
SelectedSolid fill to chosen valuePersist after click
FocusRing on focused starKeyboard: arrows adjust
ErrorBorder on group + message”Select a rating” on submit
DisabledMuted, no pointerRead-only submitted review

Prototype with interactive components swapping fill variants on hover—note production uses real input events.


Review card structure

PartPurposeSpec tip
AvatarReviewer identityAvatar component sm
Name + dateTrustVerified badge optional
Rating rowScore for this reviewRatingDisplay md
TitleHeadlineOptional one line
BodyReview textLine clamp 3 with “Read more”
ActionsHelpful, reportGhost buttons; not star row
ReviewCard
├── Variant: expanded=off | on
├── Layer: Header (avatar + meta)
├── Layer: RatingDisplay
├── Layer: Title
├── Layer: Body
└── Layer: Actions

Use auto layout vertical stacks; 16px padding; separate cards with 1px border or shadow from effects tokens.


Rating histogram (summary block)

Show distribution beside average score:

RowContent
5 ★Bar 72% width
4 ★Bar 18%

Each row: label 5, thin progress bar, percent optional. Clicking a row filters the review list—document filter behavior in prototype notes or search/filter UI.


Accessibility requirements

RequirementDisplayInput
Text alternativearia-label="4.2 out of 5 stars"aria-label="Rate 1 to 5 stars"
ColorDo not use color aloneSame
ContrastStar fill vs background ≥ 3:1Focus ring visible
KeyboardN/AArrows or 1–5 keys
ErrorN/AAnnounce in form error pattern

Run accessibility plugins on yellow star fills against white—they often fail contrast; use darker gold or add outline stars.


Handoff to engineering

DeliverableDisplayInputReview card
valuenumber 0–5numberper-review score
precision0.1 or 0.51 or 0.5
reviewCountnumber optional
onChange(value) => void
readOnlytruefalsetrue for listed reviews
sizesm | md | lgsamemd typical
localedecimal separatordate format

Publish Patterns / Feedback in your team library. Link Dev Mode checklist for semantic color tokens on verified badges.


Real-world examples

Product detail header

4.6 numeric + md stars + (2,341 reviews) link scrolling to review section. Half-star visible; count is link style text/link.

Post-checkout feedback

lg RatingInput, required, error on empty submit. Optional textarea below at 3 stars or below—document conditional reveal.

Marketplace seller card

sm RatingBadge inline: ★ 4.8 (120) in card footer—no histogram on card; full stats on seller profile.


Common mistakes

MistakeConsequenceFix
Stars without numeric scoreAmbiguous precisionShow 4.2 or label
Input looks like displayUsers do not clickHover + cursor pointer
6-star scale by accidentBroken mathExactly 5 unless locale exception
Half star on input, none in specDev ships whole onlyDocument step
Review card without dateLow trustAlways show date
Yellow stars on whiteContrast failDarker fill or stroke
Same component for edit + readWrong ARIASplit Display vs Input
Average does not match barsCredibility lossAlign histogram math

FAQ

Half stars for input or display only?

Display almost always supports halves; input is often whole stars unless you prototype half-click zones—call out explicitly.

Stars or emoji?

Icons scale and theme consistently; emoji render differently per OS—avoid for design systems.

Show zero reviews?

Show empty stars + “No reviews yet” instead of 0.0—pair with empty states on the list.

Rating next to badges?

Verified purchase is a badge beside the name, not inside the star row—keeps scan line clean.


Bottom line

Split rating into star primitives, read-only display, interactive input, and review cards so each surface gets the right behavior and accessibility contract. Document rounding, half-star rules, and hover preview in Dev Mode—small mismatches between stars and numbers undermine user trust fast. Continue with cards, forms, tables, and the tutorials hub.

Share on X

§ Keep reading

Related guides.