Nuxt UI
Nuxt 官方 UI 组件库,128 个无障碍可定制的组件集合
Nuxt UI 是 Nuxt 团队开发的官方组件库,基于 Reka UI 和 Tailwind CSS v4 构建,提供 128 个无障碍组件,支持 AI Chat、编辑器组件和深度 Nuxt 集成。
Nuxt UI
Nuxt 官方 UI 组件库——基于 Reka UI 和 Tailwind CSS 构建的 Vue 组件集合,提供 128 个无障碍、可定制的 UI 组件(含 AI Chat 和编辑器组件)。
技术简介说明
Nuxt UI 是 Nuxt 团队(原 NuxtLabs,2025 年 7 月加入 Vercel)开发的官方 UI 组件库,专为 Nuxt 和 Vue 生态设计。它的核心理念是提供一套「开箱即用」且高度可定制的组件系统,让开发者能够快速构建美观、可访问的现代 Web 应用。
从技术架构上看,Nuxt UI 建立在三大基石之上:Reka UI(原 Radix Vue)提供无样式、完全无障碍的基础组件原语;Tailwind CSS v4 提供原子化的 CSS 样式系统和极致的构建性能;Tailwind Variants 提供优雅的类型安全变体管理。这种分层架构使得 Nuxt UI 既拥有强大的视觉表现力,又保持了极高的可定制性。
Nuxt UI 经历了三个重大版本的演进:v1/v2 基于 Headless UI 和 Tailwind CSS v3;v3(2025 年 3 月发布)完成了从底层到顶层的全面重构,引入 Tailwind CSS v4 和 Reka UI,实现 5 倍构建速度提升;v4(2025 年 9 月发布)将原 Nuxt UI Pro 的付费组件和模板全部合并为开源项目,组件数量从 50+ 扩展到 125+,成为 Nuxt 生态中最全面的 UI 解决方案。
基本信息
| 项目 | 详情 |
|---|---|
| 官网 | https://ui.nuxt.com |
| GitHub | https://github.com/nuxt/ui |
| 主要维护者 | Nuxt 团队(NuxtLabs → Vercel),核心人物:Sébastien Chopin (Atinux) |
| npm 包名 | @nuxt/ui |
| 兼容性 | Nuxt 3.x / 4.x、Vue 3.x |
| GitHub Stars | 6,700+ |
| 贡献者 | 300+ |
| 月下载量 | 170 万+ |
快速上手
安装
# 使用 pnpm(推荐)
pnpm add @nuxt/ui tailwindcss
# 使用 npm
npm install @nuxt/ui tailwindcss
# 使用 yarn
yarn add @nuxt/ui tailwindcss
# 使用 bun
bun add @nuxt/ui tailwindcss基础配置
1. 配置 nuxt.config.ts
export default defineNuxtConfig({
modules: ['@nuxt/ui'],
css: ['~/assets/css/main.css']
})
@nuxt/icon、@nuxt/fonts和@nuxtjs/color-mode会被自动注册,无需手动添加到modules数组。
2. 创建 CSS 文件 assets/css/main.css
@import "tailwindcss";
@import "@nuxt/ui";3. 在 app.vue 中包裹应用
<template>
<UApp>
<NuxtPage />
</UApp>
</template>
UApp组件是必需的,它为 Toast、Tooltip 和编程式弹层提供挂载容器。
最小示例
<template>
<UApp>
<div class="p-8">
<UButton color="primary" variant="solid" size="lg">
点击我
</UButton>
<UInput v-model="search" placeholder="搜索..." icon="i-lucide-search" />
<UBadge color="success" variant="subtle">
新特性
</UBadge>
</div>
</UApp>
</template>使用模板快速启动
# 基础启动模板
npm create nuxt@latest -- -t ui
# 落地页模板
npm create nuxt@latest -- -t ui/landing
# 文档站点模板
npm create nuxt@latest -- -t ui/docs
# SaaS 应用模板
npm create nuxt@latest -- -t ui/saas
# 仪表盘模板
npm create nuxt@latest -- -t ui/dashboard核心概念与架构
三层架构
┌─────────────────────────────────────────────┐
│ Nuxt UI 组件层(128) │
│ UButton, UInput, UModal, UTable, UChat... │
├─────────────────────────────────────────────┤
│ Tailwind Variants 变体层 │
│ 类型安全的 size / color / variant │
├─────────────────────────────────────────────┤
│ Reka UI 无头组件层 │
│ 无障碍原语、键盘导航、焦点管理、ARIA │
├─────────────────────────────────────────────┤
│ Tailwind CSS v4 样式层 │
│ 原子化 CSS、JIT 编译、CSS-first 配置 │
└─────────────────────────────────────────────┘
核心概念
- 组件前缀:默认使用
U前缀(如UButton),可通过配置自定义 - 主题系统:基于 CSS 变量的动态主题,支持颜色、间距、圆角等全局定制
- 变体系统:通过 Tailwind Variants 定义组件的尺寸、颜色、形态变体
- 插槽设计:大量使用 Vue 插槽提供灵活的自定义能力
ui属性:每个组件都接受ui属性,允许在组件级别覆盖内部样式
依赖关系
| 依赖 | 作用 |
|---|---|
reka-ui | 无障碍组件原语(前身为 Radix Vue) |
tailwindcss | 原子化 CSS 框架 |
tailwind-variants | 组件变体管理 |
@nuxt/icon | 200,000+ 图标支持(自动注册) |
@nuxt/fonts | 高性能字体加载(自动注册) |
@nuxtjs/color-mode | 深色/浅色模式切换(自动注册) |
@nuxtjs/mdc | Markdown 内容渲染(可选) |
@tanstack/vue-table | Table 组件底层引擎 |
组件分类(128 个组件,13 个分类)
| 分类 | 数量 | 主要组件 |
|---|---|---|
| Layout(布局) | 8 | App, Container, Sidebar, Header, Footer, Main, Theme |
| Element(元素) | 16 | Button, Card, Alert, Avatar, Badge, Calendar, Chip, Progress, Skeleton |
| Form(表单) | 21 | Input, Select, Checkbox, Radio, Switch, Slider, FileUpload, Form, FormField, InputDate, InputTime, InputNumber, InputRating, InputTags |
| Data(数据展示) | 9 | Table, Accordion, Carousel, Timeline, Tree, Empty, Marquee, ScrollArea, User |
| Navigation(导航) | 8 | NavigationMenu, Breadcrumb, Pagination, Tabs, Stepper, CommandPalette, Link, FooterColumns |
| Overlay(覆盖层) | 8 | Modal, Drawer, DropdownMenu, Popover, Tooltip, Toast, Slideover, ContextMenu |
| Page(页面) | 23 | AuthForm, BlogPost, BlogPosts, PricingTable, PricingPlan, PageHero, PageSection, ChangelogVersion |
| Dashboard(仪表盘) | 10 | DashboardGroup, DashboardNavbar, DashboardPanel, DashboardSidebar, DashboardSearch |
| AI Chat(AI 对话) | 8 | ChatMessage, ChatMessages, ChatPalette, ChatPrompt, ChatReasoning, ChatShimmer, ChatTool |
| Editor(编辑器) | 6 | Editor, EditorToolbar, EditorEmojiMenu, EditorMentionMenu, EditorSuggestionMenu, EditorDragHandle |
| Content(内容) | 5 | ContentNavigation, ContentSearch, ContentSearchButton, ContentSurround, ContentToc |
| Color Mode(颜色模式) | 5 | ColorModeButton, ColorModeSwitch, ColorModeSelect, ColorModeImage, ColorModeAvatar |
| i18n(国际化) | 1 | LocaleSelect |
核心特性
- 128 个组件:涵盖按钮、输入框、模态框、表格、下拉菜单、日期选择器、导航栏、面包屑、分页、标签页等全品类 UI 组件
- 完全无障碍:基于 Reka UI 的 WAI-ARIA 规范实现,内置键盘导航、焦点管理和屏幕阅读器支持
- Tailwind CSS v4 集成:5 倍构建速度提升,100 倍增量编译速度提升,CSS-first 配置范式
- 深色模式:通过
@nuxtjs/color-mode自动集成,支持系统偏好检测、手动切换和持久化 - 国际化支持:内置 50+ 语言的 i18n 集成,与
@nuxtjs/i18n深度协作,自动本地化链接 - 图标系统:支持 200,000+ 图标,通过
@nuxt/icon实现按需加载,支持 Iconify 生态 - 主题定制:基于 CSS 变量的动态主题系统,支持运行时切换,内置中性色方案;v4.9+ 新增
theme.unstyled选项可移除所有默认主题类 - 内容组件:Prose 排版组件和 Content 组件(目录、搜索、横幅等),与
@nuxt/content深度集成 - 编程式 API:Toast、模态框、弹窗等支持编程式调用(
useToast()、useModal()) - AI Chat 组件:8 个原生 AI 对话组件(ChatMessage、ChatPrompt、ChatReasoning 等),深度集成 Vercel AI SDK,专为 AI 应用设计
- 富文本编辑器:6 个 Editor 组件(Editor、EditorToolbar、EditorMentionMenu 等),支持 @提及、表情、拖拽等
- Table 组件:基于 TanStack Table,提供完全类型安全的表格 API,支持排序、筛选、分页
- CommandPalette:类 CMD+K 搜索面板,支持全局快捷搜索
- Vue 兼容:不仅支持 Nuxt,也可作为纯 Vue 组件库在 Vite 项目中使用
- Figma 设计套件:提供官方 Figma 设计资源,包含数千个变体和 design tokens,确保设计与开发的一致性
- 12 个官方模板:包括落地页、仪表盘、文档站、SaaS 应用、作品集、聊天、编辑器、电商、AI 应用等生产级模板
- MCP 服务器支持:官方提供 MCP 端点,AI 编辑器(如 Claude Code)可直接读取组件 API 元数据
生态图
官方生态
@nuxt/ui(核心组件库)
├── @nuxt/ui-pro(已合并到 v4,原付费组件)
├── @nuxt/icon(图标系统)
├── @nuxt/fonts(字体优化)
├── @nuxtjs/color-mode(颜色模式)
├── @nuxtjs/mdc(Markdown 渲染)
├── @nuxtjs/i18n(国际化)
├── @nuxt/content(内容管理)
├── @nuxt/charts(图表组件)
├── Nuxt DevTools(开发工具)
└── Nuxt CLI 模板系统
关键社区扩展
- Nuxt Charts:基于 Nuxt UI 的图表组件库
- Nuxt Charts Templates(nuxtcharts.com):Nuxt UI 构建块集合
- Nuxt UI Skills(Smithery):AI 辅助 Nuxt UI 开发技能
- IDE 支持:VS Code Tailwind CSS IntelliSense 扩展完美支持
Nuxt 模块生态
Nuxt UI 是 Nuxt 模块生态中最受欢迎的模块之一,与以下模块协同工作:
@nuxtjs/tailwindcss(v4 起不再需要,直接使用 Tailwind CSS v4)@nuxt/eslint(代码规范)@nuxt/test-utils(测试工具)@nuxt/image(图片优化)
适用场景
- 企业级后台管理系统:125+ 组件 + 仪表盘模板 + 表格/表单组件,覆盖所有管理场景
- SaaS 应用:官方 SaaS 模板 + 认证页面 + 定价页面组件,快速启动产品
- 文档站点:内容组件 + 搜索 + 目录 + 变更日志组件,构建专业文档
- 营销落地页:落地页模板 + 响应式设计 + 动画支持,高转化页面
- 个人作品集:作品集模板 + 博客组件 + SEO 优化,展示个人品牌
- 内容驱动型网站:与
@nuxt/content深度集成,Markdown/MDX 渲染 - 全栈 Vue 应用:SSR/SSG 友好,与 Nuxt 的数据获取和路由系统无缝集成
开发与工程化
开发流程
# 开发模式
pnpm dev
# 类型检查
pnpm typecheck
# 代码检查
pnpm lint
# 构建
pnpm build
# 预览构建结果
pnpm preview
# 分析 bundle 体积
npx nuxi analyze
# 静态生成(SSG)
pnpm generate常用开发命令
| 命令 | 用途 |
|---|---|
npx nuxi@latest init my-app -t ui | 使用 UI 模板创建新项目 |
pnpm dev | 启动开发服务器 |
pnpm build | 生产构建 |
pnpm generate | 静态生成(SSG) |
npx nuxi analyze | Bundle 体积分析 |
pnpm typecheck | TypeScript 类型检查 |
pnpm lint | 代码规范检查 |
自定义主题配置
// nuxt.config.ts
export default defineNuxtConfig({
modules: ['@nuxt/ui'],
css: ['~/assets/css/main.css'],
ui: {
// 自定义组件前缀
prefix: 'U',
// 启用/禁用字体优化
fonts: true,
// 启用/禁用颜色模式
colorMode: true,
// 主题配置
theme: {
// 动态颜色别名
colors: ['primary', 'secondary', 'success', 'info', 'warning', 'error'],
// 启用/禁用组件过渡动画
transitions: true,
// 移除所有默认主题类(v4.9+)
unstyled: false,
// 覆盖默认变体
defaultVariants: {
color: 'primary',
size: 'md'
}
}
}
})组件级样式覆盖
<!-- 通过 ui 属性覆盖单个组件样式 -->
<UButton
:ui="{ base: 'font-bold', size: { md: 'text-lg' } }"
color="primary"
size="md"
>
自定义按钮
</UButton>CSS 级主题定制
/* assets/css/main.css */
@import "tailwindcss";
@import "@nuxt/ui";
/* 自定义主题变量 */
@theme {
--color-primary-50: #eff6ff;
--color-primary-100: #dbeafe;
--color-primary-500: #3b82f6;
--color-primary-600: #2563eb;
--color-primary-900: #1e3a8a;
}CI/CD 集成
# GitHub Actions 示例
name: CI
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v2
- uses: actions/setup-node@v4
with:
node-version: 22
cache: 'pnpm'
- run: pnpm install --frozen-lockfile
- run: pnpm typecheck
- run: pnpm lint
- run: pnpm build性能与安全
性能特点
| 指标 | 数值 |
|---|---|
| 构建速度(vs v2) | 5 倍提升 |
| 增量编译速度 | 100 倍提升 |
| 组件 Tree-shaking | 支持(v4.1+ 实验性组件检测) |
| CSS 产物体积 | 仅包含使用到的组件样式 |
| 图标加载 | 按需加载,不打包未使用图标 |
| 字体加载 | 通过 @nuxt/fonts 自动优化 |
优化建议
- 启用实验性组件检测(v4.1+):
experimental.componentDetection: true,自动 Tree-shake 未使用组件的 CSS - 按需导入图标:避免全量加载图标库,使用具体的图标类名
- 使用 Tailwind CSS 前缀:避免与第三方库的样式冲突,
theme.prefix配置 - 合理使用插槽:避免不必要的组件嵌套,减少渲染层级
安全注意事项
- 组件默认对 HTML 内容进行转义,防止 XSS 攻击
- 使用
v-html时需确保内容来源可信 - 依赖的 Reka UI 组件经过严格的无障碍和安全审计
@nuxt/icon从 CDN 加载图标时注意 CSP 策略配置
技术对比
| 特性 | Nuxt UI v4 | Element Plus | Vuetify 3 | PrimeVue | Ant Design Vue |
|---|---|---|---|---|---|
| 框架支持 | Vue 3 + Nuxt 3/4 | Vue 3 | Vue 3 | Vue 3 | Vue 3 |
| CSS 方案 | Tailwind CSS v4 | 自有 CSS | Sass 工具类 | 自有 CSS | CSS-in-JS |
| 底层库 | Reka UI | 自有实现 | 自有实现 | 自有实现 | 自有实现 |
| 组件数量 | 125+ | 70+ | 80+ | 90+ | 60+ |
| 无障碍 | WCAG 合规 | 部分支持 | 良好 | 良好 | 良好 |
| 主题定制 | CSS 变量 + Tailwind | CSS 变量 | Sass 变量 + 运行时 | 主题 API | CSS 变量 |
| 深色模式 | 内置 | 内置 | 内置 | 内置 | 内置 |
| TypeScript | 完整类型 | 完整类型 | 完整类型 | 完整类型 | 完整类型 |
| SSR 支持 | 原生优化 | 需额外配置 | 需额外配置 | 需额外配置 | 需额外配置 |
| 包体积 | 轻量(Tree-shake) | 中等 | 较大 | 中等 | 中等 |
| 开源协议 | MIT | MIT | MIT | MIT | MIT |
| 模板/页面 | 12 个官方模板 | 无 | 无 | 少量 | 无 |
| Nuxt 集成 | 原生深度集成 | 需手动适配 | 需 Nuxt 模块 | 需手动适配 | 需手动适配 |
Nuxt UI vs Vuetify 3
Nuxt UI 优势:原生 Nuxt 集成、Tailwind CSS 生态、更轻量、官方模板、更好的 SSR 支持 Vuetify 3 优势:Material Design 规范、更成熟的生态、更多社区资源、更完善的企业级组件
Nuxt UI vs Element Plus
Nuxt UI 优势:现代化架构、Tailwind CSS 驱动、更好的 Nuxt 集成、设计更现代 Element Plus 优势:中文文档完善、国内社区活跃、后台管理组件丰富、成熟稳定
最佳实践
生产环境建议
- 统一组件前缀:保持默认的
U前缀或使用自定义前缀,避免与第三方组件冲突 - 善用
ui属性:优先使用ui属性进行组件级样式定制,避免!important覆盖 - 主题集中管理:将主题变量定义在统一的 CSS 文件中,使用 CSS
@theme指令 - 组件按需导入:利用 Tree-shaking 特性,避免全量导入未使用组件
- i18n 提前规划:如果有多语言需求,尽早集成
@nuxtjs/i18n,利用自动链接本地化
常见陷阱
- 忘记
UApp包裹:Toast、Tooltip 等弹层组件需要UApp组件提供挂载容器 - Tailwind 版本冲突:Nuxt UI v4 要求 Tailwind CSS v4,不要混用 v3
- 过度自定义:避免通过深度选择器
::v-deep覆盖组件样式,优先使用ui属性 - 图标全量加载:不要导入整个图标库,只使用需要的具体图标
推荐模式
<!-- ✅ 推荐:使用 useToast 编程式调用 -->
<script setup lang="ts">
const toast = useToast()
function handleSuccess() {
toast.add({ title: '操作成功', color: 'success' })
}
</script>
<!-- ✅ 推荐:使用组合式 API 管理模态框 -->
<script setup lang="ts">
const isOpen = ref(false)
</script>
<template>
<UModal v-model:open="isOpen">
<template #content>
<div class="p-4">
<h2 class="text-lg font-bold">确认操作</h2>
<UButton @click="isOpen = false">关闭</UButton>
</div>
</template>
</UModal>
</template>技术局限与边界
已知限制
- Nuxt 优先:虽然支持纯 Vue 项目,但最佳体验需要 Nuxt 框架
- Tailwind CSS 强依赖:完全依赖 Tailwind CSS v4,无法使用其他 CSS 方案
- 设计规范固定:视觉风格与 Tailwind CSS 默认设计语言绑定,不适合 Material Design 或 Ant Design 风格项目
- 中文社区相对较小:相比 Element Plus 等国内组件库,中文文档和社区讨论较少
- 大型表单支持有限:内置表单组件较基础,复杂表单场景需要配合 FormKit 等专用库
- 学习曲线:需要同时掌握 Nuxt、Tailwind CSS、Reka UI 概念
- 类型导入 Tree-shaking 问题:已知 issue #3039,类型导入可能影响 tree-shaking 效果
autocomplete属性冲突:v4.6.0 引入的 booleanautocomplete与 HTML 标准属性冲突,后续版本修复中- Nuxt 3 EOL:Nuxt 3 计划于 2026.01.31 停止维护,需关注 Nuxt 4 迁移
不适用场景
- 已有成熟 CSS 方案(如 Bootstrap、BEM 规范)的存量项目
- 需要 Material Design 规范的项目(更适合 Vuetify)
- 纯前端 SPA 不使用 Nuxt 的项目(虽可用但体验打折)
- 需要复杂数据表格的企业级后台(可能需要 AG Grid 等专业方案)
迁移注意事项
- 从 v2 迁移到 v3:重大架构变更(Headless UI → Reka UI),参考 v3 迁移指南
- 从 v3 迁移到 v4:相对平滑,少量 breaking changes(如
ButtonGroup重命名),参考 v4 迁移指南 - 从 Nuxt UI Pro 迁移:v4 已合并所有 Pro 功能,API 基本兼容,可能有组件名称微调
- 从其他库迁移:建议逐步替换,不要一次性全部重写
学习资源
官方资源
- Nuxt UI 官方文档 — 完整的组件文档和使用指南
- Nuxt UI 组件演示 — 所有 128 个组件的交互示例
- Nuxt UI v4 发布公告 — v4 特性和变更详解
- Nuxt UI v3 发布公告 — v3 架构重构说明
- v4 迁移指南 — v3 到 v4 的迁移参考
- v3 迁移指南 — v2 到 v3 的迁移参考
- 官方模板库 — 12 个生产级模板
- GitHub 仓库 — 源码和 Issues
- GitHub Releases — 发布日志
- 发布日志 — 官方发布日志页面
教程与课程
- Mastering Nuxt — Nuxt 深度教程(含 UI 集成)
- Vue School - Nuxt 教程 — 视频课程
- Nuxt UI 迁移指南(v3) — 版本迁移参考
社区资源
- Nuxt Discord — 官方 Discord 社区
- Nuxt GitHub Discussions — GitHub 讨论区
- Reddit r/Nuxt — Reddit 社区
- Nuxt 中文文档 — 中文翻译文档
2026 年现状
版本状态
| 版本线 | 状态 | 说明 |
|---|---|---|
| v4.x(当前) | ✅ 活跃开发 | v4.9.0(2026.06),新增 theme.unstyled 选项,合并了 Pro 组件 |
| v3.x | 🔧 维护模式 | 文档保留在 ui3.nuxt.com |
| v2.x / v1.x | ⛔ 已停止 | 不再接收更新 |
社区活跃度
- GitHub Stars:6,700+
- 贡献者:300+ 人
- NPM 月下载量:170 万+
- 模块生态:Nuxt 模块中心的核心模块
- pkg.pr.new:支持 PR 预览包,可持续测试 PR 和 commit
关键里程碑(2025-2026)
| 时间 | 版本 | 事件 |
|---|---|---|
| 2025 年 3 月 | v3.0 | Nuxt UI v3 发布,全面重构(Reka UI + Tailwind CSS v4) |
| 2025 年 7 月 | v3.3 | NuxtLabs 加入 Vercel |
| 2025 年 9 月 | v4.0 | Nuxt UI v4 发布,Pro 组件免费开源,128 个组件 |
| 2025 年 11 月 | v4.2.0 | 新增 InputDate、InputTime 组件 |
| 2026 年 1 月 | v4.4 | Calendar 组件增强、新增 props |
| 2026 年 3 月 | v4.5.1 | 修复 ContentSearch 等问题 |
| 2026 年 5 月 | v4.8.2 | 持续改进和 bug 修复 |
| 2026 年 6 月 | v4.9.0 | 新增 theme.unstyled 选项,可移除所有默认主题类 |
发展趋势
- Nuxt 4 对齐:随 Nuxt 4 框架发展持续适配和优化(Nuxt 3 计划于 2026.01.31 EOL)
- AI 原生组件:AI Chat 组件持续增强,与 Vercel AI SDK 深度集成
- MCP 生态:官方 MCP 服务器支持 AI 编辑器直接访问组件元数据,AI 辅助开发体验提升
- Vercel 生态整合:NuxtLabs 加入 Vercel 后,获得更多云平台集成能力
- 设计系统演进:Figma 设计套件持续更新,包含数千个变体和 design tokens
theme.unstyled模式:v4.9+ 允许完全移除默认样式,从零构建自定义设计系统