Home

Published

- 12 min read

前端规范

img of 前端规范

应该先安装的包

npm install lucide-react clsx tailwind-merge class-variance-authority react-hook-form zod @hookform/resolvers next-themes sonner
npm install -D tailwindcss postcss autoprefixer tailwindcss-animate
npm install next react react-dom
npm install -D typescript @types/node @types/react @types/react-dom

提示词

# HERITAGEFLOW:全局 UI 美学与组件渲染规范

## 核心设计定位
界面必须稳定呈现以下特征:

- 现代感
- 极简主义
- 严谨清晰的视觉层级
- 高一致性
- 高级感与专业感
- Light / Dark 模式下均具备良好可读性

在生成、重构或调整任何 React 组件、Tailwind 样式或页面结构时,必须严格遵守本规范。  
目标不仅是“功能可用”,而是交付**一致、克制、清晰、可维护、具有高级质感的前端界面**

---

## 规则优先级
当多个目标发生冲突时,必须按以下优先级决策:

1. 优先复用已有共享组件
2. 优先遵守本规范中的组件一致性规则
3. 优先保证视觉层级、可读性与交互清晰度
4. 优先保持实现简洁、可维护
5. 最后才考虑额外的视觉修饰与美化

除非用户明确要求,否则不得为了“更炫”或“更特别”而破坏一致性。

---

## 铁律一:组件级一致性(Component Consistency)

### 核心原则
相同功能必须使用相同组件和相同交互模式。  
禁止同类功能在不同页面中使用不同组件方案,导致系统割裂。

### 强制规范
1. **单一事实来源**
   - 所有“选择一个选项”的交互,统一使用 Shadcn 的 `Select``DropdownMenu`
   - **绝对禁止**使用原生 HTML `<select>`
   - 所有弹窗、模态框,统一使用 Shadcn 的 `Dialog``AlertDialog`
   - 所有按钮统一使用共享 `Button` 组件
   - 严禁手写带完整视觉风格的原生 `<button>`

2. **按钮层级约束**
   - 主操作:`Button variant="default"`
   - 次操作:`Button variant="outline"`
   - 弱化操作 / 辅助操作:`Button variant="ghost"`

3. **图标库约束**
   - 全系统统一使用 `lucide-react`
   - 默认 `strokeWidth={2}`
   - 图标尺寸保持统一:
     - 正文 / 主界面上下文:`size={16}`
     - 辅助说明 / 次级信息:`size={14}`

4. **复用优先**
   - 如果项目中已有可复用组件,必须优先复用
   - 如果 `@/components/ui/*` 中已有对应组件,禁止重复实现功能相同的新组件
   - 如果 Shadcn 默认模式已经能解决问题,不要擅自发明新的交互形式

---

## 铁律二:通过空间、底色与光影建立层级(Hierarchy via Space, Surface & Elevation)

### 核心原则
极简不等于没有边界。  
界面必须通过留白、表面差异、轻量边框与阴影建立可感知的层级关系,避免所有模块“糊成一片”。

### 强制规范
1. **悬浮层必须有阴影**
   - 下拉菜单、提示层、浮动工具栏、Popover、菜单、弹出面板等悬浮组件,必须具有阴影
   - 统一使用:`shadow-md``shadow-lg`

2. **使用底色差异区分块面**
   - 页面背景、侧边栏、主内容区、卡片、面板之间,必须存在轻微但明确的表面区分
   - 示例:
     - 页面画布:`bg-muted/30`
     - 内容卡片:`bg-card`

3. **边框必须克制**
   - 当必须使用边框时,统一使用低视觉权重边框:
     - `border border-border/50`
   - 禁止使用过重、过亮、过多的边框造成“边框套娃”

4. **内部结构分隔**
   - 模块内部使用 `Separator`
   - 或使用:
     - `border-t border-border/40`

5. **优先通过留白建立关系**
   - 分组与层级优先通过间距、块面、阴影、排版建立
   - 不要优先依赖色块包裹和重边框来硬性分区

---

## 铁律三:排版即界面(Typography as Interface)

### 核心原则
视觉层级应首先由文字系统建立,而不是靠夸张背景色或装饰元素堆砌。

### 强制规范
1. **信息层级依赖字体系统**
   - 使用字号建立层级:`text-sm``text-xs`
   - 使用字重建立层级:`font-medium``font-semibold`
   - 使用颜色建立层级:`text-foreground``text-muted-foreground`

2. **强调必须克制**
   - 避免使用高饱和背景色块包裹普通文本进行强调
   - 不要为了“突出”而让界面变吵

3. **标签与弱强调样式**
   - Tag / Badge 使用低饱和、低对比、安静的表达方式
   - 推荐样式:
     - `bg-muted text-muted-foreground rounded-md px-2 py-1`

4. **优先使用文字层级而非装饰层级**
   - 当需要区分标题、说明、元信息、注释时,优先调整字号、字重、颜色
   - 不要优先增加块状背景、高亮边框、胶囊包裹等装饰性手法

---

## 铁律四:微交互的丝滑感(Fluid Micro-interactions)

### 核心原则
交互反馈必须统一、克制、清晰,不可突兀,不可完全没有反馈。

### 强制规范
1. **所有可交互元素具备统一过渡**
   - 必须带有:
     - `transition-all duration-200 ease-in-out`

2. **标准 Hover 态**
   - 使用:
     - `hover:bg-accent hover:text-accent-foreground`
   - Hover 反馈必须明确,但不能过度夸张

3. **统一 Focus Rings**
   - 所有输入框、按钮、可聚焦元素必须具有统一焦点光环:
     - `focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring`

4. **交互反馈统一**
   - 相似交互在不同页面中应保持一致的 hover、focus、open、selected 状态表达
   - 不得同一系统中一部分组件有反馈、另一部分完全无反馈

---

## 组件选择决策规则(Component Decision Rules)

当需要选择组件时,默认按以下规则决策:

- 从列表中选择一个选项 → 使用 `Select`
- 从按钮触发一组操作菜单 → 使用 `DropdownMenu`
- 确认删除、危险操作、高风险操作 → 使用 `AlertDialog`
- 打开表单、详情、设置面板、普通弹窗 → 使用 `Dialog`
- 主操作按钮 → `Button variant="default"`
- 次操作按钮 → `Button variant="outline"`
- 弱化按钮 / 工具类按钮 → `Button variant="ghost"`
- 需要承载独立信息块 → 使用 `Card``bg-card` 容器
- 模块内部需要分隔两段内容 → 使用 `Separator`

如果不确定使用哪种组件,优先使用最保守、最通用、最一致的方案。

---

## 严格禁止项(Hard Prohibitions)

除非用户明确要求,否则以下行为一律禁止:

- 禁止使用原生 HTML `<select>`
- 禁止手写具有品牌视觉样式的原生 `<button>`
- 禁止引入新的图标库
- 禁止同一系统中混用多套弹窗方案
- 禁止相同功能使用不同交互模式
- 禁止使用高饱和背景色块强调普通文本
- 禁止以“极简”为理由去掉所有边界、层级和阴影
- 禁止在已有设计模式可复用时擅自发明新的间距、圆角、阴影体系
- 禁止在现有 Shadcn 组件可以解决问题时引入新的 UI 库
- 禁止为了视觉“花哨”而破坏整体统一性
- 禁止脱离现有组件体系重复造轮子

---

## 不确定时的默认策略(Default Behavior When Uncertain)

如果你不确定该如何实现,请严格遵守以下决策顺序:

1. 优先复用已有共享组件
2. 优先使用 `@/components/ui/*` 中已有组件
3. 优先使用 Shadcn 的默认交互模式
4. 优先选择克制、低噪音、低装饰性的样式
5. 优先保证可读性和一致性,而不是视觉新鲜感
6. 优先保证维护成本低,而不是局部“看起来更独特”

---

## 输出前自检(Self-Check Before Final Output)

在输出代码前,必须逐项检查以下内容:

1. 相同交互是否使用了相同组件模式?
2. 所有按钮是否都来自共享 `Button` 组件?
3. 所有下拉与选项交互是否都使用 `Select``DropdownMenu`
4. 所有弹窗是否都使用 `Dialog``AlertDialog`
5. 图标是否全部来自 `lucide-react`
6. 所有可交互元素是否都具备:
   - `transition-all duration-200 ease-in-out`
7. 所有可聚焦元素是否都具备:
   - `focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring`
8. 所有悬浮层是否具备适度阴影:
   - `shadow-md``shadow-lg`
9. 边框是否足够克制,而非过重?
10. 视觉层级是否主要通过排版、间距、底色和阴影建立?
11. 是否避免了高饱和色块和无意义装饰?
12. Light / Dark 模式下是否都具备良好可读性?
13. 是否已经优先复用了已有组件,而不是重新实现相同功能?

---

## 对 AI 开发者的最终执行指令

你在生成或重构任何界面时,必须始终记住:

- 目标不是单纯把页面“做出来”
- 目标是交付一个具有系统一致性、严谨层级、克制美感和高级质感的界面
- 一致性比新鲜感更重要
- 可读性比装饰性更重要
- 复用比重写更重要
- 克制比炫技更重要

如果存在已有组件,必须优先使用。  
如果 Shadcn 能解决问题,不要自定义发明新的交互模式。  
如果某种视觉选择不确定,优先选择更安静、更稳定、更一致的方案。  
必须确保所有下拉、弹窗、菜单、浮层在 Light / Dark 模式下都具备优秀的可读性与层次感。