Buttons are interactive elements used to trigger actions. They size to their content by default and should communicate clear intent and hierarchy.
The class is required for styled buttons. The bare <button> element has only a minimal reset — always add class="button" to get the full button appearance.
Primary Button
The default is the most prominent action on the page.
Default
Hover
Disabled
<button class="button">Primary Action</button>
<button class="button" disabled>Primary Action</button>
Outline Button
removes the filled background and uses a border instead. Use for secondary actions that shouldn't compete with the primary CTA.
Default
Hover
Disabled
<button class="button is-outline">Secondary Action</button>
Faded Button
applies a subtle background for low-priority or passive actions.
Default
Hover
Disabled
<button class="button is-faded">Optional Action</button>
Outline + Faded
.is-outline.is-faded combines both modifiers for tertiary or utility actions.
Default
Hover
Disabled
<button class="button is-outline is-faded">Tertiary Action</button>
Small Button
reduces font size and padding for dense UI areas.
Default
Disabled
<button class="button is-small">Small Primary</button>
<button class="button is-small is-outline">Small Outline</button>
<button class="button is-small is-faded">Small Faded</button>
Icon Button
creates a circular button designed for icons only. Always include aria-label for accessibility.
Default
Disabled
<button class="button is-icon" aria-label="Close">
<div class="svg-icn" data-icon="close"><!-- SVG icon --></div>
</button>
<button class="button is-icon is-faded" aria-label="Search">
<div class="svg-icn" data-icon="search"><!-- SVG icon --></div>
</button>
Button Group
is a flex container for grouping multiple buttons together. It provides consistent spacing, wraps on smaller screens, and vertically centres buttons of different sizes.
Left-aligned (default)
Centred
Right-aligned
Mixed sizes
<div class="button-group">
<button class="button">Confirm</button>
<button class="button is-outline">Cancel</button>
</div>
<div class="button-group justify-center">...</div>
<div class="button-group justify-end">...</div>
| Class | Effect |
|---|---|
| Flex container with consistent gap | |
| Centre-aligns the group | |
| Right-aligns the group |
All Variants
A side-by-side comparison of every button style at default size.
Copy Button
The adds clipboard copy functionality to any button. It copies the value from data-copy and shows a "Copied!" state. Three variants are available. See the Copy Button docs for full details.
Icon + Text
Icon Only
Ghost
<!-- Icon + Text -->
<button class="button is-small is-outline copy-btn" data-copy="value" type="button">
<span class="copy-btn-default">{{icon:copy}} Copy</span>
<span class="copy-btn-copied">{{icon:check}} Copied!</span>
</button>
<!-- Icon Only -->
<button class="button is-small is-outline copy-btn is-icon-only" data-copy="value" data-tooltip="Copy" type="button" aria-label="Copy">
<span class="copy-btn-default">{{icon:copy}}</span>
<span class="copy-btn-copied">{{icon:check}}</span>
</button>
<!-- Ghost -->
<button class="button copy-btn is-ghost" data-copy="value" data-tooltip="Copy" type="button" aria-label="Copy">
<span class="copy-btn-default">{{icon:copy}}</span>
<span class="copy-btn-copied">{{icon:check}}</span>
</button>
Requires assets/js/copy-button.js.
Usage Rules
- Buttons should never stretch full width by default
- Use one clear primary button per section when possible
- Use outline or faded styles to reduce visual competition
- Use icon buttons only when the icon meaning is clear
- If a button feels too prominent or too quiet, change the modifier — not the base styles