全部笔记All notes

shadcn/ui 使用指南与提示词模板

阅读 6m 54s6m 54s read

shadcn/ui 完整使用指南与AI提示词模板

🎯 什么是 shadcn/ui

shadcn/ui 是一套设计精美、可访问的组件和代码分发平台,不是传统的组件库,而是构建组件库的方式。它基于以下核心原则:

核心特性

  • 开放代码: 组件代码完全开放,可自由修改定制
  • 组合性: 统一的可组合接口,API一致可预测
  • 分发系统: 平面文件模式和CLI工具简化组件分发
  • 精美默认值: 精心设计的默认样式,开箱即用
  • AI就绪: 开放代码便于LLM理解和改进

🚀 快速开始

1. 选择框架

shadcn/ui 支持所有React框架:

  • Next.js
  • Vite
  • Laravel
  • React Router
  • Astro
  • TanStack Start/Router

2. 基础安装步骤

# 1. 初始化项目
npx create-next-app@latest my-app --typescript --tailwind --eslint

# 2. 进入项目目录
cd my-app

# 3. 运行shadcn-ui初始化
npx shadcn@latest init

# 4. 添加组件
npx shadcn@latest add button
npx shadcn@latest add card
npx shadcn@latest add input

3. 配置文件 (components.json)

{
  "$schema": "https://ui.shadcn.com/schema.json",
  "style": "new-york",
  "rsc": false,
  "tsx": true,
  "tailwind": {
    "config": "tailwind.config.js",
    "css": "src/styles/globals.css",
    "baseColor": "slate",
    "cssVariables": true
  },
  "aliases": {
    "components": "@/components",
    "utils": "@/lib/utils"
  }
}

🎨 设计风格指南

设计原则

  1. 简洁现代: 干净的线条,适度的阴影
  2. 一致性: 统一的间距、颜色和字体系统
  3. 可访问性: 符合WCAG标准,支持键盘导航
  4. 响应式: 移动优先的设计理念

颜色系统

  • 主色调: 可自定义的CSS变量系统
  • 语义化颜色: primary, secondary, destructive, muted
  • 暗黑模式: 内置完整的暗黑主题支持

间距系统

  • 基于Tailwind CSS的间距系统
  • 8px基础网格系统
  • 一致的内外边距规范

🧩 核心组件分类

基础组件

  • Button: 各种样式的按钮组件
  • Input: 输入框组件
  • Label: 标签组件
  • Card: 卡片容器组件

表单组件

  • Form: 表单容器和验证
  • Select: 下拉选择器
  • Checkbox: 复选框
  • Radio: 单选按钮
  • Textarea: 文本域

导航组件

  • Navigation Menu: 导航菜单
  • Breadcrumb: 面包屑导航
  • Tabs: 标签页组件
  • Pagination: 分页组件

反馈组件

  • Alert: 警告提示
  • Toast: 消息提示
  • Dialog: 对话框
  • Tooltip: 工具提示

数据展示

  • Table: 表格组件
  • Avatar: 头像组件
  • Badge: 徽章组件
  • Progress: 进度条

高级组件

  • Command: 命令面板
  • Calendar: 日历组件
  • Date Picker: 日期选择器
  • Combobox: 组合框

✨ Magic UI 特效组件

动画效果

  • blur-fade: 模糊淡入淡出动画
  • text-animate: 文字动画效果
  • animated-beam: 动画光束效果
  • border-beam: 边框光束动画

背景效果

  • grid-pattern: 网格背景图案
  • dot-pattern: 点状背景图案
  • retro-grid: 复古网格效果
  • particles: 粒子效果背景

特殊效果

  • meteors: 流星雨效果
  • confetti: 彩带庆祝效果
  • ripple: 水波纹效果
  • shine-border: 发光边框效果

文字特效

  • animated-gradient-text: 渐变文字动画
  • sparkles-text: 闪烁文字效果
  • typing-animation: 打字机动画
  • morphing-text: 文字变形效果

📱 最佳实践

1. 组件定制

// 扩展默认组件
import { Button } from "@/components/ui/button"
import { cn } from "@/lib/utils"

interface CustomButtonProps extends ButtonProps {
  gradient?: boolean
}

const CustomButton = ({ gradient, className, ...props }: CustomButtonProps) => {
  return (
    <Button
      className={cn(
        gradient && "bg-gradient-to-r from-blue-500 to-purple-600",
        className
      )}
      {...props}
    />
  )
}

2. 主题定制

/* globals.css */
:root {
  --background: 0 0% 100%;
  --foreground: 222.2 84% 4.9%;
  --primary: 221.2 83.2% 53.3%;
  --primary-foreground: 210 40% 98%;
}

.dark {
  --background: 222.2 84% 4.9%;
  --foreground: 210 40% 98%;
  --primary: 217.2 91.2% 59.8%;
  --primary-foreground: 222.2 84% 4.9%;
}

3. 响应式设计

<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
  <Card className="p-6">
    <CardHeader>
      <CardTitle>响应式卡片</CardTitle>
    </CardHeader>
    <CardContent>
      内容自适应不同屏幕尺寸
    </CardContent>
  </Card>
</div>

🤖 AI提示词模板

基础组件创建提示词

请使用shadcn/ui创建一个[组件类型]组件,要求:

1. 技术栈:
   - 使用TypeScript
   - 基于shadcn/ui组件库
   - 使用Tailwind CSS样式
   - 支持暗黑模式

2. 功能需求:
   - [具体功能描述]
   - 支持[特定属性]
   - 包含[交互行为]

3. 设计要求:
   - 遵循shadcn/ui设计规范
   - 现代简洁的视觉风格
   - 良好的可访问性
   - 响应式设计

4. 代码规范:
   - 使用forwardRef处理ref传递
   - 使用cva处理变体样式
   - 包含完整的TypeScript类型定义
   - 遵循shadcn/ui的组件结构

请提供完整的组件代码和使用示例。

页面布局提示词

请使用shadcn/ui组件创建一个[页面类型]页面,包含:

1. 布局结构:
   - 响应式导航栏
   - 主内容区域
   - 侧边栏(如需要)
   - 页脚

2. 组件使用:
   - 使用shadcn/ui的[具体组件列表]
   - 集成表单验证(使用react-hook-form + zod)
   - 添加适当的加载状态和错误处理

3. 视觉设计:
   - 遵循shadcn/ui设计系统
   - 合理的间距和排版
   - 统一的颜色方案
   - 支持暗黑模式切换

4. 交互体验:
   - 流畅的动画过渡
   - 直观的用户反馈
   - 键盘导航支持

请提供完整的页面代码和相关的组件文件。

特效组件提示词

请使用shadcn/ui和Magic UI创建一个具有[特效类型]的组件:

1. 特效需求:
   - 使用Magic UI的[具体特效组件]
   - 实现[动画效果描述]
   - 支持用户交互触发

2. 技术实现:
   - 基于Framer Motion或CSS动画
   - 性能优化,避免重复渲染
   - 支持动画控制(播放/暂停/重置)

3. 自定义选项:
   - 可配置的动画参数
   - 多种预设效果
   - 响应式适配

4. 集成要求:
   - 与shadcn/ui组件无缝集成
   - 保持一致的设计语言
   - 支持主题切换

请提供组件代码、使用示例和配置选项说明。

表单创建提示词

请使用shadcn/ui创建一个[表单类型]表单,包含:

1. 表单字段:
   - [字段列表及类型]
   - 相应的验证规则
   - 错误提示信息

2. 技术栈:
   - react-hook-form进行表单管理
   - zod进行数据验证
   - shadcn/ui表单组件

3. 用户体验:
   - 实时验证反馈
   - 清晰的错误提示
   - 加载状态显示
   - 成功提交反馈

4. 样式要求:
   - 响应式布局
   - 一致的间距和对齐
   - 支持暗黑模式
   - 无障碍访问支持

请提供完整的表单组件代码和验证schema。

主题定制提示词

请为shadcn/ui项目创建一个自定义主题:

1. 设计风格:
   - [风格描述,如:现代简约/科技感/温暖色调等]
   - 主色调:[具体颜色]
   - 辅助色彩:[颜色方案]

2. 定制内容:
   - CSS变量定义
   - 组件样式覆盖
   - 暗黑模式适配
   - 字体和间距调整

3. 组件变体:
   - 按钮样式变体
   - 卡片设计变体
   - 输入框样式变体

4. 实现要求:
   - 保持shadcn/ui的设计原则
   - 确保组件间的一致性
   - 良好的可访问性
   - 完整的TypeScript支持

请提供主题配置文件和相关的样式代码。

🔧 常用命令速查

# 初始化项目
npx shadcn@latest init

# 添加单个组件
npx shadcn@latest add button
npx shadcn@latest add card
npx shadcn@latest add form

# 添加多个组件
npx shadcn@latest add button card input label

# 更新组件
npx shadcn@latest update

# 查看可用组件
npx shadcn@latest list

# 添加特定样式的组件
npx shadcn@latest add --style new-york button

📚 学习资源

官方文档

相关技术栈

社区资源

💡 进阶技巧

1. 组件组合模式

// 复合组件模式
const Card = {
  Root: CardRoot,
  Header: CardHeader,
  Title: CardTitle,
  Description: CardDescription,
  Content: CardContent,
  Footer: CardFooter,
}

// 使用
<Card.Root>
  <Card.Header>
    <Card.Title>标题</Card.Title>
    <Card.Description>描述</Card.Description>
  </Card.Header>
  <Card.Content>内容</Card.Content>
  <Card.Footer>底部</Card.Footer>
</Card.Root>

2. 自定义Hook集成

// 自定义hook与shadcn/ui组件结合
const useFormWithToast = () => {
  const { toast } = useToast()
  const form = useForm()
  
  const onSubmit = async (data) => {
    try {
      await submitData(data)
      toast({
        title: "成功",
        description: "数据已保存",
      })
    } catch (error) {
      toast({
        title: "错误",
        description: "保存失败",
        variant: "destructive",
      })
    }
  }
  
  return { form, onSubmit }
}

3. 性能优化

// 使用React.memo优化组件渲染
const OptimizedCard = React.memo(({ title, content }) => (
  <Card>
    <CardHeader>
      <CardTitle>{title}</CardTitle>
    </CardHeader>
    <CardContent>{content}</CardContent>
  </Card>
))

// 使用useMemo优化计算
const MemoizedList = ({ items }) => {
  const sortedItems = useMemo(
    () => items.sort((a, b) => a.name.localeCompare(b.name)),
    [items]
  )
  
  return (
    <div>
      {sortedItems.map(item => (
        <Card key={item.id}>...</Card>
      ))}
    </div>
  )
}

🎉 总结

shadcn/ui 不仅仅是一个组件库,更是一种构建现代Web应用的理念和方法。通过开放的代码、一致的API和精美的设计,它为开发者提供了一个强大而灵活的工具集。

结合AI工具使用时,shadcn/ui的开放性和一致性使得AI能够更好地理解和生成符合规范的代码,大大提高了开发效率。

无论是快速原型开发还是大型项目构建,shadcn/ui都能提供稳定可靠的解决方案。配合本指南中的提示词模板,你可以更高效地利用AI助手来创建高质量的用户界面。