figma guide

Designing inline alerts and banners in Figma: patterns, tone, and handoff

Design persistent inline alerts and page banners in Figma with tone variants, action slots, dismiss rules, and Dev Mode specs—separate from toasts and modals.

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

Quick answer

Inline alerts and banners in Figma are persistent message components that stay visible until the user dismisses them or resolves the issue. Unlike toasts, they do not auto-dismiss. Build inline alerts for contextual warnings inside a form or section; build page banners for account status, maintenance, or policy notices below the nav. Publish components with variants for tone=info | success | warning | error, layout=inline | banner, and dismissible=true | false. Document focus order, role (role="alert" vs role="status"), and persistence rules in Dev Mode. Pair with modals for blocking flows, forms, and the Figma guides hub.


Who this is for

  • Product designers shipping billing warnings, feature deprecations, and form-level validation summaries.
  • Design system teams separating toast (transient) from alert (persistent) primitives.
  • Engineers implementing ARIA live regions, dismissible banners, and sticky notice bars.

Alert vs banner vs toast vs modal

PatternPersistenceScopeBlocks work?Best for
Inline alertUntil resolved/dismissedSection or formNoField errors, section warnings
Page bannerUntil dismissed or expiryFull page widthNoTrial ending, maintenance
ToastAuto-dismissGlobal overlayNo”Saved”, undo
ModalUntil explicit actionViewportYesDestructive confirm, auth

Verdict: if the message must stay visible while the user continues working, use an inline alert or banner—not a toast. If the user cannot proceed, use a modal.


Component anatomy: inline alert

PartPurposeSpec tip
ContainerTone background + borderLeft border 4px or full fill
Leading iconTone indicator20px; required for warning/error
Title (optional)Short headlineBold; one line
MessagePrimary copy1–3 lines; links allowed
ActionsText buttons or links1–2 max
DismissIcon ×Only when dismissible=true
Alert / Inline
├── Variant: tone=info | success | warning | error
├── Property: hasTitle=true | false
├── Property: dismissible=true | false
├── Property: hasActions=true | false
├── Layer: Container (horizontal auto layout, padding 12px 16px)
│   ├── Icon
│   ├── Content stack (vertical auto layout)
│   │   ├── Title (optional)
│   │   └── Message
│   ├── Actions (horizontal auto layout)
│   └── Dismiss button (optional)

Bind colors to semantic tokensalert/warning/bg, alert/warning/border, alert/warning/text. Run contrast checks on every tone.


Component anatomy: page banner

PartPurposeSpec tip
ContainerFull-width barBelow nav; min-height 48px
MessagePrimary copyCenter or left align—pick one system-wide
ActionsPrimary + secondary”Upgrade” + “Learn more”
DismissOptionalAccount notices often dismissible
Banner / Page
├── Variant: tone=info | warning | promo
├── Property: dismissible=true | false
├── Layer: Container (horizontal auto layout, space-between, padding 12px 24px)
│   ├── Message group (icon + text)
│   ├── Actions
│   └── Dismiss (optional)

Banners span the content width or full viewport—document which. Show banner + navigation on one artboard so engineers know z-index and push behavior (content shifts down vs overlays).


Tone mapping

ToneTypical useDismissible?ARIA role
InfoTips, new featuresOften yesstatus
SuccessCompleted setup stepYesstatus
WarningTrial ending, limitsSometimesalert if urgent
ErrorPayment failed, sync brokenRarely until fixedalert

Preview tones in dark mode—warning yellows often fail contrast on dark surfaces.


Placement patterns

PlacementComponentExample
Below global navPage banner”Scheduled maintenance Saturday”
Above formInline alert”Verify email to publish”
Inside cardInline alert”Storage 90% full”
Between sectionsInline alertDeprecation notice
Sticky bottomBanner (mobile)Cookie / consent (if not modal)

Do not stack more than two persistent alerts visible at once—combine copy or prioritize in spec.


Inline alerts with forms

Form-level alerts summarize issues; field-level errors stay on inputs.

LevelComponentCopy pattern
Field errorInput state=error + helper text”Enter a valid email”
Form summaryInline alert tone=error”Fix 3 errors below”
Section warningInline alert tone=warning”Changes affect billing”

Link to form input states and tooltips for field-level hints—alerts are for page or section scope.


Action typeUsageSpec
Text buttonPrimary fix”Update payment”
Secondary linkLearn moreOpens docs in new tab
Dismiss onlyInformationalNo action required

Keep one primary action per alert. If two equal actions are needed, consider a modal instead.


Dismiss behavior

Document these rules in Dev Mode:

Alert typeDismissible?On dismiss
Info / promoYesHide until next session or never show again
Warning (billing)SometimesSnooze 7 days—note logic
Error (payment failed)NoMust resolve
SuccessYesAuto-hide optional after 10s

If dismissible, include × button with aria-label="Dismiss alert". Store “don’t show again” in settings—not only local dismiss.


Layout with auto layout

  1. Inline alert: horizontal auto layout, align=center, gap 12px; content stack grows.
  2. Banner: space-between; message left, actions right; wrap on mobile.
  3. Responsive: on narrow screens, stack actions below message—design breakpoint=sm variant.
  4. Icons: fixed 20×20; do not shrink.

Use layout grids on banner artboards aligned to page grid. For responsive frames, show banner text truncation with and full message in title attribute—note in spec.


Accessibility checklist

  • role="alert" for urgent errors; role="status" for informational updates.
  • Do not rely on color alone—icon + text required for warning/error.
  • Focus management: dismiss button is keyboard reachable; focus does not trap.
  • Links in message are real <a> elements with visible focus ring.
  • Contrast on tone backgrounds meets WCAG AA—verify with a11y plugins.
  • Screen reader: title + message read together; actions announced after.

Common use cases

Trial ending (banner)

tone=warning, dismissible. Message: “4 days left in trial.” Actions: “Upgrade” (primary), “Compare plans” (link).

Payment failed (inline alert)

tone=error, not dismissible. Inside billing settings card. CTA: “Update payment method.”

Feature deprecation (inline alert)

tone=info, dismissible. Above affected section. Link to migration docs.

Maintenance window (page banner)

tone=info, full width below nav. Not dismissible until event passes.

Cross-link badges when status chips accompany banner messages.


Prototyping limits

Figma cannot persist “dismissed” state across sessions. For reviews:

  1. Show visible and dismissed frames side by side.
  2. Prototype × click → hidden state frame.
  3. Note: “Engineering: store dismiss in localStorage / user prefs.”

Handoff to engineering

DeliverableWhere it lives
Tone → color tokensVariant names + token table
ARIA role per toneComponent description
Dismiss rulesPer variant spec
Banner push vs overlayArtboard note
Action routesLink targets in Dev Mode
Mobile wrap behaviorsm variant frame

Include alerts in your Dev Mode handoff checklist. Publish under Patterns / Alert and Patterns / Banner in your team library.


Comparison: when teams reach for the wrong pattern

SituationWrong choiceRight choice
Payment failedToast (auto-hides)Inline alert or banner until fixed
”Saved” confirmationBannerToast
Delete account confirmBanner with buttonModal
Cookie consentTiny toastBanner or dedicated modal
Field “invalid email”Page bannerField error state

Common mistakes

MistakeConsequenceFix
Toast for payment errorsUser misses critical infoPersistent alert
Banner for every saveAlert fatigueToast instead
No icon on warningColor-only signalLeading icon required
Dismiss on blocking errorIssue hiddendismissible=false
5 stacked bannersUnreadable chromePriority + combine
Same component for toast and bannerWrong behavior shippedSeparate primitives
Lorem ipsum in alertShips to prodReal copy in library
Banner overlays nav without specBroken layoutDocument push vs overlay

FAQ

Should inline alerts and banners share one component?

Separate top-level components. Banners are full-width with different layout rules; inline alerts sit in content flow. Share tone tokens and icon set only.

How is this different from the toasts guide?

Toasts cover transient, auto-dismissing notifications. This guide covers persistent messages that stay until resolved or dismissed.

Include alerts in the component library?

Yes. Publish tone variants early so squads stop drawing one-off yellow boxes per feature.

Global banner vs inline alert for billing?

Global banner when every page should surface account risk; inline alert when only billing settings need the message.


Bottom line

Use inline alerts for section-scoped, persistent messages and page banners for full-width notices below the nav. Keep them separate from toasts (transient) and modals (blocking). Publish tone, dismissible, and layout variants with real copy, document ARIA roles, and show banner + nav layout on handoff artboards. Continue with toasts for confirmations, forms for field errors, and the tutorials hub.

Share on X

§ Keep reading

Related guides.