Skip to content

Button

新粗野主义风格的按钮组件,支持 9 种变体、5 种尺寸、加载状态和 asChild 组合支持。

预览

安装

pnpm dlx brutx@latest add button

用法

vue
<script setup>
import Button from '@/components/ui/Button.vue'
</script>

<template>
    <Button variant="primary" size="default">
        Click me
    </Button>
</template>

变体

变体说明
default背景色,硬阴影
primaryPrimary(珊瑚色)背景
secondarySecondary(薄荷青)背景
accentAccent(黄色)背景
dangerDestructive(红色)背景,白色文字
successSuccess(绿色)背景
outline透明背景,悬停时反转
ghost无边框和阴影,柔和悬停效果
link无边框和阴影,悬停时显示下划线

尺寸

尺寸高度内边距字体大小
smh-9px-3 py-1text-sm
defaulth-11px-5 py-2text-base
lgh-14px-8 py-3text-lg
xlh-16px-10 py-4text-xl
iconh-11 w-11p-0

加载状态

vue
<script setup>
import { ref } from 'vue'
import Button from '@/components/ui/Button.vue'

const isLoading = ref(false)

async function handleSubmit() {
    isLoading.value = true
    await new Promise(resolve => setTimeout(resolve, 2000))
    isLoading.value = false
}
</script>

<template>
    <Button variant="primary" :loading="isLoading" @click="handleSubmit">
        Save Changes
    </Button>
</template>

禁用状态

vue
<script setup>
import Button from '@/components/ui/Button.vue'
</script>

<template>
    <Button variant="primary" disabled>
        Disabled
    </Button>
</template>

asChild

使用 asChild 将按钮样式渲染到自定义元素上(例如路由链接):

vue
<script setup>
import Button from '@/components/ui/Button.vue'
import { RouterLink } from 'vue-router'
</script>

<template>
    <Button as-child>
        <RouterLink to="/about">About</RouterLink>
    </Button>
</template>

Props

属性类型默认值
variant'default' | 'primary' | 'secondary' | 'accent' | 'danger' | 'success' | 'outline' | 'ghost' | 'link''default'
size'sm' | 'default' | 'lg' | 'xl' | 'icon''default'
asChildbooleanfalse
loadingbooleanfalse
disabledbooleanfalse
classstring