Skip to content

Button

Button performs an action. Its weight tells people which action on the screen matters most.

On this page
  1. Preview
  2. Type and style
  3. Height
  4. States
  5. Icon only
  6. Properties
  7. Tokens
  8. iOS and Material 3
  9. When to use filled
  10. Quick Action Button
  11. Social Button
  12. Compact Button
  13. Button / Overlay
  14. Floating Action Button

Preview

Brand, filled, large. The icon slots hold the component's default circle placeholder.

Type Brand, Style Filled, Size lg56 px, radius full

Type and style

Type carries the meaning and Style carries the weight. The two axes give twelve combinations on the same geometry.

Type Brand, Neutral, Error by Style Filled, Outline, Weak, LinkSize md

Brand

Neutral

Error

How tall is a Button?

Button is 36, 44 or 56 high (sm, md, lg), and all three clear the 44 pt target once the tap area is applied. The heights are fixed so buttons line up with fields and list rows on the same screen.

Size36 / 44 / 56 px

sm

36 px, pad 12, 14/20, icon 16

md

44 px, pad 12, 16/24, icon 18

lg

56 px, pad 16, 18/28, icon 20

Which states does Button have?

Button has five states: Default, Pressed, Focused, Loading and Disabled, on every combination of type and style. A finger does not hover, so the set has no Hover state; with a pointer, a hover moves a specimen toward its Pressed fill.

State by Style at Type Brand, Size mdBrand, Filled, md, in Default / Pressed / Focused / Loading / Disabled

Default

Pressed

Focused

Loading

Disabled

Neutral, Pressed and Focused, and Error, FocusedSize md, four styles in each row

Neutral pressed

Neutral focused

Error focused

Focused is the focusRing/brand effect style, a 2 pt gap in the surface color and then a 2 pt ring in brand/base; Type Error uses focusRing/error. The ring sits on the button shape, and a Link button also takes its pressed fill under the ring.

Loading keeps the container of Default and swaps the label for a ring spinner. The spinner is a 24 box with a 20 ring of 2 pt and an arc of about 109 degrees that turns once every 1.2 seconds.

Pressed keeps each style recognizable: Outline fills with brand/alpha-10 and keeps its stroke, Weak deepens to brand/alpha-16, Link gets brand/alpha-10, and Filled steps to brand/pressed. Disabled paints Filled and Weak bg/soft-100, leaves Outline white inside a border/soft-100 line, and gives Link no fill.

The other button components on the page carry their own states, described with each one below.

The white label measures 3.76 to 1 on Brand Filled in Dark and 3.81 to 1 on Error Filled in both modes, under the 4.5 to 1 asked of text at this size. Error Filled Pressed takes state/error/dark-700, which turns light in Dark, and its label falls to 1.92 to 1 there. A real button keeps the 2 plus 2 focus ring for keyboard focus, and size sm still needs a 44 pt hit area in code.

360 variants: Type by Style by Size by State by Icon Only, no holes. Read from Button 53:4429 of the Figma file on October 2, 2026.

Icon only

Set Icon Only to True and the label wrapper is dropped. The button becomes a circle at the same height.

Icon Only, True36 / 44 / 56 px

sm

md

lg

Properties

The Figma component properties, named exactly as the right hand panel names them.

Properties, property, type, default
PropertyTypeDefault
TypeBrand, Neutral, ErrorBrand
StyleFilled, Outline, Weak, LinkFilled
Sizesm, md, lgsm
StateDefault, Pressed, Loading, Disabled, FocusedDefault
Icon OnlyTrue, FalseFalse
Icon LeftBooleantrue
Icon RightBooleantrue
Icon Left SwapInstance swapcircle
Icon Right SwapInstance swapcircle
Icon SwapInstance swap, used when Icon Only is Truecircle
TextTextButton

Tokens

Every value the component reads, resolved through its aliases to the primitive underneath. Change one and it changes in Figma, the CSS, and all three native outputs.

Tokens, token, light, dark, applied to
TokenLightDarkApplied to
brand/base#155DFC#2B7FFFBrand filled fill, Brand outline stroke, Brand quiet labels, focus ring
brand/pressed#193CB8#155DFCBrand filled pressed
brand/alpha-10#2B7FFF at 10%#2B7FFF at 10%Brand weak fill, Brand outline and link pressed
brand/alpha-16#2B7FFF at 16%#2B7FFF at 16%Brand weak pressed
static/static-white-0#FFFFFF#FFFFFFLabel on Brand and Error filled
static/static-facebook-blue#1877F2#1877F2Social Button, Facebook Filled fill
static/static-facebook-blue-pressed#106BE1#106BE1Social Button, Facebook Filled fill while pressed
bg/white-0#FFFFFF#0E0E0FOutline fill, and the gap in the focus ring
bg/strong-950#0E0E0F#FFFFFFNeutral filled fill
text/white-0#FFFFFF#0E0E0FLabel on Neutral filled
bg/surface-800#2F2F31#D1D1D6Neutral filled pressed
bg/weak-50#F4F5F5#242427Neutral weak fill, Neutral outline and link pressed
bg/soft-100#E9E9EA#48484ANeutral weak pressed, disabled fill
border/soft-100#E9E9EA#2F2F31Neutral outline stroke, disabled outline stroke
text/sub-700#48484A#C7C7CCNeutral outline, weak and link label
text/strong-950#0E0E0F#FFFFFFNeutral label while pressed or loading
state/error/base-500#FB2C36#FB2C36Error filled fill, Error stroke and label, error ring
state/error/dark-700#C10007#FFA2A2Error filled pressed
colors/alpha/red/alpha-10#FB2C36 at 10%#FB2C36 at 10%Error weak fill, Error outline and link pressed
colors/alpha/red/alpha-16#FB2C36 at 16%#FB2C36 at 16%Error weak pressed
text/disabled-400#AEAEB2#8E8E93Disabled label
dimensions/radius/full99999999Corner radius, every size

brand/pressed is a semantic alias, so the Pressed fill moves with the brand: colors/blue/700 in Light and colors/blue/500 in Dark, two steps darker than brand/base in Light and one in Dark. static/static-white-0 is white in both modes, so a label on a brand fill stays white on a dark screen.

The focus ring is the focusRing/brand and focusRing/error effect styles: two drop shadows at blur 0, spread 2 in bg/white-0 and spread 4 in brand/base or state/error/base-500.

How does Button differ on iOS and Material 3?

Appetite UI Button is one component for both platforms: a capsule at three heights with Filled, Outline, Weak and Link styles. iOS and Material 3 each have their own button sets in the file, with their own sizes and styles.

Button against its iOS and Material 3 counterparts, component, iOS, Material 3, difference
Appetite UIiOS counterpartMaterial 3 counterpartWhat differs
ButtoniOS / Button: Size Small, Medium and Large by Style Borderless, Bordered and Bordered - Prominent, with Destructive and Icon Only. Liquid Glass Text and Symbol sets add Glass and Glass Prominent.M3 / Button in five sets (filled, tonal, outline, elevated, text), each Type Round or Square by Size XSmall to XLarge by State Enabled, Hovered, Focused, Pressed, DisabledThe iOS set starts at 28 high where Appetite UI sm is 36. Material 3 has five sizes and a real Hovered state. Appetite UI has three sizes, an Error type and a Loading state that neither native set draws.
Compact ButtoniOS / Button - Liquid Glass - Symbol, a 50 circleM3 / Icon Button, 40 by 40, Standard, Filled, Tonal and OutlinedAppetite UI is a 32 circle with three shells.
Floating Action ButtonNone. On iOS use a toolbar action.M3 / FAB and M3 / Extended FABAppetite UI draws one 56 circle with an Open stack. Material 3 FAB comes in 40, 56 and 96.
Social ButtonNoneNoneNeither platform ships a sign-in button; the brand rules of each provider apply.

The minimum touch target is 44 pt on iOS and 48 dp on Material 3, set by platform/min-touch-target in the Platform collection. Size sm is 36 high, so give it a 44 pt hit area on iOS and 48 dp on Android in code.

When should I use a filled Button?

Use one filled Button per screen, for the action that matters most, and pair it with a link for the way out.

Do

One filled button per screen. Pair it with a link so the destination of the eye is never in doubt.

Don't

Reserve Error for destructive actions. A filled Error on the safe choice makes two filled buttons, so the safe path and the risky one are equally loud.

The same Figma page ships five more button components, documented below: Quick Action Button, Social Button at 128 variants, Compact Button, Button / Overlay and the Floating Action Button.

Quick Action Button

A circle icon with a label under it, in five semantic colors and three states, for shortcut grids and the action row on a wallet or banking screen. Use Button for the main action of a screen.

Type Brand, Neutral, Success, Warning, Error56 x 78, circle 56 at radius 24, icon 22, label 12/16
State Default, Pressed, Disabled, on Type Brandbrand/lighter, brand/light, bg/weak-50
ActionAction

Type moves the container fill and the icon together and leaves the label on text/strong-950 in all five. Pressed steps each tint up one stop, lighter to light, and leaves the icon color alone.

Disabled flattens the axis: every color lands on bg/weak-50 with the icon in fg/disabled-400 and the label in text/disabled-400. The five colors are the only thing an instance cannot override, because icon and label are both properties.

Social Button

Third-party sign-in for four providers, at one fixed height, so the stack under a login form stays even whichever set you ship. Never recolor the brand marks.

Company Google, Facebook, Apple, X at Style Filled135 x 56, radius full, padding 0 and 16, gap 8, label 16/24 Semi Bold
Style Filled, Outline, Weak, Link at Company Googlebg/strong-950, bg/white-0 with a 1px border, bg/weak-50, no fill

Style changes the shell and the mark stays put. Google keeps its four colors in every style, Facebook stays on its own blue until Filled paints the mark white, and Apple and X flip between fg/white-0 and fg/strong-950.

Facebook Filled uses static/static-facebook-blue, and static/static-facebook-blue-pressed while pressed, so it holds the same value in both modes, and its label, mark and loading arc take static/static-white-0 for the same reason. Every style is 56 tall with 16 of padding, Link included.

The label defaults to Continue, so name the provider on every real instance, for example Continue with Google.

Compact Button

An icon-only control at 32, for toolbars, image overlays and anywhere a full button would crowd the row. Three shells, four states.

Style Outline, Transparent, White at State Default32 square, radius full, icon 20 at stroke 1.75
State Default, Pressed, Focused, Disabled, on Style Outlinebg/white-0, bg/soft-100, bg/white-0 under a 1 brand/base stroke and the ring, bg/weak-50

Pressed paints all three styles bg/soft-100, and Disabled paints Outline and White bg/weak-50 while Transparent stays clear. Only Outline has a border, border/soft-100 at 1 pt in Default, Pressed and Disabled.

Focused keeps each style's own fill under a 1 pt brand/base stroke drawn outside the edge, then the focus ring. Transparent has no fill, so its ring follows the stroke alone.

At 32 the circle is smaller than a finger, so give it a 44 pt hit area on iOS and 48 dp on Android in code.

Button / Overlay

A circular icon button for use on top of photography. A scrim and a background blur keep the glyph legible on any image, in both modes.

Size sm, md, lg at State Default, then State Pressed36 / 44 / 56 px circle, icon 18 / 20 / 24, bg/scrim at 42 percent, blur 16

The fill is bg/scrim at 42 percent, and 58 percent while pressed, over the backdropBlur/md style, a 16 background blur. The glyph is static/static-white-0 in both modes and swaps with Icon Swap.

The set has State Default and Pressed only, with no Focused, Disabled or Loading. Give a live one the 2 plus 2 focus ring in code.

Floating Action Button

One screen-level primary action, pinned above the content, with an expanded stack behind it. It is Android-native, so on iOS use a toolbar action instead.

State Close56 square, radius full, brand/base, plus at 24, dropShadow/lg
State Openfour actions, 16 from the button, 12 apart, label pill 40 tall at radius 12, 16 from its circle

Close is one 56 circle. Open turns that circle Neutral Weak with an x and hangs four expanded actions above it, each a 56 brand circle with its label to the left.

Both main circles sit under dropShadow/lg. A label is a 40 tall pill at radius 12 in bg/strong-950 with text/white-0, so the pill and its text invert in Dark.

The stack sits outside the component's own 56 by 56 frame, which does not clip, so an instance measures 56 and paints 201 by 332. State is the only property, so the four actions carry a placeholder circle and the words New post, Upload photo, Scan code and Message until you override each one.

The set has no Focused state, so give a live one the 2 plus 2 focus ring in code.