Skip to content
Components

Buttons

Solid, secondary, soft, outline, ghost — sized small, default, and large. With loading and disabled states.

Stable Keyboard Screen reader Evergreen

Variants

Status colors

Sizes

With icons

Loading state

Add aria-busy="true" for loading spinners that overlay the button text without changing layout:

html
<button class="b-btn" aria-busy="true">Saving</button>

Disabled

Icon-only

Button groups

Full width

html
<button class="b-btn b-btn-block">Block button</button>

States

API

Name Type Default Description
.b-btn base Default solid button. Pair with one of the variants below.
.b-btn-secondary variant Surface background, neutral border. Use for non-primary actions.
.b-btn-ghost variant Transparent until hover. Best in dense toolbars.
.b-btn-soft variant Tinted primary background. Lower contrast than solid.
.b-btn-outline variant Border-only with primary color.
.b-btn-success variant Green background, success ink color.
.b-btn-warning variant Amber background, warning ink color.
.b-btn-danger variant Red background, danger ink color.
.b-btn-sm size Smaller height (var(--b-control-sm)).
.b-btn-lg size Larger height (var(--b-control-lg)).
.b-btn-block modifier Full-width button.
.b-icon-btn base Square 1:1 button for icons only. Always pair with aria-label.
.b-btn-group layout Visually joins adjacent .b-btn elements.
aria-busy attribute false Set to true to show a centered loading spinner.
disabled attribute Standard HTML disabled state.

Accessibility

  • Always use semantic <button> (or <a> for navigation)
  • aria-busy="true" for loading
  • aria-disabled="true" for visually-disabled-but-focusable
  • Icon-only buttons need aria-label
Edit this page