SuperAPI AI 工具集

shadcn-v3

前端与建站

查看项目

更新于 10-27 16:23

技能介绍

用途

shadcn-v3 是一个技能(Skill),用于在 Tailwind CSS v4 环境下搭建与使用 shadcn/ui。其范围包括:Tailwind v4 与 shadcn/ui 的配置、CSS 变量架构、暗色模式、主题配置、组件组合模式、无障碍以及表单集成。

该技能明确不覆盖 Tailwind v3 与 PostCSS 配置。

前提假设

资料中列出的假设条件为:

  • Tailwind CSS v4+
  • shadcn/ui 最新版本
  • Next.js 16(该仓库);采用 CSS-first 的 Tailwind v4,而非 Vite
  • React 18+ 或 Next.js 14+
  • TypeScript 6+

主要原则

  • 使用 @theme inline 将 CSS 变量映射为 Tailwind token
  • 在 :root 与 .dark 中使用 hsl() 包裹颜色值
  • 在 components.json 中设置 "tailwind.config": ""(v4 下为空)
  • 若存在 tailwind.config.ts 则删除(v4 使用基于 CSS 的配置)
  • 在 Next 应用中使用 CSS-first 的 Tailwind v4(而非 @tailwindcss/vite)
  • 使用 cn() 工具函数处理条件类名
  • 语义化颜色自动适配暗色模式(无需 dark: 变体)
  • 使用 @plugin 指令引入插件(而非 @import 或 require())
  • 由较小的 shadcn 原语组合出复杂组件
  • 通过包装模式扩展组件(不修改原始组件)
  • 使用 CVA(class-variance-authority)构建变体系统
  • 仅在父级必须附加 ref 时使用 forwardRef(React 19 默认不再要求)
  • 利用 Radix UI 原语获得内置无障碍能力

约束

必须(MUST)

  • 在 :root 与 .dark 中用 hsl() 包裹颜色值
  • 使用 @theme inline 映射所有 CSS 变量
  • 在 components.json 中设置 "tailwind.config": ""
  • 若存在 tailwind.config.ts 则删除
  • 在 Next 应用中使用 CSS-first 的 Tailwind v4(在 CSS 中 @import "tailwindcss")

应当(SHOULD)

  • 使用语义化颜色 token(--background、--foreground 等)
  • 使用 cn() 工具函数处理条件类名
  • 使用 @plugin 指令引入插件
  • 由较小的 shadcn 原语组合组件
  • 使用包装模式扩展组件(不修改原始组件)
  • 在自定义组件中使用 CVA 构建变体系统
  • 在父级必须附加 ref 时使用 forwardRef
  • 通过键盘导航与屏幕阅读器测试无障碍
  • 对复杂交互(对话框、下拉菜单等)使用 Radix UI 原语
  • 为纯图标按钮与交互元素提供 ARIA 标签
  • 仅当应用基于 Vite(非 Next.js)时使用 @tailwindcss/vite

避免(AVOID)

  • 将 :root 或 .dark 放入 @layer base
  • 使用 .dark { @theme { } } 模式(v4 不支持嵌套 @theme)
  • 重复包裹颜色(如在 body 中写 hsl(var(--background)))
  • 使用 tailwind.config.ts 配置主题颜色
  • 使用 @apply 指令(v4 中已弃用)
  • 对语义化颜色使用 dark: 变体
  • 使用 @import 或 require() 引入插件(应使用 @plugin)
  • 直接修改基础 shadcn 组件(应使用包装模式)
  • 从零构建自定义下拉菜单/对话框(应使用 Radix 原语)
  • 仅依赖颜色表示状态
  • 跳过无障碍测试

交互关系

  • 与 next 配合完成 App Router 搭建
  • 使用 typescript 保证类型安全

模式示例

CSS 变量设置

/* src/index.css */
@import "tailwindcss";

@theme inline {
  --color-background: var(--background);
  --color-foreground: var(--foreground);
}

:root {
  --background: hsl(0 0% 100%);
  --foreground: hsl(222.2 84% 4.9%);
}

.dark {
  --background: hsl(222.2 84% 4.9%);
  --foreground: hsl(210 40% 98%);
}

Vite 配置(仅 Vite 应用)

// vite.config.ts — skip for Next.js CSS-first setups
import tailwindcss from '@tailwindcss/vite'

export default defineConfig({
  plugins: [react(), tailwindcss()],
})

组件配置

{
  "tailwind": {
    "config": "",
    "css": "src/index.css",
    "baseColor": "slate",
    "cssVariables": true
  }
}

完整设置参见 Templates(含组件扩展)与 Architecture。

参考文档

  • Architecture - 完整设置模式
  • Dark Mode - 暗色模式实现
  • Common Gotchas - 常见问题与修复
  • Migration Guide - 从 v3 迁移
  • Component Patterns - 组合、CVA、扩展模式
  • Accessibility - ARIA、键盘导航、屏幕阅读器
  • Form Patterns - React Hook Form 集成

资源

  • shadcn/ui Tailwind v4 Guide
  • Tailwind v4 Docs

适用场景与限制

该技能适用于使用 Tailwind CSS v4 与 shadcn/ui 的前端项目,尤其是 Next.js 应用中的主题与组件体系搭建,以及需要暗色模式、无障碍与表单集成的场景。限制方面:不覆盖 Tailwind v3 与 PostCSS 配置;资料未提供收费、价格、平台支持范围或效果承诺等信息。