Button
A common button, a control to trigger functions.
Button Themes
The button offers six themes: 'primary' (default), 'success', 'warning', 'danger', 'info', and 'sakura'.
<template>
<px-space>
<px-button>Primary</px-button>
<px-button theme="success">Success</px-button>
<px-button theme="warning">Warning</px-button>
<px-button theme="danger">Danger</px-button>
<px-button theme="info">Info</px-button>
<px-button theme="sakura">Sakura</px-button>
</px-space>
</template>Button Variants
The button is available in four style variants: 'primary' (default), 'plain', 'outline', and 'text'.
<template>
<px-space direction="vertical">
<px-space v-for="variant in variants" :key="variant" style="margin-bottom: 8px">
<px-button
v-for="theme in themes"
:key="theme"
:variant="variant !== 'default' ? variant : undefined"
:theme="theme !== 'default' ? theme : undefined"
style="margin-right: 8px"
>
{{ variantLabels[variant] }}
</px-button>
</px-space>
</px-space>
</template>
<script setup>
const variants = ['default', 'plain', 'outline', 'text']
const themes = ['default', 'success', 'warning', 'danger', 'info', 'sakura']
const variantLabels = {
default: 'Primary',
plain: 'Plain',
outline: 'Outline',
text: 'Text'
}
</script>Button Shapes
The button comes in four shapes: 'default' (default), 'round', 'circle', and 'square'.
<template>
<px-space>
<px-button>Default</px-button>
<px-button shape="round">Round</px-button>
<px-button shape="circle">C</px-button>
<px-button shape="square">S</px-button>
</px-space>
</template>Button Sizes
The button's style can be adjusted using the size prop, which offers three options: 'default' (default), 'small', and 'large'.
<template>
<px-space>
<px-button size="small">Small</px-button>
<px-button>Default</px-button>
<px-button size="large">Large</px-button>
</px-space>
</template>Disabled Status
disabled prop can disables the button.
<template>
<px-button disabled>No Allow</px-button>
</template>Loading Status
loading sets whether the button is in a loading state. When true, the button's native disabled attribute becomes "true" and the button will not respond to click events.
<template>
<px-space>
<px-button style="margin-right: 8px" loading>Loading</px-button>
<px-button loading disabled>Loading</px-button>
</px-space>
</template>Button Icon
Set the button icon via the icon slot.
<template>
<px-button>
<template #icon>
<IconMinds></IconMinds>
</template>
Icon
</px-button>
</template>
<script setup lang="ts">
import { IconMinds } from '@pixelium/web-vue/icon-hn/es'
</script>Full Width
Setting the block property makes the button take up the full line.
<template>
<px-button block>Block</px-button>
</template>Custom Color
Custom primary color: the component will generate a complete color palette based on it, and this palette takes precedence over the preset palettes provided by theme. It supports CSS-like strings such as 'rgb(r, g, b)' and 'rgba(r, g, b, a)', as well as 3-, 4-, 6-, and 8-digit hexadecimal values.
<template>
<px-space>
<px-button color="#409EFF">#409EFF</px-button>
<px-button color="#FAE13C">#FAE13C</px-button>
<px-button color="#E956AE">#E956AE</px-button>
<px-button color="#909399">#909399</px-button>
</px-space>
</template>Rounded Corner Border
borderRadius sets the button's rounded corners, has a higher priority than shape, and behaves consistently with CSS border-radius.
Due to limited time and technical resources, custom border-radius still needs optimization, but it does not affect overall usability.
- A single value or an array of length 1 → applies to all four corners simultaneously;
- An array of length 2 → [top-left & bottom-right, top-right & bottom-left];
- An array of length 3 → [top-left, top-right & bottom-left, bottom-right];
- An array of length 4 → applies to the four corners in a clockwise order.
<template>
<px-space>
<px-button :border-radius="12">12</px-button>
<px-button :border-radius="[12, 8]">[12, 8]</px-button>
<px-button :border-radius="[12, 8, 20]">[12, 8, 20]</px-button>
<px-button :border-radius="[20, 8, 20, 16]">[20, 8, 20, 16]</px-button>
</px-space>
</template>Button Group
Use the ButtonGroup component to group buttons together like this.
<template>
<px-space direction="vertical">
<px-button-group>
<px-button>Primary</px-button>
<px-button theme="sakura">Sakura</px-button>
<px-button color="#E956AE" variant="plain">#E956AE</px-button>
<px-button loading>Loading</px-button>
</px-button-group>
<px-button-group shape="round">
<px-button>Primary</px-button>
<px-button theme="sakura">Sakura</px-button>
<px-button color="#E956AE" variant="plain">#E956AE</px-button>
<px-button loading>Loading</px-button>
</px-button-group>
<px-button-group loading>
<px-button>Primary</px-button>
<px-button theme="sakura">Sakura</px-button>
<px-button color="#E956AE" variant="plain">#E956AE</px-button>
<px-button disabled>Loading</px-button>
</px-button-group>
<px-button-group variant="outline">
<px-button>Primary</px-button>
<px-button theme="sakura">Sakura</px-button>
<px-button color="#E956AE" variant="plain">#E956AE</px-button>
<px-button loading>Loading</px-button>
</px-button-group>
<px-button-group :border-radius="[20, 16, 20, 16]">
<px-button>Primary</px-button>
<px-button theme="sakura">Sakura</px-button>
<px-button color="#E956AE" variant="plain">#E956AE</px-button>
<px-button loading>Loading</px-button>
</px-button-group>
</px-space>
</template>API
ButtonProps
| Attribute | Type | Optional | Default | Description | Version |
|---|---|---|---|---|---|
| borderRadius | NumberOrPercentage | NumberOrPercentage[] | True | | Corner radius, takes precedence over shape and behaves like CSS border-radius. A single value or an array of length 1 → applies to all four corners simultaneously; an array of length 2 → [top-left & bottom-right, top-right & bottom-left]; an array of length 3 → [top-left, top-right & bottom-left, bottom-right]; an array of length 4 → applies to the four corners in a clockwise order. | 0.0.0-beta |
| shape | 'default' | 'round' | 'circle' | 'square' | True | 'default' | Button shape. | 0.0.0-beta |
| size | 'medium' | 'large' | 'small' | True | 'medium' | Button size. | 0.0.0-beta |
| disabled | boolean | True | false | Whether the button is disabled. | 0.0.0-beta |
| loading | boolean | True | false | Whether the button is in a loading state. | 0.0.0-beta |
| variant | 'primary' | 'plain' | 'text' | 'outline' | True | 'primary' | Button style variant. | 0.0.0-beta |
| theme | 'primary' | 'sakura' | 'success' | 'warning' | 'danger' | 'info' | True | 'primary' | Button theme. | 0.0.0-beta |
| color | string | True | | 0.0.0-beta | |
| block | boolean | True | false | Whether to take up the full line. | 0.0.0-beta |
| nativeType | 'button' | 'submit' | 'reset' | True | 'button' | Native HTML <button> type attribute. | 0.0.0-beta |
| autofocus | boolean | True | false | Native HTML <button> autofocus attribute. | 0.0.0-beta |
ButtonEvents
| Event | Parameter | Description | Version |
|---|---|---|---|
| click | e: MouseEvent | Click event. | 0.0.0-beta |
ButtonSlots
| Slot | Parameter | Description | Version |
|---|---|---|---|
| default | | The button's content. | 0.0.0-beta |
| icon | | The button's icon. | 0.0.0-beta |
ButtonGroupProps
| Attribute | Type | Optional | Default | Description | Version |
|---|---|---|---|---|---|
| borderRadius | NumberOrPercentage | NumberOrPercentage[] | True | | Corner radius, takes precedence over shape, overrides the borderRadius of Button child components; rounding only affects the outer borders on both sides of Button child components; behaves like CSS border-radius. A single value or an array of length 1 → applies to all four corners simultaneously; an array of length 2 → [top-left & bottom-right, top-right & bottom-left]; an array of length 3 → [top-left, top-right & bottom-left, bottom-right]; an array of length 4 → applies to the four corners in a clockwise order. | 0.0.0-beta |
| shape | 'default' | 'round' | True | 'default' | Button shape, overrides the shape of the Button child components, rounding only affects the outer borders on both sides of the Button child components. | 0.0.0-beta |
| size | 'medium' | 'large' | 'small' | True | 'medium' | Button size, overrides the size of the Button child components. | 0.0.0-beta |
| disabled | boolean | True | false | Whether to disable. The Button sub-component's disabled and this prop are OR-ed to decide if the sub-component is disabled. | 0.0.0-beta |
| loading | boolean | True | false | Whether to show loading state. The Button sub-component's loading and this prop are OR-ed to decide if the sub-component is in loading state. | 0.0.0-beta |
| variant | 'primary' | 'plain' | 'text' | 'outline' | True | | Button style variant. The Button sub-component's variant and this prop are OR-ed to decide the style variant of the sub-component. | 0.0.0-beta |
ButtonGroupSlots
| Slot | Parameter | Description | Version |
|---|---|---|---|
| default | | The sub-buttons. | 0.0.0-beta |
NumberOrPercentage
export type NumberOrPercentage = number | `${number}%`