现状趋势
- 已经分成两条技术路线,这两类解决的问题不同。
- 成品型组件库:Ant Design / MUI / Element Plus
Headless - 自有源码型组件体系:Base UI / Radix + shadcn/ui
术语回顾
重点组件回顾
Combobox
- 样子:输入框 + 下拉列表。
- 用途:先输入搜索,再从结果里选。
浮层组件
Dialog- 屏幕中间弹窗。
- 用于确认、编辑、重要操作。
Drawer- 从屏幕边缘滑出的抽屉。
- 用于设置、筛选、详情。
Popover- 贴着某个按钮或元素出现的小面板。
- 用于临时设置、选择。
Tooltip- 鼠标悬停 / 聚焦时出现的小提示。
- 主要负责解释。
Toast- 页面角落短暂出现的通知。
- 例如“保存成功”“复制成功”。
Dialog = 中间弹 Drawer = 边上弹 Popover = 元素旁边弹 Tooltip = 小提示 Toast = 短通知导航组件
Tabs- 同一个区域切换不同内容。
Menu- 一组页面入口或操作命令。
Breadcrumb显示当前位置路径。
例如:
首页 > 商品 > 手机
Pagination分页、翻页。
例如:
< 1 2 3 4 5 >
Tabs = 切当前区域 Menu = 去功能 / 执行操作 Breadcrumb = 看自己在哪 Pagination = 翻数据页复杂组件
DataGrid加强版 Table。
常包含排序、筛选、编辑、固定列、虚拟滚动等。
记:
DataGrid = 网页版小型 Excel
Cascader多层级选择。
例如:
地球 → 中国 → 上海 → 虹桥
移动端组件
BottomSheet- 从底部拉起来的大内容面板,通常还能拖动。
ActionSheet- 从底部弹出的一组操作按钮。
SwipeAction- 左右滑动列表项露出删除等操作。
PullToRefresh- 下拉页面触发刷新。
BottomSheet = 底部内容面板 ActionSheet = 底部操作菜单 SwipeAction = 左滑露操作 PullToRefresh = 下拉刷新
- 总结
Combobox = 搜 + 选 Dialog = 中间弹 Drawer = 边上弹 Popover = 元素旁边弹 Tooltip = 提示 Toast = 通知 Tabs = 切内容 Menu = 功能入口 Breadcrumb = 当前位置 Pagination = 翻页 DataGrid = 网页 Excel Cascader = 多级选择 BottomSheet = 底部大面板 ActionSheet = 底部操作菜单 SwipeAction = 左滑操作 PullToRefresh = 下拉刷新React
| 排名 | 方案 | 2026 推荐度 | 最适合 |
|---|---|---|---|
| 1 | shadcn/ui + Base UI + Tailwind CSS | S | AI 产品、SaaS、官网、复杂业务产品、自建设计系统 |
| 2 | Ant Design 6 | S- | 中后台、管理系统、国内企业业务 |
| 3 | MUI + MUI X | A+ | 国际化企业产品、复杂数据型应用 |
| 4 | Radix UI + Tailwind | A | 已经基于 Radix 的项目、底层设计系统 |
| — | 自己从零造组件库 | 不推荐 | 除非你就在做 Design System 基础设施 |
为什么是1️⃣shadcn/ui + Base UI
- 不是因为它“组件最好看”,而是它的架构非常符合现在前端的发展方向——shadcn/ui 本质上不是传统意义上的 npm 黑盒组件库,而是一套“把组件源码交给你的组件分发体系”。便于自行修改调整
- shadcn 现在还有 Registry,可以把公司自己的全部作为私有 UI Registry 分发。2026 年甚至支持直接把 GitHub 仓库作为 Registry。
- shadcn/ui应关注Base UI(新项目默认)而不是Radix UI,Base UI 无样式不捆绑不限定样式、可组合、强调 accessibility 和性能的 React primitives,适合作为设计系统底座。但老项目没必要为了追新迁移
- Radix UI 和 Base UI 区别
- Radix UI 和 Base UI 不是上下级,而是同赛道的两个竞争实现;它们很像,因为它们解决的是同一批 Web UI 底层问题,而且遵循相同的 Web/ARIA 标准。
- Radix UI
更早出现。
生产环境历史更长。
社区和已有项目更多。
可以理解为成熟的第一代代表方案。 - Base UI
后出现。
吸收了 Radix、Material UI、Floating UI 等长期实践经验。
在部分 API、组件覆盖和移动交互能力上重新设计。
2026 年 shadcn/ui 新项目默认优先 Base UI。
为什么是2️⃣Ant Design 6
- 如果需求变成:“我要最快做一个功能很多的企业后台。”那首选antd,因为AntD 是业务生产力组件库,而 shadcn 更像产品 UI / Design System 基础设施,AntD 明显更省时间。
- 但是设计语言和组件抽象太强势,项目很容易因为个性化调整导致用大量组件库API+design token+CSS覆盖…技术债
为什么是3️⃣MUI
- Material UI 本身有 40+ 基础组件,MUI 官方仍在持续投入 Material UI,同时开发下一代主要版本;MUI X 则覆盖复杂 Data Grid 等这类复杂企业组件场景。
- 国外常用
- 缺点是默认审美是Material Design,如果产品本身是Google / Material 风格没问题,如果设计稿自定义风格则最好别用
Vue
| 排名 | 方案 | 推荐度 | 用途 |
|---|---|---|---|
| 1 | Element Plus | S- | Vue 企业后台 |
| 2 | Naive UI | A+ | 更现代、更轻量的 Vue 应用 |
| 3 | Arco Design Vue | A | 中后台、字节风格 Design System |
| 4 | Headless / 自建设计系统 | A | 高度定制产品 |
| 5 | Vuetify | B+ | Material Design 项目 |
- 不知道选什么直接上Element Plus,因为生态成熟、组件全、中文资料多、问题解答多、后台场景覆盖完整、迁移成本可预测。官方仍然明确以 Vue 3 UI Framework 定位,并且支持完整引入与按需自动导入。
移动端单独看
- shadcn 并非“不适合移动端”,而是“不负责替你解决移动端专用交互体系”。可用 shadcn 做一个真正的响应式产品
| 场景 | React | Vue | 我的默认选择 |
|---|---|---|---|
| H5 / 移动 Web | Ant Design Mobile / 自建 Tailwind UI | Vant | React 偏自建;Vue 直接 Vant |
| 移动端后台/业务系统 | Ant Design Mobile | Vant | 成品库优先 |
| 高定制 AI / SaaS 移动 Web | Tailwind + Base UI/shadcn 思路,自写移动组件 | Headless + Tailwind | 自建设计系统 |
| iOS/Android 跨端 App | React Native 生态 | — | React Native |
| Web 技术直接打包 App | Ionic React | Ionic Vue | Ionic + Capacitor |
| 小程序 | Taro / uni-app | uni-app | 看团队栈 |
选型
- 样式与外观
- API设计:props清晰、易组合扩展覆盖、默认值
- 工程化成熟度
- 维护活跃度
- 社区规模
- 新版本兼容、升级成本、生态绑定程度
根据任务类型
- 我要尽快交付后台:直接antd/element plus效率高
- 做自己风格的产品UI:shadcn/ui+tailwindcss+design token
- 公司设计系统:Design Tokens->Base UI->公司 primitives->公司 UI Components->商业组件->shadcn Registry内部发布
组件覆盖范围
看是否有需要的组件
- 重点
- 基础组件
Button / Input / Checkbox / Radio / Switch - 表单组件
Select / Combobox / DatePicker / Form - 浮层组件
Dialog / Drawer / Popover / Tooltip / Toast - 导航组件
Tabs / Menu / Breadcrumb / Pagination - 复杂组件
Table / DataGrid / Tree / Cascader / Upload - 移动端组件
BottomSheet / ActionSheet / SwipeAction / PullToRefresh
交互能力
- 交互动作:点击、 键盘、 焦点、弹层、滚动、手势、状态切换
- 重点
受控 / 非受控状态
键盘导航
焦点管理
点击外部关闭
ESC 关闭
Portal 跨层渲染
滚动锁定
拖拽 / 滑动
动画状态
无障碍
- 无障碍(Accessibility / a11y)是成熟组件库的重要分界线。
- 考虑:语义 HTML、ARIA、键盘操作、焦点顺序、屏幕阅读器
ARIA(Accessible Rich Internet Applications,可访问富互联网应用)是一套由 W3C 制定的 HTML 属性规范,用于给浏览器和辅助技术(如屏幕阅读器)补充说明页面元素的语义和状态。
响应式和多端适配
- 响应式布局
Safe Area(刘海 / Home 条安全区)
软键盘
Touch
Hover
Pointer
横竖屏
小屏交互
性能
- 考虑:首屏体积、Tree Shaking、按需加载、渲染次数、大数据性能
- 重点:
虚拟列表(Virtualization)
大数据量渲染
memo
状态粒度
按需加载
bundle size