UI组件前端【免费下载链接】shadcn-vueVue port of shadcn-ui项目地址https://gitcode.com/gh_mirrors/sh/shadcn-vue点击查看免费下载本篇技术指南以 shadcn-vue 官方文档的 Badge 组件页面为骨架结合仓库中的真实注册表源码与示例完整讲解 Badge徽章组件的安装方式、四种内置变体default / secondary / destructive / outline、底层cva样式变体机制的实现原理以及基于/lib/utils的cn工具进行样式合并与自定义扩展的实战方案。读完本文你将能够在自己的 Vue 3 Tailwind CSS 项目中独立安装、使用并深度定制 Badge 组件同时理解其背后 class-variance-authority 的变体设计模式。Badge 组件是什么Badge 用于展示一个徽章样式的小型标签或者一个看起来像徽章的组件。它的典型应用场景包括状态标记如进行中已完成已废弃分类标签与数量统计如3 条新消息表单字段的附属说明与图标、加载指示器组合形成更丰富的交互提示。在 shadcn-vue 中Badge 是少数不依赖任何 headless 交互逻辑的纯展示组件它没有键盘交互、焦点管理或 ARIA 状态核心就是一个基于 class-variance-authoritycva声明样式变体的容器。这也使它成为理解 shadcn-vue 样式系统的最佳入门组件之一。安装 BadgeBadge 组件的安装有两种方式通过 CLI 自动安装或手动复制源码。方式一CLI 安装在项目根目录执行以下命令npx shadcn-vuelatest add badge该命令会从注册表拉取 Badge 组件并放入项目的src/components/ui/badge目录同时自动处理依赖class-variance-authority、/lib/utils中的cn工具函数与路径别名。方式二手动复制若希望完全掌控源码可将以下代码复制到src/components/ui/badge/Badge.vue同时参考仓库中的 默认版本实现script setup langts import type { VariantProps } from class-variance-authority import { cva } from class-variance-authority import { cn } from /lib/utils definePropsProps() const badgeVariants cva( inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2, { variants: { variant: { default: border-transparent bg-primary text-primary-foreground hover:bg-primary/80, secondary: border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80, destructive: border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80, outline: text-foreground, }, }, defaultVariants: { variant: default, }, }, ) interface BadgeVariantProps extends VariantPropstypeof badgeVariants {} interface Props { variant?: BadgeVariantProps[variant] } /script template div :classcn(badgeVariants({ variant }), $attrs.class ?? ) slot / /div /template手动安装时需要确保项目具备以下前置条件安装了class-variance-authority存在/lib/utils模块并导出cn工具函数通常基于clsx与tailwind-mergeTailwind CSS 主题中定义了primary、secondary、destructive、ring等设计令牌颜色。源码剖析cva 变体如何工作仓库中的 badge/index.ts 提供了该组件更完整的生产级实现其中badgeVariants的定义与文档中的内联版本几乎一致但基础类中额外加入了gap-1import type { VariantProps } from class-variance-authority import { cva } from class-variance-authority export { default as Badge } from ./Badge.vue export const badgeVariants cva( inline-flex gap-1 items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2, { variants: { variant: { default: border-transparent bg-primary text-primary-foreground hover:bg-primary/80, secondary: border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80, destructive: border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80, outline: text-foreground, }, }, defaultVariants: { variant: default, }, }, ) export type BadgeVariants VariantPropstypeof badgeVariants几个值得注意的实现细节基础样式类baseinline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors定义了徽章的胶囊外形、字号与过渡动画是所有变体共享的骨架focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2保证了键盘聚焦时的可见性符合可访问性要求。变体variants四个变体通过 Tailwind 颜色令牌切换主题default使用primary前景/背景色并带hover:bg-primary/80悬停反馈secondary/destructive同理outline只设置text-foreground保留边框、去掉填充。默认变体defaultVariantsvariant: default表示未传variantprop 时自动回退到 primary 风格。类型安全BadgeVariants VariantPropstypeof badgeVariants把 cva 的变体类型自动推导为联合类型使组件variantprop 获得完整的类型提示与编译期校验。对应的 Badge.vue 组件实现非常精简script setup langts import type { HTMLAttributes } from vue import type { BadgeVariants } from . import { cn } from /lib/utils import { badgeVariants } from . const props defineProps{ variant?: BadgeVariants[variant] class?: HTMLAttributes[class] }() /script template div :classcn(badgeVariants({ variant }), props.class) slot / /div /template它只做三件事接收variant与classprop调用badgeVariants({ variant })生成变体类名再通过cn()与外部传入的class合并——cn内部的 tailwind-merge 会智能处理类名冲突因此调用方传入的bg-*、text-*等类可以安全地覆盖默认样式这就是 Badge 易于定制的根本原因。基本使用安装完成后在任意组件中导入并使用script setup langts import { Badge } from /components/ui/badge /script template BadgeBadge/Badge /templateBadge通过默认插槽slot /渲染任意内容文本、图标、甚至是内嵌的加载指示器都可以直接放入。四种内置变体示例仓库中的四个示例组件见 demo 目录展示了全部内置变体的用法Default默认template BadgeBadge/Badge /template对应源码BadgeDemo.vue。使用primary主题色填充是最常用的主视觉徽章。Secondary次要template Badge variantsecondary Secondary /Badge /template对应源码BadgeSecondaryDemo.vue。使用secondary主题色适合作为次要信息或弱化操作区的标签。Outline描边template Badge variantoutline Outline /Badge /template对应源码BadgeOutlineDemo.vue。无填充色仅保留边框与前景色适合低调的元信息展示。Destructive破坏性template Badge variantdestructive Destructive /Badge /template对应源码BadgeDestructiveDemo.vue。使用destructive红色系用于错误、删除、危险操作等负面语义标记。进阶用法图标、链接、加载态与自定义颜色在仓库的 v4 注册表中Badge 提供了比文档更丰富的一组扩展示例见 bases/reka/examples/badge可作为实战参考BadgeVariants.vue一次性展示全部变体其中还包含文档未提及的ghost与link变体v4 版本新增印证了 cva 变体集合的可扩展性BadgeAsLink.vue把徽章渲染为链接实现可点击的标签导航BadgeWithIconLeft.vue / BadgeWithIconRight.vue在文本两侧插入图标配合基础类中的gap-1自动保持图标与文字的间距BadgeWithSpinner.vue内嵌加载指示器适合保存中上传中等异步状态BadgeCustomColors.vue通过cn合并机制用自定义 Tailwind 类覆盖默认配色BadgeLongText.vue演示长文本场景下的换行与布局表现。同时v4 版本的 Badge.vue 基于 reka-ui 的Primitive组件重构通过reactiveOmit透传非 class 属性并额外标注了data-slotbadge与data-variant数据属性方便针对组件进行选择器定位与样式挂钩script setup langts import type { PrimitiveProps } from reka-ui import type { HTMLAttributes } from vue import type { BadgeVariants } from . import { reactiveOmit } from vueuse/core import { Primitive } from reka-ui import { cn } from /lib/utils import { badgeVariants } from . const props definePropsPrimitiveProps { variant?: BadgeVariants[variant] class?: HTMLAttributes[class] }() const delegatedProps reactiveOmit(props, class) /script template Primitive >赞分享UI组件前端【免费下载链接】shadcn-vueVue port of shadcn-ui项目地址https://gitcode.com/gh_mirrors/sh/shadcn-vue点击查看免费下载相关推荐shadcn-vue Alert 组件完全指南安装、用法与变体定制shadcn vue Alert 组件完全指南安装、用法与变体定制 本文围绕 shadcn vueVue 版 shadcn ui仓库中的 Alert 组件UI组件前端shadcn-vue 手风琴Accordion组件完全指南从安装、用法到源码级定制shadcn vue 手风琴Accordion组件完全指南从安装、用法到源码级定制 导读 本文围绕 shadcn vue 仓库中 Accordion手风UI组件前端shadcn-vue Table 组件完全指南安装、组合式 API 与源码级解析shadcn vue Table 组件完全指南安装、组合式 API 与源码级解析 Table 是 shadcn vue 中一个响应式responsive数UI组件前端上一篇解码Windows网络黑匣子etl2pcapng如何让ETL文件在Wireshark中开口说话下一篇终极指南Karabiner-Elements键盘映射工具的系统权限与唤醒问题深度解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
KuGouMusicApi库模式指南:不启动HTTP服务,编程式调用酷狗音乐API的正确姿势 KuGouMusicApi库模式指南:不启动HTTP服务,编程式调用酷狗音乐API的正确姿势 【免费下载链接】KuGouMusicApi 酷狗音乐 Node.js API service 项目地址: https://gitcode.com/gh_mirrors/ku/KuGouMusicApi
KuGouMusicApi 是一款基于 Node.js 的酷狗… · 2026/9/24 14:13:35
大泽湖海归小镇,从一场论坛到一座“留人”的城 作者 | 辰纹来源 | 洞见新研社今天,2026海创论坛及海归论坛在长沙望城收官。300余位嘉宾、15个优质海归创业项目、一批重大项目集中签约,这是论坛的“面子”,而真正值得关注的,是论坛的“里子”,散场之后,那… · 2026/9/24 14:13:29
408真题考频统计:从13年真题数据里找出四科高频考点,复习不再平均用力 408真题考频统计:从13年真题数据里找出四科高频考点,复习不再平均用力 【免费下载链接】cs-408 计算机考研专业课程408相关的复习经验,资源和OneNote笔记 项目地址: https://gitcode.com/GitHub_Trending/cs/cs-408
翻开真题不知该先啃… · 2026/9/24 14:13:29
C语言动态内存管理详解:从malloc到柔性数组 1. 引言在C语言的学习过程中,内存管理始终是一个绕不开的核心话题。很多初学者在编写程序时,往往只关注逻辑是否正确,却忽略了内存的分配与释放。实际上,动态内存管理是C语言中极为重要的一环,它直接关系到程序的稳定性… · 2026/9/24 14:48:01
低空空域智能管控怎么做?物理AI+数字孪生完整技术架构解析 低空空域智能管控的最优物理AI方案,不应只是“无人机监控大屏”,而应该是一套能够完成空域数字化、实时感知、航线规划、仿真推演、风险预测、智能调度和应急处置的闭环系统。按照城市级数字孪生能力、空域数据融合、飞行器实时感知、仿真预测、多机协同… · 2026/9/24 14:47:47
G6 径向布局(Radial Layout)实战指南:同心圆分层、节点防重叠与聚类排序 G6 径向布局(Radial Layout)实战指南:同心圆分层、节点防重叠与聚类排序 【免费下载链接】G6 ♾ A Graph Visualization Framework in JavaScript. 项目地址: https://gitcode.com/gh_mirrors/g6/G6
径向布局(Radial Layou… · 2026/9/24 14:47:47
webnovel-writer 冲突设计实战:从一句核心冲突到整卷危机链的完整工作流 webnovel-writer 冲突设计实战:从一句核心冲突到整卷危机链的完整工作流 【免费下载链接】webnovel-writer 基于 Claude Code 的长篇网文辅助创作系统,解决 AI 写作中的「遗忘」和「幻觉」问题,支持 200 万字量级 连载创作。 项目地址: htt… · 2026/9/24 14:47:47
工业 AI 项目Sim‑to‑Real鸿沟,公共产业载体可以补齐哪些中间环节 Sim‑to‑Real(仿真到现实鸿沟)是工业 AI、具身智能赛道老生常谈的技术难题。模型在仿真环境指标表现优秀,部署到真实工厂、真实硬件之后,受光照、摩擦、噪声、设备公差影响,效果出现明显跳水。对于中小 AI 团队、硬件… · 2026/9/24 14:47:47
LanceDB 清理操作统计:RemovalStats 接口深度解析(Node.js SDK) 向量数据库数据库人工智能后端 【免费下载链接】lancedb Developer-friendly OSS embedded retrieval library for multimodal AI. Search More; Manage Less. 项目地址: https://gitcode.com/gh_mirrors/la/lancedb 点击查看 免费下载 LanceDB 的 Node.js… · 2026/9/24 14:47:41
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44