Badge 徽标
新粗野主义风格的行内徽章组件,用于标签、状态和分类。支持多种变体、尺寸、圆点指示器、脉冲动画和可关闭功能。
预览
变体
尺寸
圆点指示器
脉冲动画
图标插槽
可关闭徽标
安装
pnpm dlx brutx-vue@latest add badge用法
<script setup>
import { Badge } from 'brutx-ui-vue'
</script>
<template>
<Badge variant="default">Default</Badge>
<Badge variant="primary">Primary</Badge>
<Badge variant="success">Success</Badge>
</template>圆点指示器
通过 dot 属性在徽标前渲染一个小圆点,常用于状态指示。圆点颜色继承当前文本颜色(bg-current),尺寸随 size 自动调整。
| 尺寸 | 圆点大小 | 右间距 |
|---|---|---|
sm | h-1.5 w-1.5 | mr-1 |
default | h-2 w-2 | mr-1.5 |
lg | h-2.5 w-2.5 | mr-2 |
<script setup>
import { Badge } from 'brutx-ui-vue'
</script>
<template>
<Badge dot>在线</Badge>
<Badge variant="success" dot>可用</Badge>
<Badge variant="danger" dot>离线</Badge>
<Badge variant="accent" dot size="sm">小尺寸</Badge>
</template>脉冲动画
通过 pulse 属性为圆点启用脉冲动画(animate-brutal-badge-pulse)。pulse 隐含 dot,无需同时设置。适用于实时状态、新消息提醒等需要吸引注意力的场景。
<script setup>
import { Badge } from 'brutx-ui-vue'
</script>
<template>
<Badge variant="success" pulse>实时同步中</Badge>
<Badge variant="danger" pulse>新消息</Badge>
<Badge variant="primary" pulse>直播中</Badge>
</template>可关闭徽标
通过 closable 属性在徽标右侧渲染一个关闭按钮(X 图标)。点击按钮会触发 close 事件,且事件不会冒泡(内部已调用 stopPropagation)。关闭按钮内置无障碍支持,aria-label 通过国际化系统自动适配当前语言。
<script setup>
import { ref } from 'vue'
import { Badge } from 'brutx-ui-vue'
const tags = ref(['Vue', 'TypeScript', 'Tailwind CSS'])
function handleClose(index: number) {
tags.value.splice(index, 1)
}
</script>
<template>
<div class="flex flex-wrap items-center gap-2">
<Badge
v-for="(tag, index) in tags"
:key="tag"
variant="primary"
closable
@close="handleClose(index)"
>
{{ tag }}
</Badge>
<span v-if="tags.length === 0" class="text-sm text-brutal-fg">所有标签已关闭</span>
</div>
</template>图标插槽
通过 icon 具名插槽在徽标内容前插入图标。建议使用 @lucide/vue 图标库,并根据 size 设置合适的图标尺寸。
<script setup>
import { Badge } from 'brutx-ui-vue'
import { CheckCircle, AlertTriangle, Info } from '@lucide/vue'
</script>
<template>
<Badge variant="success">
<template #icon>
<CheckCircle class="h-3.5 w-3.5" />
</template>
已完成
</Badge>
<Badge variant="danger">
<template #icon>
<AlertTriangle class="h-3.5 w-3.5" />
</template>
需要注意
</Badge>
<Badge variant="secondary">
<template #icon>
<Info class="h-3.5 w-3.5" />
</template>
提示信息
</Badge>
</template>组合使用
圆点、图标插槽和关闭按钮可组合使用:
<script setup>
import { Badge } from 'brutx-ui-vue'
import { Star } from '@lucide/vue'
function handleClose() {
console.log('徽标已关闭')
}
</script>
<template>
<Badge variant="primary" dot closable @close="handleClose">
状态徽标
</Badge>
<Badge variant="accent" closable @close="handleClose">
<template #icon>
<Star class="h-3.5 w-3.5" />
</template>
收藏
</Badge>
</template>变体
| 变体 | 说明 |
|---|---|
default | 标准背景色,带小阴影 |
primary | Primary(珊瑚色)背景 |
secondary | Secondary(薄荷青)背景 |
accent | Accent(黄色)背景 |
danger | Destructive(红色)背景 |
success | Success(绿色)背景 |
outline | 透明背景,无阴影 |
尺寸
| 尺寸 | 内边距 | 字体大小 |
|---|---|---|
sm | px-2 py-0.5 | text-xs |
default | px-3 py-1 | text-sm |
lg | px-4 py-1.5 | text-base |
<script setup>
import { Badge } from 'brutx-ui-vue'
</script>
<template>
<Badge variant="primary" size="sm">Small</Badge>
<Badge variant="primary" size="default">Default</Badge>
<Badge variant="primary" size="lg">Large</Badge>
</template>导出类型
组件同时导出 badgeVariants 工具函数,可在自定义组件中复用 Badge 的样式变体:
import { badgeVariants } from 'brutx-ui-vue'
// 返回组合后的 Tailwind 类名字符串
const classes = badgeVariants({ variant: 'primary', size: 'sm' })API 参考
| 名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|
variant | "accent-subtle" | "accent" | "danger-subtle" | "danger" | "default" | "info-subtle" | "outline" | "primary-subtle" | "primary" | "secondary-subtle" | "secondary" | "success-subtle" | "success" | undefined | "default" | 徽标的配色及边框变体。 |
详情声明类型NonNullable<"default" | "primary" | "secondary" | "success" | "danger" | "primary-subtle" | "secondary-subtle" | "danger-subtle" | "success-subtle" | "info-subtle" | "accent" | "outline" | "accent-subtle" | null | undefined> | undefined 字面量
默认值详情
来源packages/ui/src/components/badge/Badge.vue | |||
size | "default" | "lg" | "sm" | undefined | "default" | 设置徽标尺寸,同时调整圆点、图标间距和关闭图标大小。 |
详情声明类型NonNullable<"default" | "lg" | "sm" | null | undefined> | undefined 字面量
默认值详情
来源packages/ui/src/components/badge/Badge.vue | |||
closable | boolean | undefined | false | 显示关闭按钮;关闭后是否移除徽标由使用方处理。 |
详情声明类型boolean | undefined 字面量
默认值详情
来源packages/ui/src/components/badge/Badge.vue | |||
dot | boolean | undefined | false | 在徽标内容前显示装饰性圆点。 |
详情声明类型boolean | undefined 字面量
默认值详情
来源packages/ui/src/components/badge/Badge.vue | |||
pulse | boolean | undefined | false | 显示圆点并启用圆点脉冲动画,即使 dot 未开启也会显示。 |
详情声明类型boolean | undefined 字面量
默认值详情
来源packages/ui/src/components/badge/Badge.vue | |||
class | string | undefined | undefined | 合并到徽标根 span 元素的自定义 CSS 类。 |
详情声明类型string | undefined 默认值详情
来源packages/ui/src/components/badge/Badge.vue | |||
| 名称 | 签名或类型 | 说明 |
|---|---|---|
@close | [] | 点击关闭按钮时发出;组件会先阻止该点击事件冒泡。 |
详情声明类型[] 来源packages/ui/src/components/badge/Badge.vue | ||
| 名称 | 签名或类型 | 说明 |
|---|---|---|
#icon | {} | 显示在主体内容前的图标;存在插槽时才创建图标容器。 |
详情声明类型{}来源packages/ui/src/components/badge/Badge.vue | ||
#default | {} | 徽标的文字或主体内容。 |
详情声明类型{}来源packages/ui/src/components/badge/Badge.vue | ||
可访问性
- 键盘操作:关闭按钮支持
Space/Enter触发 - ARIA 属性:关闭按钮自动设置
aria-label,通过国际化系统适配当前语言 - 动效降级:尊重
prefers-reduced-motion系统设置,脉冲动画自动禁用