Buttons

Style buttons and links with variants and sizes.

Variants and sizes

data-variant picks the visual style, data-size the size. Any variant combines with any size.

Attribute Values
data-variant "filled" (default), "tinted", "outlined", "plain"
data-size "small", "medium" (default), "large"

Button variants

Show editor
<div class="stack-h gap-m">
  <button class="v-button" data-variant="filled">Filled</button>
  <button class="v-button" data-variant="tinted">Tinted</button>
  <button class="v-button" data-variant="outlined">Outlined</button>
  <button class="v-button" data-variant="plain">Plain</button>
</div>

Button sizes

Show editor
<div class="stack-h gap-m">
  <button class="v-button" data-size="small">Small</button>
  <button class="v-button">Medium</button>
  <button class="v-button" data-size="large">Large</button>
</div>

Color

In Varde, buttons get their color from a <color-mode palette="...">. Because color is inherited, there's no special attribute for coloring buttons.

Show editor
<div class="stack-v gap-xs">
  <div class="stack-h gap-xs">
    <button class="v-button">Filled</button>
    <button class="v-button" data-variant="tinted">Tinted</button>
    <button class="v-button" data-variant="outlined">Outlined</button>
    <button class="v-button" data-variant="plain">Plain</button>
  </div>

  <color-mode class="stack-h gap-xs" palette="periwinkle">
    <button class="v-button">Filled</button>
    <button class="v-button" data-variant="tinted">Tinted</button>
    <button class="v-button" data-variant="outlined">Outlined</button>
    <button class="v-button" data-variant="plain">Plain</button>
  </color-mode>

  <color-mode class="stack-h gap-xs" palette="coral">
    <button class="v-button">Filled</button>
    <button class="v-button" data-variant="tinted">Tinted</button>
    <button class="v-button" data-variant="outlined">Outlined</button>
    <button class="v-button" data-variant="plain">Plain</button>
  </color-mode>
  <color-mode class="stack-h gap-xs" palette="purple">
    <button class="v-button">Filled</button>
    <button class="v-button" data-variant="tinted">Tinted</button>
    <button class="v-button" data-variant="outlined">Outlined</button>
    <button class="v-button" data-variant="plain">Plain</button>
  </color-mode>

  <color-mode class="stack-h gap-xs" palette="green">
    <button class="v-button">Filled</button>
    <button class="v-button" data-variant="tinted">Tinted</button>
    <button class="v-button" data-variant="outlined">Outlined</button>
    <button class="v-button" data-variant="plain">Plain</button>
  </color-mode>

  <color-mode class="stack-h gap-xs" palette="yellow">
    <button class="v-button">Filled</button>
    <button class="v-button" data-variant="tinted">Tinted</button>
    <button class="v-button" data-variant="outlined">Outlined</button>
    <button class="v-button" data-variant="plain">Plain</button>
  </color-mode>
</div>

For inverted palettes, add inverted to <color-mode> and place the buttons on a dark surface such as surface-dyed:

Show editor
<color-mode
  inverted
  class="surface-dyed stack-h gap-xs p-xs"
  palette="periwinkle"
>
  <button class="v-button">Filled</button>
  <button class="v-button" data-variant="tinted">Tinted</button>
  <button class="v-button" data-variant="outlined">Outlined</button>
  <button class="v-button" data-variant="plain">Plain</button>
</color-mode>

Shapes

Utility classes combine with .v-button to adjust shape, padding, and other details.

And remember, friends don't let friends make icon buttons without aria-label.

Show editor
<div class="stack-h items-start gap-xs">
  <button class="v-button p-0 aspect-square" data-size="small" aria-label="Add">
    <span class="v-icon" data-v-icon="plus"></span>
  </button>
  <button class="v-button p-0 aspect-square" aria-label="Add">
    <span class="v-icon" data-v-icon="plus"></span>
  </button>
  <button class="v-button p-0 aspect-square" data-size="large" aria-label="Add">
    <span class="v-icon" data-v-icon="plus"></span>
  </button>

  <button
    class="v-button p-0 aspect-square br-circle"
    data-size="small"
    aria-label="Add"
  >
    <span class="v-icon" data-v-icon="plus"></span>
  </button>
  <button class="v-button p-0 aspect-square br-circle" aria-label="Add">
    <span class="v-icon" data-v-icon="plus"></span>
  </button>
  <button
    class="v-button p-0 aspect-square br-circle"
    data-size="large"
    aria-label="Add"
  >
    <span class="v-icon" data-v-icon="plus"></span>
  </button>
</div>

Icons first or last

Show editor
<div class="stack-h gap-xs">
  <button class="v-button" data-variant="outlined">
    <span class="v-icon" data-v-icon="chevron-left"></span> Filter
  </button>
  <button class="v-button" data-variant="outlined">
    Filter <span class="v-icon" data-v-icon="chevron-down"></span>
  </button>
  <button class="v-button" data-variant="outlined">
    <span class="v-icon" data-v-icon="chevron-left"></span> Filter
    <span class="v-icon" data-v-icon="chevron-right"></span>
  </button>
</div>

Do note: Icons inside buttons MUST inherits color. If you're using inline SVGS, then use currentColor.

Pill shaped button

Just add br-pill to v-button and you're done.

Show editor
<button class="v-button br-pill" data-variant="filled">Smaller pill</button>
<button class="v-button br-pill" data-variant="tinted">Smaller pill</button>
<button class="v-button br-pill" data-variant="outlined">Smaller pill</button>

Loading states

A .v-spinner inside a button renders a loading state. It inherits the button's color and size.

Show editor
<div class="stack-h gap-xs mb-xs">
  <button class="v-button">
    <span class="v-spinner"></span>
    Saving…
  </button>
  <button class="v-button" data-variant="outlined">
    <span class="v-spinner"></span>
    Saving…
  </button>
  <button class="v-button" data-variant="tinted">
    <span class="v-spinner"></span>
    Saving…
  </button>
</div>
<color-mode palette="periwinkle" class="stack-h gap-xs">
  <button class="v-button">
    <span class="v-spinner"></span>
    Saving…
  </button>
  <button class="v-button" data-variant="outlined">
    <span class="v-spinner"></span>
    Saving…
  </button>
  <button class="v-button" data-variant="tinted">
    <span class="v-spinner"></span>
    Saving…
  </button>
</color-mode>

Niceness

To get some more visual hierarachy, make the primary action mroe prominent by add some padding and a color-mode.

Show editor
<div class="stack-h gap-xs">
  <color-mode palette="periwinkle">
    <button class="v-button px-l">Save changes</button>
  </color-mode>
  <button class="v-button" data-variant="tinted">Cancel</button>
</div>

Search the docs

Type to search · ↑ ↓ to navigate · Esc to close