figma guide

Designing cards in Figma: layouts, variants, and handoff

Build reusable card components in Figma with media slots, action areas, elevation tokens, and state variants so product and marketing cards hand off cleanly.

Published
Updated
Jun 06, 2026
Read time
6 min
Level
Intermediate

Quick answer

Cards in Figma are vertical auto-layout components with a predictable stack: optional media, header (title + meta), body, and footer actions. Publish a component set with variants for elevation (flat, raised, outlined), state (default, hover, selected, disabled), and boolean properties for media, badge, and footer. Bind fills and shadows to semantic tokens and elevation effects. Document click targets (whole card vs button only) in Dev Mode descriptions. Pair with auto layout patterns, components and variants, and the Figma guides hub.


Who this is for

  • Product designers shipping dashboards, settings panels, and content feeds.
  • Marketing designers building landing page feature grids and pricing blocks.
  • Design system teams who need one card primitive instead of twelve slightly different rectangles per squad.

Choose the right card pattern

PatternBest forAvoid when
Media cardArticles, products, video thumbnailsDense data tables—use table rows instead
Stat / KPI cardDashboards, analyticsLong-form content without a number
Action cardOnboarding choices, plan selectionSimple list items with one line of text
List cardNotifications, inbox rowsHero marketing blocks needing full-bleed imagery
Horizontal cardMobile list density, search resultsDesktop grids where vertical scans read faster

Verdict: pick one base card component and extend with boolean properties—not a new frame per screen.


Card anatomy

RegionTypical contentLayout note
MediaImage, icon, chart previewFixed aspect ratio (16:9, 1:1, 4:3)
HeaderTitle, subtitle, badgeHorizontal auto layout, space between
BodyDescription, metadata, tagsVertical stack, gap 4–8px
FooterPrimary/secondary actions, priceHorizontal row, align end
ContainerBackground, border, shadowCorner radius from token (radius/md)

Structure as Card / Base with nested slots (instances) for media and actions so marketing can swap content without detaching.


Card / Base
├── Variant: elevation=flat | raised | outlined
├── Variant: state=default | hover | selected | disabled
├── Property: hasMedia=true | false
├── Property: hasFooter=true | false
├── Layer: Media slot (instance swap)
├── Layer: Content stack (vertical auto layout, padding token)
│   ├── Header row (title + badge)
│   ├── Body text
│   └── Tag row (optional)
└── Layer: Footer actions (horizontal auto layout)
  1. Set padding 16–24px on the content stack; use spacing tokens from layout grids.
  2. Min width 240–280px for grid cards; max width 400px unless full-bleed marketing.
  3. Use clip content on the container when media is full-bleed at the top.

Elevation and borders

StyleVisualToken hook
FlatFill only, no shadowsurface/raised or surface/default
RaisedShadow level 1–2shadow/card from effects guide
Outlined1px stroke, no shadowborder/subtle
SelectedRing or thicker borderborder/selected + optional fill tint

Dark mode: swap shadow for lighter border or subtle fill lift—see dark mode tokens. Do not reuse the same shadow opacity in both modes.


Media and imagery

Media typeAspect ratioHandoff note
Photo hero16:9object-fit: cover, focal point optional
Avatar / icon1:1Size 40–64px; use instance swap
Chart thumbnail4:3 or 16:9Static export or live chart spec
Logo stripHugMax height 32px

Place images in a dedicated frame with fill constraints; link export settings when assets ship as PNG/WebP.

For gradients behind media overlays, document text contrast against the scrim token.


States and interaction

StateVisualPrototype
DefaultBase elevation
HoverRaised shadow or subtle fillOn click → navigate if whole card is clickable
SelectedBorder ring or check iconToggle in selection grids
DisabledReduced opacity, no actionsOmit hotspots
LoadingSkeleton blocksPair with placeholder rectangles

Use interactive components on hover for web cards; mobile cards often skip hover and use press states only.

Click target rule: document whether the entire card or only the CTA button is interactive—engineers will assume wrong without a note.


Grid and responsive layout

LayoutColumns (desktop)Gap
Marketing features324–32px
Product catalog416–24px
Dashboard KPIs2–416px
Mobile feed112–16px

Parent grid: horizontal auto layout with wrap (or separate frames per breakpoint) per responsive design in Figma.

Equal height rows: set card instances to fill container height in the grid row, or align footers with auto layout space between on the content stack.


Content density variants

DensityPaddingTitle styleUse case
Comfortable24pxtext/h3Marketing, onboarding
Default16pxtext/body-lgProduct grids
Compact12pxtext/bodyAdmin lists, side panels

Expose density=comfortable | default | compact as a variant—not three unrelated components.


Comparison: card vs list row vs table row

NeedUse
Scannable grid of entitiesCard
Single-line inbox itemList row (horizontal card)
Sortable columns, bulk selectTable row
Primary navigationNav item

Verdict: cards are for entity summaries; do not force tabular data into cards.


Handoff checklist

DeliverableWhere
Clickable regionCard description (whole card vs button only)
Image aspect ratioMedia frame name + export note
TruncationTitle 2 lines max? Body clamp?
Elevation tokenComponent property → CSS shadow spec
Empty mediahasMedia=false variant screenshot

Run Dev Mode checklist before review.


Common mistakes

MistakeConsequenceFix
Detached card per screenInconsistent paddingPublish Card/* to team library
Shadow on every cardVisual noiseDefault to flat; raise on hover only
CTA outside footer slotMisaligned action rowsFooter auto layout row
No selected stateBroken multi-select UXAdd state=selected variant
Tiny touch targets on mobileFails HIG/MaterialMin 44px height on tappable rows

FAQ

Should the whole card be clickable?

Document it. Marketing often wants whole-card links; dashboards often want only a button. One sentence in the component description prevents rework.

One primary + one optional text action. More than two competes with navigation patterns—use a dropdown menu for overflow.

Use a dedicated carousel frame; see interactive carousels guide for prototype limits.

Do cards need dark mode variants?

Yes—bind surface, border, and shadow tokens to modes or variables on the same component set.


Bottom line

Ship one card system: vertical auto layout, boolean slots for media and footer, elevation variants, and explicit click-target rules in Dev Mode. Grids stay consistent when cards live in the team library with tokens—not detached rectangles. Next: dropdown menus, tables, and the tutorials hub.

Share on X

§ Keep reading

Related guides.