Button

A flexible button component available as plain CSS classes, React components, and Astro components.

Usage

Link as button
<button class="zui-button">Click me</button>
<a href="/action" class="zui-button">Link as button</a>
<button class="zui-button">Click me</button>
<a href="/action" class="zui-button">Link as button</a>

Button Types

Text-only, text with icon, and icon-only buttons at each size.

xs
sm
md
lg
xl

Variants

Controls how the accent colour is applied.

<button class="zui-button">Fill (default)</button>
<button class="zui-button zui-button-variant-subtle">Subtle</button>
<button class="zui-button zui-button-variant-outline">Outline</button>
<button class="zui-button zui-button-variant-ghost">Ghost</button>
<button class="zui-button zui-button-variant-link">Link</button>
<button class="zui-button">Fill (default)</button>
<button class="zui-button zui-button-variant-subtle">Subtle</button>
<button class="zui-button zui-button-variant-outline">Outline</button>
<button class="zui-button zui-button-variant-ghost">Ghost</button>
<button class="zui-button zui-button-variant-link">Link</button>

Accents

Sets the colour palette.

<button class="zui-button">Theme (default)</button>
<button class="zui-button zui-button-color-accent">Accent</button>
<button class="zui-button zui-button-color-destructive">Destructive</button>
<button class="zui-button">Theme (default)</button>
<button class="zui-button zui-button-color-accent">Accent</button>
<button class="zui-button zui-button-color-destructive">Destructive</button>

Sizes

Five size options from extra small to extra large.

<button class="zui-button zui-button-size-xs">Extra small</button>
<button class="zui-button zui-button-size-sm">Small</button>
<button class="zui-button">Medium (default)</button>
<button class="zui-button zui-button-size-lg">Large</button>
<button class="zui-button zui-button-size-xl">Extra large</button>
<button class="zui-button zui-button-size-xs">Extra small</button>
<button class="zui-button zui-button-size-sm">Small</button>
<button class="zui-button">Medium (default)</button>
<button class="zui-button zui-button-size-lg">Large</button>
<button class="zui-button zui-button-size-xl">Extra large</button>

Shapes

Controls border-radius. Includes squircle (limited browser support, uses corner-shape: superellipse).

<button class="zui-button">Default (rounded)</button>
<button class="zui-button zui-button-shape-hard">Hard (square)</button>
<button class="zui-button zui-button-shape-soft">Soft (pill)</button>
<button class="zui-button zui-button-shape-squircle">Squircle</button>
<button class="zui-button">Default (rounded)</button>
<button class="zui-button zui-button-shape-hard">Hard (square)</button>
<button class="zui-button zui-button-shape-soft">Soft (pill)</button>
<button class="zui-button zui-button-shape-squircle">Squircle</button>

Icon Buttons

Square 1:1 buttons for single icons. Uses the icon prop. Always include an aria-label.

<button class="zui-button zui-button-icon" aria-label="Settings">
<i class="ph ph-gear"></i>
</button>

<button class="zui-button zui-button-icon zui-button-variant-outline" aria-label="Edit">
<i class="ph ph-pencil-simple"></i>
</button>

<button class="zui-button zui-button-icon zui-button-variant-ghost" aria-label="Close">
<i class="ph ph-x"></i>
</button>

<button class="zui-button zui-button-icon zui-button-color-destructive" aria-label="Delete">
<i class="ph ph-trash"></i>
</button>
<button class="zui-button zui-button-icon" aria-label="Settings">
<i class="ph ph-gear"></i>
</button>

<button class="zui-button zui-button-icon zui-button-variant-outline" aria-label="Edit">
<i class="ph ph-pencil-simple"></i>
</button>

Icon Button Sizes

Icon Button Shapes

Combining Variant + Accent

<button class="zui-button zui-button-variant-outline zui-button-color-accent">Outline Accent</button>
<button class="zui-button zui-button-variant-ghost zui-button-color-destructive">Ghost Destructive</button>
<button class="zui-button zui-button-variant-subtle zui-button-color-theme">Subtle Theme</button>
<button class="zui-button zui-button-variant-outline zui-button-color-accent">
Outline Accent
</button>

<button class="zui-button zui-button-variant-ghost zui-button-color-destructive">
Ghost Destructive
</button>

Kitchen Sink

<button class="zui-button zui-button-variant-outline zui-button-color-destructive zui-button-size-lg zui-button-shape-soft">
Large Pill Outline Destructive
</button>

Variants × Accents

fill
subtle
outline
ghost
link

Sizes × Shapes

default
hard
soft
squircle

Disabled States

<button class="zui-button" disabled>Fill</button>
<button class="zui-button zui-button-variant-outline" disabled>Outline</button>
<a href="/action" class="zui-button">Default link</a>
<a href="/action" class="zui-button zui-button-variant-outline zui-button-color-accent">Outline link</a>
<a href="/action" class="zui-button zui-button-variant-link">Text link</a>

Theme

Copy this CSS to your project's theme.css file: