做前端界面时,很多人会同时听到三个名字:Radix UI、shadcn/ui、daisyUI。它们都能帮你少造轮子,但不是同一层东西。
一个管交互和无障碍,几乎不带皮;一个把现成组件代码交到你项目里改;一个像传统组件库,写 class 就能出按钮和弹窗。选错层,后面要么样式永远写不完,要么主题改不动,要么可访问性要补课。
下面用一张表把三家摆在一起,再给一个按目标选型的短结论。
一张表对比
| 对比项 | Radix UI | shadcn/ui | daisyUI |
|---|---|---|---|
| 本质 | 无样式的 Headless 组件库 | 基于 Radix + Tailwind 的可复制组件 | Tailwind 的插件式组件库 |
| 样式来源 | 完全自己写 | 官方提供可复制的 Tailwind 代码 | 通过语义化 class 使用(如 btn、modal) |
| 和 Tailwind 关系 | 完全兼容,样式仍要自己写 | 深度绑定 Tailwind,专为它设计 | 作为 Tailwind 插件安装后直接用 |
| 使用方式 | 安装包 + 自己写样式 | 把组件代码复制进项目 | 装插件,写 class 就能用 |
| 可定制性 | 最高(交互与样式都自己控) | 很高(代码在仓库里,可直接改) | 中等(主要靠主题和配置) |
| 设计感 | 无默认设计 | 现代、干净,偏 shadcn 风格 | 主题多,组件库感更强 |
| 包体积 | 按需引入,通常较轻 | 只留下用到的组件,体积可控 | 插件会带上一整套样式能力 |
| 学习成本 | 较高 | 中等 | 最低(会 Tailwind 就能很快上手) |
| 可访问性 | 极强(官方重点) | 强(继承自 Radix) | 一般(严谨度通常不如前两者) |
| 更新维护 | 活跃 | 非常活跃 | 活跃 |
各自适合什么场景
Radix UI 适合你已经有设计系统,或者明确要自己控样式,同时对键盘操作、焦点、ARIA 要求很高。它几乎只给「行为正确」的底座,漂亮不漂亮全看你自己。
shadcn/ui 适合大多数新项目:想要现代默认观感,又不想被封死在 npm 组件黑盒里。组件代码在你仓库里,改结构和样式都很直接;底下还叠着 Radix,无障碍基础不弱。当前社区热度也最高。
daisyUI 适合要尽快出页面、少写自定义样式的场景。写法接近传统组件库:btn、card、modal 一类 class 拼上去就有样子,主题切换也方便。代价是定制深度和可访问性打磨通常不如前两家细。
一句话记住差别
- Radix:只给逻辑,样式全自己来。
- shadcn/ui:把漂亮的组件代码给你,复制进项目后随便改。
- daisyUI:直接给你写好的 Tailwind 组件 class,用起来最像传统组件库。
怎么选(短结论)
- 要最高自由度 + 最好的无障碍底座 → 选 Radix UI。
- 要现代观感、代码可完全掌控、多数新项目默认答案 → 选 shadcn/ui。
- 要最快出效果、少写样式、用 class 推进 → 选 daisyUI。
实操上还可以组合:用 Radix / shadcn 扛复杂交互和无障碍,用 daisyUI 或自写 utility 补营销页、后台里不那么关键的区块。先定「这周要出活」还是「半年后还要改得动」,再选层,比先追星更稳。
正文完




