figma guide

Designing sticky add-to-cart bar UI in Figma: scroll behavior, variants, and handoff

Design sticky buy bars, mobile ATC footers, and scroll-triggered purchase UI in Figma with variant summary, price, and Dev Mode specs for long PDP layouts.

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

Quick answer

A sticky add-to-cart bar appears after the main buy box scrolls off-screen and collapses variant, price, and primary CTA into one fixed row. Trigger it when the original BuyBox crosses the viewport top—not on page load—so above-the-fold PDP stays uncluttered. Include thumbnail, truncated title, selected variant summary (size/color), current price, and the same ATC button states as the inline buy box (including out-of-stock → notify). On desktop, a slim top bar or bottom bar both work; on mobile, prefer bottom-fixed for thumb reach using safe-area padding. Start from the Figma guides hub.


Who this is for

  • Product designers with long PDP templates—reviews, specs, and story sections push ATC below the fold.
  • Design system teams keeping sticky and inline buy boxes visually and behaviorally in sync.
  • Engineers implementing Intersection Observer triggers, z-index stacking, and cart drawer handoff.

SurfacePlacementKey components
Mobile PDPFixed bottomStickyBuyBar
Desktop PDPFixed top or bottomStickyBuyBar wide layout
Quick view modalUsually noneInline buy box sufficient
Cart drawer openHide sticky barAvoid duplicate CTAs
CheckoutNever showScope to PDP only

Verdict: sticky bar is a mirror of buy box state—never a separate purchase logic. If inline ATC is disabled, sticky ATC is disabled with identical copy.


StickyBuyBar anatomy

ZoneContentBehavior
Leading48px thumbnail + 2-line title truncateTap scrolls to buy box (optional)
CenterVariant summary: “Blue / M”Updates on picker change
TrailingPrice + primary CTAFull-width CTA on narrow mobile
SecondaryWishlist icon (optional)Same as wishlist on PDP
StickyBuyBar
├── Variant: visible=true | false (scroll-driven)
├── Variant: stock=in_stock | out_of_stock | low_stock
├── Variant: layout=mobile_bottom | desktop_top | desktop_bottom
├── Property: hasVariantSelected=true | false
└── Layers:
    ├── ProductThumb
    ├── TitleTruncate
    ├── VariantSummary
    ├── PriceBlock
    ├── PrimaryCTA
    └── SafeAreaSpacer (iOS home indicator)

Use Auto Layout with fill on CTA and fixed thumb size; add drop shadow or top border token from effects guide.


Scroll trigger states

StateConditionUI
HiddenBuy box visible in viewportNo bar
EnteringBuy box exits top edgeBar slides in (200ms)
ActiveUser scrolled past buy boxBar fixed
ExitingUser scrolls back to buy boxBar slides out
Variant errorATC tapped without sizeBar shows error pulse; scroll to selector

Prototype with Smart Animate between hidden/active variants; annotate threshold as “when BuyBox bottom < 0” for engineering.


Layout comparison

LayoutBest forTradeoff
Mobile bottom barThumb reach, iOS/Android webCovers footer links—add bottom page padding
Desktop top barLong spec tables below foldCompetes with site header—coordinate z-index
Desktop bottom barMarketing sites with tall heroLess common; test against cookie banners
Side mini panelB2B catalogsHigher dev cost; skip unless required

Include a comparison table in Dev Mode noting z-index: sticky bar above content, below modals and toasts.


Sync with inline buy box

PropertyMust match inline buy box
Selected variantSize, color, SKU
PriceSale, compare-at, currency
CTA labelAdd to cart / Notify me / Pre-order
Disabled reasonNo size selected, OOS
QuantityIf inline shows stepper, reflect count in bar or hide qty in sticky
LoadingSpinner on ATC during API call

When user changes size or color in sticky-adjacent pickers only visible inline, bar summary updates via same component properties—document shared variant state in handoff.


Mobile-specific details

DetailSpec
Safe areapadding-bottom: env(safe-area-inset-bottom)
Min tap targetCTA height ≥ 48px
Page paddingbody bottom pad = bar height when active
iOS rubber-bandBar stays fixed; do not scroll with overscroll
Android keyboardHide bar when size dropdown focused if it overlaps

Test on mobile frame presets at 390×844 and 360×800.


Interaction with other overlays

OverlaySticky bar behavior
Cart drawerHide sticky bar
Size guide modalHide or dim bar behind modal
Cookie consentBar stacks above consent or consent dismisses first
Promo bannerOffset bar top position on desktop
Image gallery fullscreenHide bar

Document z-index stack: gallery > modal > sticky bar > site header > content.


Handoff checklist

ItemDev Mode annotation
Intersection target#buy-box element id
Show/hide animationtranslateY + opacity tokens
Variant syncShared React/Vue store or DOM data attrs
ATC clickSame handler as inline button
Analyticssticky_bar_view, sticky_atc_click
SEO / a11yBar is not only ATC on page—inline remains primary
Reduced motionInstant show without slide
Cart successOpen drawer vs toast — match inline

Use Dev Mode checklist and responsive frames for breakpoint behavior (sticky often mobile-only).


Common mistakes

MistakeWhy it hurtsFix
Bar visible on loadCluttered heroScroll-triggered only
Different price in barTrust lossSingle source of truth
Sticky without inline buy boxThin PDP SEO/accessibilityAlways keep full buy box in document
Bar covers checkout CTAAccidental double cartScope to PDP template only
No variant in summaryWrong SKU in cartShow “Select size” until chosen
Ignoring cookie bannerOverlapping CTAsStack order spec
Desktop sticky on short PDPRedundant UIOptional minScrollDepth flag

  1. Finalize inline BuyBox on PDP with all variant states.
  2. Create StickyBuyBar as sibling component sharing CTA and price subcomponents.
  3. Define hidden/active variants with slide animation for prototype.
  4. Add mobile bottom layout with safe-area spacer layer.
  5. Design desktop alternative (top bar) if marketing wants it—mark as optional breakpoint.
  6. Spec scroll trigger and z-index stack in Dev Mode.
  7. Prototype scroll down → change variant inline → bar updates → ATC → cart drawer.
  8. Document hide rules for modals, cart, and gallery.

FAQ

Many brands use mobile-only sticky bars. If desktop gets one, prefer top bar after hero scroll—bottom bars fight cookie and chat widgets.

Show quantity stepper in sticky bar?

Usually no on mobile—keep bar compact. Reflect quantity only if your inline buy box is never reachable without long scroll and qty changes are common (B2B).

Two ATC buttons bad for accessibility?

Inline buy box remains the primary landmark; sticky is supplementary. Ensure focus order returns to inline pickers when “Select size” error fires.

No—sticky buy bar is PDP-specific. Category and PLP pages use different sticky patterns (filters, sort)—not ATC.


Next steps

Share on X

§ Keep reading

Related guides.