你是否厌倦了这样的场景?
安装一个组件库,结果发现样式改不了、功能扩展不了,想调整一个小细节还得翻遍文档找 API,最后发现根本不支持。于是只能妥协,或者自己重写一遍。
今天要介绍的 shadcn/ui,彻底颠覆了这个困境。
源码下载:
ui-main.zip
(47.58 MB, 下载次数: 0)
它不是组件库,是你的代码
shadcn/ui 最大的创新在于:它不是 npm 依赖,而是直接把源码复制到你的项目里。
传统方式:
npm install some-ui-library
import { Button } from 'some-ui-library'
shadcn/ui 方式:
npx shadcn-ui add button
# 源码直接生成到 components/ui/button.tsx
这意味着什么?代码完全属于你。想改样式?改。想加功能?加。想重构?随便。没有任何限制。
技术架构:简单而优雅
shadcn/ui 基于三个核心技术栈:
1. Radix UI - 负责行为
提供无障碍访问、键盘导航、焦点管理等底层能力。你不用担心 a11y 问题,开箱即用。
2. Tailwind CSS - 负责样式
所有样式都是 Tailwind 类名,直观易懂。想改颜色?改个类名就行。
3. CVA - 负责变体管理
通过 class-variance-authority
管理组件的不同状态:
const buttonVariants = cva("base-styles", {
variants: {
variant: {
default: "bg-primary text-white",
outline: "border border-gray-300",
ghost: "hover:bg-gray-100"
},
size: {
sm: "h-9 px-3",
lg: "h-11 px-8"
}
}
})
类型安全、易于扩展、一目了然。
实际使用:5 分钟上手
初始化项目
npx shadcn-ui@latest init
回答几个问题(TypeScript?Tailwind 配置路径?),自动完成配置。
添加组件
npx shadcn-ui add button dialog form
组件源码会出现在 components/ui/
目录,直接就能用:
import { Button } from "@/components/ui/button"
export default function Page() {
return (
<div>
<Button variant="default">点击我</Button>
<Button variant="outline">次要按钮</Button>
<Button variant="ghost" size="sm">小按钮</Button>
</div>
)
}
自定义修改
想让按钮更圆?打开 button.tsx
,改一行代码:
// 把 rounded-md 改成 rounded-full
"inline-flex items-center rounded-full ..."
就这么简单。
主题系统:深色模式开箱即用
shadcn/ui 使用 CSS 变量实现主题:
:root {
--primary: 222.2 47.4% 11.2%;
--secondary: 210 40% 96.1%;
--destructive: 0 84.2% 60.2%;
}
.dark {
--primary: 210 40% 98%;
--secondary: 217.2 32.6% 17.5%;
}
切换主题只需要切换 dark
类名,所有组件自动适配。
为什么开发者都在用它?
1. 完全控制权
代码在你手里,想怎么改就怎么改。不用等库更新,不用提 PR。
2. 零学习成本
如果你会 React 和 Tailwind,就已经会用 shadcn/ui 了。
3. AI 友好
代码结构清晰,非常适合 AI 辅助开发。告诉 Cursor 或 Copilot:"修改这个按钮加个图标",它能准确理解并修改。
4. 按需使用
只添加需要的组件,没有冗余代码。项目打包体积完全可控。
5. 生产级质量
- 完整的 TypeScript 支持
- 无障碍访问标准
- 响应式设计
- 动画流畅自然
适合什么场景?
✅ SaaS 产品 - 需要快速迭代和定制化
✅ 企业后台 - 需要统一设计系统
✅ 个人项目 - 想要高质量 UI 但不想从零开始
✅ 设计系统 - 作为基础组件库进行二次开发
社区生态
- 96k+ Stars - GitHub 前端项目顶流
- 26k+ 项目使用 - 生产环境验证
- 活跃的社区 - 问题响应快,文档完善
- 丰富的模板 - 各种场景的起始模板
快速开始
- 访问官网:https://ui.shadcn.com
- 选择你的框架(Next.js / Remix / Vite)
- 运行
npx shadcn-ui@latest init
- 开始添加组件
建议:先从 Button、Card、Dialog 这些基础组件开始,熟悉代码结构后再探索更复杂的组件。
写在最后
shadcn/ui 证明了一件事:有时候最好的库,就是不是库。
它给你的不是黑盒依赖,而是高质量的代码模板。不是限制你的框架,而是帮你快速起步的工具。
如果你还在为组件库的限制而烦恼,不妨试试 shadcn/ui。它可能会改变你对前端组件的认知。
关注《云栈大前端》,获取更多前端、移动、全栈领域的开源项目深度解析!
📦 项目信息
GitHub 地址:
https://github.com/shadcn-ui/ui
官方文档:
https://ui.shadcn.com
快速开始:
npx shadcn-ui@latest init
🏷️ 标签:#shadcn-ui #Github #React #Tailwind #组件库 #前端工程化 #开源项目