Nuxt UI logo

Nuxt UI

Nuxt 官方 UI 组件库,128 个无障碍可定制的组件集合

精选工具VueNuxtTailwind CSS无障碍

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
GitHubhttps://github.com/nuxt/ui
主要维护者Nuxt 团队(NuxtLabs → Vercel),核心人物:Sébastien Chopin (Atinux)
npm 包名@nuxt/ui
兼容性Nuxt 3.x / 4.x、Vue 3.x
GitHub Stars6,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/icon200,000+ 图标支持(自动注册)
@nuxt/fonts高性能字体加载(自动注册)
@nuxtjs/color-mode深色/浅色模式切换(自动注册)
@nuxtjs/mdcMarkdown 内容渲染(可选)
@tanstack/vue-tableTable 组件底层引擎

组件分类(128 个组件,13 个分类)

分类数量主要组件
Layout(布局)8App, Container, Sidebar, Header, Footer, Main, Theme
Element(元素)16Button, Card, Alert, Avatar, Badge, Calendar, Chip, Progress, Skeleton
Form(表单)21Input, Select, Checkbox, Radio, Switch, Slider, FileUpload, Form, FormField, InputDate, InputTime, InputNumber, InputRating, InputTags
Data(数据展示)9Table, Accordion, Carousel, Timeline, Tree, Empty, Marquee, ScrollArea, User
Navigation(导航)8NavigationMenu, Breadcrumb, Pagination, Tabs, Stepper, CommandPalette, Link, FooterColumns
Overlay(覆盖层)8Modal, Drawer, DropdownMenu, Popover, Tooltip, Toast, Slideover, ContextMenu
Page(页面)23AuthForm, BlogPost, BlogPosts, PricingTable, PricingPlan, PageHero, PageSection, ChangelogVersion
Dashboard(仪表盘)10DashboardGroup, DashboardNavbar, DashboardPanel, DashboardSidebar, DashboardSearch
AI Chat(AI 对话)8ChatMessage, ChatMessages, ChatPalette, ChatPrompt, ChatReasoning, ChatShimmer, ChatTool
Editor(编辑器)6Editor, EditorToolbar, EditorEmojiMenu, EditorMentionMenu, EditorSuggestionMenu, EditorDragHandle
Content(内容)5ContentNavigation, ContentSearch, ContentSearchButton, ContentSurround, ContentToc
Color Mode(颜色模式)5ColorModeButton, ColorModeSwitch, ColorModeSelect, ColorModeImage, ColorModeAvatar
i18n(国际化)1LocaleSelect

核心特性

  • 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 analyzeBundle 体积分析
pnpm typecheckTypeScript 类型检查
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 v4Element PlusVuetify 3PrimeVueAnt Design Vue
框架支持Vue 3 + Nuxt 3/4Vue 3Vue 3Vue 3Vue 3
CSS 方案Tailwind CSS v4自有 CSSSass 工具类自有 CSSCSS-in-JS
底层库Reka UI自有实现自有实现自有实现自有实现
组件数量125+70+80+90+60+
无障碍WCAG 合规部分支持良好良好良好
主题定制CSS 变量 + TailwindCSS 变量Sass 变量 + 运行时主题 APICSS 变量
深色模式内置内置内置内置内置
TypeScript完整类型完整类型完整类型完整类型完整类型
SSR 支持原生优化需额外配置需额外配置需额外配置需额外配置
包体积轻量(Tree-shake)中等较大中等中等
开源协议MITMITMITMITMIT
模板/页面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 优势:中文文档完善、国内社区活跃、后台管理组件丰富、成熟稳定

最佳实践

生产环境建议

  1. 统一组件前缀:保持默认的 U 前缀或使用自定义前缀,避免与第三方组件冲突
  2. 善用 ui 属性:优先使用 ui 属性进行组件级样式定制,避免 !important 覆盖
  3. 主题集中管理:将主题变量定义在统一的 CSS 文件中,使用 CSS @theme 指令
  4. 组件按需导入:利用 Tree-shaking 特性,避免全量导入未使用组件
  5. 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 引入的 boolean autocomplete 与 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 基本兼容,可能有组件名称微调
  • 从其他库迁移:建议逐步替换,不要一次性全部重写

学习资源

官方资源

教程与课程

社区资源

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.0Nuxt UI v3 发布,全面重构(Reka UI + Tailwind CSS v4)
2025 年 7 月v3.3NuxtLabs 加入 Vercel
2025 年 9 月v4.0Nuxt UI v4 发布,Pro 组件免费开源,128 个组件
2025 年 11 月v4.2.0新增 InputDate、InputTime 组件
2026 年 1 月v4.4Calendar 组件增强、新增 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+ 允许完全移除默认样式,从零构建自定义设计系统