Skip to content

Button

The VBtn component is a button element that can be added to your Vue.js templates. It can be used in a variety of ways, including:

  • As a default button
  • With a specified color (primary, secondary, info, warning, error, or dark)
  • With an outlined style
  • With a text style
  • With a flush style, which removes padding and sets the width and height to auto
  • With a rounded style
  • With a tile style, which removes the border radius

Usage

Basic Usage

To use the VBtn component, simply add it to your template.

INFO

The VBtn component is registered globally when you install with @morpheme/ui. So you don't need to import it manually.

Outlined

Use outlined prop to apply outlined style.

Text

Use text prop to apply text style.

Soft

Use soft prop to apply soft style.

Flush

  • Prop: flush
  • Type: boolean
  • Default Value: false

Use flush prop to remove button padding. It will also set the width and height button to auto;

Rounded

Use rounded prop to apply rounded style.

Tile

Use tile prop to apply tile style. This will remove border radius from button.

Sizes

Use size prop to change button size.

You can even roll your own custom sizing with CSS variables:

vue
<template>
  <VBtn
    :style="{
      '--btn-height': 40,
      '--btn-padding-x': 16,
      '--btn-padding-y': 8,
    }"
  >
    Button
  </VBtn>
</template>
<template>
  <VBtn
    :style="{
      '--btn-height': 40,
      '--btn-padding-x': 16,
      '--btn-padding-y': 8,
    }"
  >
    Button
  </VBtn>
</template>

Disabled

Use disabled prop to disable the button.

Outlined button have different disabled style.

Loading

Use loading prop to set button loading state.

Block

Use block prop to make button full width.

Shadow

Use shadow prop to add shadow to the button.

No ring effect

Use no-ring prop to remove ring effect to the button.

Icon

Use prefix-icon prop to add icon to the button before the text. Use suffix-icon prop to add icon to the button after the text.

FAB

Use fab prop to make the button as floating action button (FAB).

Button Group

You can group the button using VBtnGroup component. You can also wrap the grouped button inside toolbar using VBtnToolbar component.

Props

NameTypeDefault
color'default' | 'primary' | 'secondary' | 'info' | 'warning' | 'error' | 'dark' 'default'
size'sm' | 'md' | 'lg' | 'xl' | '2xl''md'
tostring | RouteLocationRawundefined
hrefstringundefined
textbooleanfalse
outlinedbooleanfalse
roundedbooleanfalse
disabledbooleanfalse
noRingbooleanfalse
tilebooleanfalse
blockbooleanfalse
shadowbooleanfalse
iconbooleanfalse
loadingbooleanfalse
loadingTextstringLoading...
newTabbooleanfalse
type'submit' | 'reset' | 'button'button
ringbooleanfalse
solidbooleanfalse
fabbooleanfalse

Events

None

Slots

Use the default slot to place the content such as text or icon.

vue
<template>
  <VBtn> Button </VBtn>
</template>
<template>
  <VBtn> Button </VBtn>
</template>

Use the prefix slot to place the content before the text.

vue
<template>
  <VBtn>
    <template #prefix> Prefix </template>
    Button
  </VBtn>
</template>
<template>
  <VBtn>
    <template #prefix> Prefix </template>
    Button
  </VBtn>
</template>

Use the suffix slot to place the content after the text.

vue
<template>
  <VBtn>
    <template #suffix> Suffix </template>
    Button
  </VBtn>
</template>
<template>
  <VBtn>
    <template #suffix> Suffix </template>
    Button
  </VBtn>
</template>

CSS Variables

scss
:root {
  --btn-border-radius: var(--border-radius-lg);
  --btn-group-border-radius: var(--btn-border-radius);
  --btn-border-width: 1px;
  --btn-padding-x: 14px;
  --btn-padding-y: 0;
  --btn-font-size: var(--size-font-sm);
  --btn-line-height: 20px;
  --btn-font-weight: 600;
  --btn-shadow: none;
  --btn-icon-width: 20px;
  --btn-icon-height: 20px;
  --btn-line-height: 20px;
  --btn-transition: all 0.3s ease-in-out;

  // sm
  --btn-sm-height: 32px;

  // md
  --btn-md-height: 44px;

  // lg
  --btn-lg-height: 52px;

  // xl
  --btn-xl-height: 60px;

  // 2xl
  --btn-2xl-height: 68px;
}
:root {
  --btn-border-radius: var(--border-radius-lg);
  --btn-group-border-radius: var(--btn-border-radius);
  --btn-border-width: 1px;
  --btn-padding-x: 14px;
  --btn-padding-y: 0;
  --btn-font-size: var(--size-font-sm);
  --btn-line-height: 20px;
  --btn-font-weight: 600;
  --btn-shadow: none;
  --btn-icon-width: 20px;
  --btn-icon-height: 20px;
  --btn-line-height: 20px;
  --btn-transition: all 0.3s ease-in-out;

  // sm
  --btn-sm-height: 32px;

  // md
  --btn-md-height: 44px;

  // lg
  --btn-lg-height: 52px;

  // xl
  --btn-xl-height: 60px;

  // 2xl
  --btn-2xl-height: 68px;
}

Tailwind Plugin

This package comes with custom tailwind plugin for styling. If you are installing this package separately from @morpheme/ui package, you need to include the plugin in plugins section in your Tailwind config file.

js
// tailwind.config.js
module.exports = {
  content: [],
  plugins: [require('@morpheme/tailwind-components/button')],
};
// tailwind.config.js
module.exports = {
  content: [],
  plugins: [require('@morpheme/tailwind-components/button')],
};

Standalone Installation

You can also install the Button component individually via @morpheme/button package:

bash
npm i @morpheme/button
npm i @morpheme/button
vue
<script setup lang="ts">
import VBtn from '@morpheme/button';
</script>

<template>
  <VBtn> Button </VBtn>
</template>
<script setup lang="ts">
import VBtn from '@morpheme/button';
</script>

<template>
  <VBtn> Button </VBtn>
</template>

Storybook

View Storybook documentation here.