Zazz Design Framework
Primitives

Button

The primary action element. Four variants plus a square icon-only modifier.

A button is the element users press to do a thing. Apply the button class to an <a>, <button>, or any clickable element. Add a variant class to choose the visual treatment.

Variants

Variant classUse forshadcn equivalent
buttonDefault outlined treatment. Neutral, fits anywhere.button (default / outline)
button-primaryThe page's most important action. Filled with --primary.button-primary (default)
button-mutedA secondary action that still asks for attention. Soft background.button-secondary
button-ghostTertiary actions and toolbars. Transparent until hover.button-ghost
button-linkInline text-style action that doesn't need to look like a button.button-link

Variant classes apply alongside button. The base sets sizing, padding, and shared focus behavior; the variant sets color and surface.

<a class="button" href="/contact">Get in touch</a>
<a class="button button-primary" href="/signup">Start free trial</a>
<a class="button button-muted" href="/save">Save draft</a>
<a class="button button-ghost" href="/help">Help</a>
<a class="button button-link" href="/learn">Learn more</a>

With icons

Icon-only

The button-minimal modifier makes a square icon-only button at the same height as the default button. Drop the button-text element and add aria-label to the root.

<button class="button button-minimal" aria-label="Open menu">
  <span class="button-icon"><!-- menu icon --></span>
</button>

<a class="button button-primary button-minimal" aria-label="Save" href="/save">
  <span class="button-icon"><!-- check icon --></span>
</a>

Anatomy

<a class="button" href="/example">
  <span class="button-icon"><!-- optional leading icon --></span>
  <span class="button-text">Label</span>
  <span class="button-icon"><!-- optional trailing icon --></span>
</a>
PartClassNotes
RootbuttonThe clickable element. Required.
Variantbutton-primary, button-muted, button-ghost, button-linkOptional. Apply at most one.
Modifierbutton-minimalSquare icon-only treatment. Stacks with variant.
Iconbutton-iconWraps the icon SVG. Use one on each side as needed.
Labelbutton-textThe visible label. Omit for icon-only buttons.

Tokens

PropertyToken / value
Height--step-9
Padding (inline)--step-2_5
Gap between icon and label--step-1_5
Border1px solid var(--border) (default), variant-dependent elsewhere
Radius--radius-button (defaults to --radius-md)
Background (default)--card
Background (primary)--primary → text --primary-foreground
Background (muted)--muted with --faded border → text --foreground
Background (ghost)transparent → hover paints --muted
Background (link)transparent → hover sets text to --primary
Fontfamily --font-body, size --font-size-sm, weight --weight-body, line-height 1
Hoverbackground-color shifts to --muted (default) or stays + drops opacity (primary, muted)
Activeopacity: 0.8
Focus-visiblebox-shadow: var(--focus-ring) (apply via the ring utility class)

Re-target --radius-button (in Foundations → Radius) to make every button a capsule or a perfect square.

Accessibility

  • Use <button> for actions in the page and <a class="button"> for navigation. The class works on both; the element conveys the semantic.
  • For icon-only buttons (button-minimal without button-text), set aria-label describing the action.
  • Focus state uses :focus-visible, so keyboard users see the outline and mouse users don't.
  • Disabled buttons should set the disabled attribute on <button> or aria-disabled="true" on <a>. The button drops opacity and ignores pointer events.

Cross-platform

PlatformReference
FigmaZazz v0.4.4 → button (component_set with variant, label, icon-position properties)
Webflowbutton class with button-{variant} modifier
CSS / TailwindThe same classes after installing utilities.css

Where to next

On this page