figma guide

Designing product detail pages in Figma: gallery, variants, and handoff

Design PDP galleries, variant pickers, sticky buy boxes, and trust modules in Figma with component variants, responsive layouts, and Dev Mode specs for ecommerce.

Published
Updated
Jun 18, 2026
Read time
8 min
Level
Beginner

Quick answer

A product detail page (PDP) pairs a media gallery on the left with a sticky buy box on the right—title, price, rating, variant pickers, quantity, and primary CTA—then stacks reviews, specs, and recommendations below. Build ProductGallery, VariantPicker, and BuyBox as separate components; bind variant state to gallery image and price. Document out-of-stock, pre-order, and low-stock copy explicitly. Pair with listing grids and cart UI. Start from the Figma guides hub.


Who this is for

  • Product designers shipping storefront PDPs for DTC, marketplace, and B2B catalogs.
  • Design system teams standardizing galleries, variant controls, and buy modules across categories.
  • Engineers implementing SKU selection, inventory gating, gallery sync, and structured data slots.

PDP layout zones

ZonePurposeKey components
BreadcrumbNavigation contextBreadcrumb
GalleryProduct mediaProductGallery, thumbnails, zoom
Buy boxPurchase decisionBuyBox, VariantPicker, CTA
Trust rowShipping, returns, secure payIcon + text chips
Tabs / accordionDetails, specs, careAccordion
ReviewsSocial proofReview UI
RecommendationsCross-sellProductCard row from PLP

Verdict: on mobile, gallery stacks above buy box; sticky Add to cart bar at bottom replaces desktop sticky buy column—design both, not just a scaled-down desktop frame.


ProductGallery anatomy

PartPurposeSpec tip
Main imageHero product shot1:1 or 4:5; max-width on desktop
Thumbnail stripNavigate mediaVertical (desktop) or horizontal (mobile)
Video badgeMotion mediaPlay icon overlay
Zoom affordanceLightbox hintIcon or pinch note for mobile
AR / 3D (optional)Immersive previewSeparate CTA—not mixed into thumbnails
ProductGallery
├── Variant: layout=thumbnails-left | thumbnails-bottom
├── Property: activeIndex (number)
├── Property: mediaCount (number)
└── Layers:
    ├── MainStage
    ├── ThumbnailRail
    └── Badges (sale, 360, video)

Sync gallery to variant selection: choosing “Blue” swaps activeIndex to the blue SKU image. Prototype with interactive components and component properties—not 40 duplicate frames.

Use masks and clipping for consistent image crops; export hero at 2x for retina.


BuyBox structure

BuyBox
├── Layer: Title (H1)
├── Layer: RatingSummary
├── Layer: PriceBlock (lg PriceDisplay)
├── Layer: VariantPickers
├── Layer: QuantityStepper
├── Layer: PrimaryCTA
├── Layer: SecondaryActions (wishlist, share)
└── Layer: TrustRow
ElementStates to designNotes
TitledefaultSingle H1; include brand line if marketplace
Priceregular, sale, memberlg price display
Ratingwith/without countLinks to #reviews anchor
Variant pickersdefault, selected, disabled, errorSee below
Quantitymin 1, max stockSame stepper as cart
Primary CTAdefault, hover, loading, disabledLabel changes: Add to cart / Out of stock / Pre-order
Secondarywishlist, notify meIcon + label on desktop

Sticky buy box on desktop: right column position: sticky; top: 24px—note in Dev Mode. Mobile uses fixed bottom bar with price + CTA only.


Variant pickers

Variant typeControlBest for
ColorSwatches (circles)Apparel, cosmetics
SizeSegmented control or button rowClothing, shoes
Material / finishChips or thumbnailsFurniture, devices
CapacityRadio groupElectronics, plans
DropdownCombobox10+ options
VariantPicker
├── Variant: type=color | size | dropdown
├── Variant: state=default | selected | disabled | error
├── Property: label (text)
├── Property: required (boolean)
└── Layer: Options row
StateVisualCopy
AvailableFull opacity
SelectedRing or fill highlight
UnavailableDiagonal strike or muted”Unavailable” on hover
ErrorRed border on group”Select a size”
Low stockBadge on option”Only 2 left”

Common mistake: showing all size buttons as equal when some SKUs are out of stock—disable unavailable combinations based on inventory matrix; document rules in a table in Dev Mode.


Primary CTA and inventory states

InventoryCTA labelCTA stateSecondary action
In stockAdd to cartEnabledBuy now (optional)
Low stockAdd to cartEnabled + urgency copy
Out of stockOut of stockDisabledNotify me when available
Pre-orderPre-orderEnabledShips MM/DD
Digital / SaaSSubscribe / Get startedEnabledFree trial link

Prototype loading after click: CTA shows spinner, then success toast (toast pattern) or mini-cart drawer opens.


Trust, shipping, and policy modules

ModuleContentComponent
Delivery estimate”Arrives Tue, Jun 24”Icon + text row
Free shipping threshold”Free shipping over $50”Inline banner
Returns”30-day returns”Link to policy
Secure checkoutLock iconFooter of buy box
AuthenticityMarketplace badgeVendor card if third-party

Keep trust rows scannable—three items max above the fold. Long policy text belongs in tabs below.


Tabs, specs, and long content

Use accordions on mobile and tabs on desktop for:

SectionContent
DescriptionMarketing copy, bullets
SpecificationsKey-value table
Size guideModal or linked page
Shipping & returnsPolicy summary
Ingredients / materialsCompliance text
PDPContentTabs
├── Variant: layout=tabs | accordion
├── Layer: TabList
└── Layer: Panels

Spec tables reuse table UI patterns with two columns (label / value). Align keys left, values right for scannability.


Reviews block

Place the review summary (average + histogram) beside or above the review list:

ElementPlacement
Aggregate ratingBuy box + reviews header
HistogramLeft column of review section
Review cardsPaginated list
Write review CTALogged-in only; link to form

Filter reviews by star rating with chip filters—mirrors PLP filter behavior for consistency.


Recommendations row

TypeLabelCard source
Related products”You may also like”Same category
Frequently bought together”Complete the look”Bundle layout
Recently viewed”Recently viewed”Personalization slot

Use horizontal scroll of product cards with consistent image ratio. Do not shrink cards below readable price size—show 2.2 cards on mobile to hint scroll.


Responsive behavior

BreakpointGalleryBuy boxSticky CTA
MobileFull-width carouselBelow galleryFixed bottom bar
Tablet55% width45% side-by-sideOptional bottom bar
Desktop50–58% left42–50% sticky rightInside buy box

Document image zoom: lightbox on click (desktop) vs pinch (mobile). Link to mobile frame presets for in-app WebView PDPs.


Handoff checklist

ItemDev Mode annotation
SKU ↔ gallery mappingProperty table per variant
Unavailable variant rulesCross-option matrix
CTA labels per inventory stateEnum list
Price updates on variant changeSale vs member precedence
Quantity min/maxStock API binding
Sticky offsetsHeader height + safe area
SEO / structured data slotsProduct name, price, availability fields
Analytics eventsview_item, add_to_cart trigger points

Use Dev Mode checklist and color tokens for sale price emphasis.


Common mistakes

MistakeWhy it hurtsFix
One frame per colorway30 SKUs = unmaintainableComponent properties + gallery index
Missing out-of-stock stateEngineers ship broken CTADesign disabled + notify flow
Tiny swatches on mobileTouch targets fail WCAGMin 44×44px hit area
Price without variant contextWrong price shownBind price to selected SKU
Reviews buried below foldLow conversion on high-consideration itemsSummary in buy box
No loading state on Add to cartDouble-submit bugsLoading + success feedback

  1. Audit PLP ProductCard — PDP should feel like the expanded version of the same system.
  2. Build ProductGallery with thumbnail sync and 4–6 media slots.
  3. Compose BuyBox with price, rating, variants, quantity, CTA.
  4. Map variant matrix in a spreadsheet layer or Dev Mode table.
  5. Add trust row + tabs for long content.
  6. Design review block + recommendations using existing components.
  7. Prototype variant change → image + price update → add to cart.
  8. Mobile pass with sticky bottom CTA and accordion specs.

FAQ

Show 5–8 thumbnails in the component; document that production may have 1–20. Include video and lifestyle shot slots in the template.

Color swatches or dropdown for 15 colors?

Swatches up to ~8 visible; beyond that use dropdown with swatch + label in each option (combobox pattern).

Should “Buy now” skip the cart?

Design both Add to cart (primary) and Buy now (secondary) if checkout supports it—Buy now routes to checkout with single line item.

Marketplace vs first-party PDP?

Add SellerCard (avatar, name, rating) below title for third-party listings; keep buy box structure identical for engineering reuse.


Next steps

Share on X

§ Keep reading

Related guides.