讨论前端组件时,最容易混在一起的四个名字是:Tailwind CSS、Radix UI、shadcn/ui、daisyUI。它们经常出现在同一段推荐里,但并不在同一层。
有的管「长什么样」,有的管「怎么工作」,有的是把源码交到你项目里的组件体系,有的是 Tailwind 上的现成 class 组件系统。层级没拆清,选型就会变成跟风:要么自己写样式写到歪,要么装了一堆库还是对不上问题。
上一篇只比了 Radix / shadcn / daisyUI;这篇把 Tailwind 也加进来,先画层级,再谈 Admin 项目怎么选。
一张图先看懂
React
│
┌───────────┴───────────┐
│ │
Tailwind CSS Radix UI
│ │
管「长什么样」 管「怎么工作」
│ │
└───────────┬───────────┘
│
shadcn/ui
│
组件代码 + Tailwind
+ Radix,组成可改的组件体系
另外一条路线:
Tailwind CSS
│
daisyUI
│
预先定义好的组件样式与主题
记两句话就够:
- shadcn 这条线,常常是 Tailwind(外观)+ Radix(交互)合到你项目里的组件源码。
- daisyUI 这条线,主要是 Tailwind 之上的现成组件 class 与主题,不一定走 Radix。
1. Tailwind CSS:CSS 工具箱
Tailwind = 写样式的工具箱,不是完整 UI 组件库。
<div className="flex items-center gap-4 rounded-lg p-6">
flex→ 布局items-center→ 对齐gap-4→ 间距rounded-lg→ 圆角p-6→ 内边距
它解决的是:
这个东西怎么摆、多大、什么颜色。
它不会天然规定:
Button 多高?Card 怎么分区块?Modal / Sidebar 长什么样?
这些规则要靠你自己的 Design Token、组件约定,或者叠一层 shadcn / daisyUI。
2. Radix UI:无样式的交互底座
Radix UI = React 无样式 / 低样式 primitives,重点是复杂交互是否正确。
以 Dialog 为例,它更关心:
打开 / 关闭
ESC 关闭
焦点管理
键盘导航
ARIA
读屏
Portal
不太关心最后像素级长什么样。
所以可以粗暴记:
Tailwind → appearance(外观)
Radix → behavior(行为)
弹窗要「能用且可访问」找 Radix;要「好看」再用 Tailwind 或组件层去皮。
3. shadcn/ui:可复制进项目的组件体系
最常见的误解是:
「我用了 shadcn」= 「我装了一个传统 npm UI 包」。
更准确的说法是:
一套设计过的 React 组件源码 + 使用 Radix + Tailwind 的做法。
装一个 Button 后,代码通常直接进入你的仓库。你用的是:
<Button variant="destructive">Delete</Button>
简单组件偏 Tailwind 管视觉;Dialog / Select 一类复杂件,往往是 Radix 管行为 + Tailwind 管外观,再被整理成 shadcn 组件。
核心不是「黑盒 import」,而是:
代码归你,规范可以继续长在你仓库里。
4. daisyUI:Tailwind 上的组件与主题
daisyUI = 建在 Tailwind 上的组件 / 主题系统。
<button class="btn btn-primary">Save</button>
常见能力包括 btn、card、modal、tabs、alert、badge、dropdown、navbar、drawer 等,并带 light / dark / cupcake / corporate 一类主题。
你不必每次手写长串 utility:
px-4 py-2 rounded-lg text-sm font-medium ...
它更像:
Tailwind + 已经做好的 CSS 组件规范。
最核心的差别(总表)
| Tailwind | Radix UI | shadcn/ui | daisyUI | |
|---|---|---|---|---|
| 类型 | CSS 工具 | React primitives | 组件源码体系 | Tailwind 插件 / 组件系统 |
| 管外观 | ✅ | ❌ / 很少 | ✅ | ✅ |
| 管交互 | ❌ | ✅ | ✅(复杂件常基于 Radix) | ✅(组件行为与样式一体) |
| Button | 自己写 | ❌ | ✅ | ✅ |
| Dialog / Select | 自己写 | ✅ | ✅ | ✅ |
| Theme | 自己定 | ❌ | ✅ / 可配置 | 强项 |
| 组件源码在你项目里 | — | 依赖库 | 是 | 主要靠插件生成 CSS |
| 风格印象 | 无固定皮肤 | 无默认皮肤 | 现代、克制 | 更「组件库」、主题感强 |
5. shadcn 和 daisyUI:你真正该关心的分叉
shadcn/ui
思路:
给你一套设计与组件代码,放进项目后你继续掌控。
适合产品型后台、SaaS、管理系统——尤其当你已经感到:
「想要一套规范,不想页面写着写着越来越歪。」
因为它方便长成:
tokens → components → patterns → pages
daisyUI
思路:
组件样式已经定好,你直接用 class。
适合想尽快搭后台、少自己定 padding / radius / hover 的人。代价是界面有时会带比较明显的 daisyUI 味道;要做很特定的 SaaS 视觉时,定制深度通常不如 shadcn 源码在手灵活。
一句话:
- daisyUI ≈ 现成 UI 规范 + 快速搭建
- shadcn ≈ 可掌控的设计系统底座
6. 放到 React Admin 里的三条路
路线 A:纯 Tailwind
React + Tailwind
Button、Card、Form、Table、spacing、tokens 全自己定。自由度最高,也最容易出现「同项目不同页各写各的」。
路线 B:Tailwind + daisyUI
React + Tailwind + daisyUI
按钮、卡片、弹层、导航来得快,主题也有。适合冲速度;精细品牌感要额外克制 daisy 默认味道。
路线 C:Tailwind + Radix + shadcn
React
├── Tailwind → 外观
├── Radix → 交互
└── shadcn → 组件体系
现在很多现代 React 产品后台走这条:Admin、Dashboard、SaaS、CRM、内部工具都常见。
7. 「规范容易跑偏」到底谁能管
| 东西 | 能不能自动管住规范跑偏 |
|---|---|
| Radix | 不能。它管 Dialog / 键盘 / 焦点是否正确。 |
| Tailwind | 不能自动管。p-4 和 p-6 它都给你,拦不住乱用。 |
| daisyUI | 能管一部分。btn / card / input 自带统一规则。 |
| shadcn/ui | 更适合在上面继续钉死 Page / Header / Card / Form / Button / Table 的间距与高度。 |
例如你可以约定:
Page px-6
Page Header mb-6
Card p-6
Form gap-4
Button/Input h-9
Table row 48px
Section gap-6
然后整站按这套走——这才是「规范」本身,库只是载体。
一句话收束
Tailwind = 怎么写 CSS
Radix = 复杂组件怎么正确工作
shadcn = 现代 React 组件源码 / 设计体系
daisyUI = 基于 Tailwind 的现成组件 + 主题
如果你真正想要的是:
React + Tailwind + 一套已经定好的 Design System + Admin 页面模式
当前更稳的默认往往是 Tailwind + Radix + shadcn/ui,再配一个把 Sidebar / Page / Table / Form / Settings 间距已经收好的开源 Admin 模板。
若目标是「尽快搭起来,少自己设计组件皮」,daisyUI 更合适。先定层级,再定路线,比四个名字搅在一起选「最火那个」靠谱得多。




