This commit is contained in:
Ubuntu
2026-07-03 16:58:28 +08:00
commit 32b43f85bd
6240 changed files with 1987678 additions and 0 deletions
+769
View File
@@ -0,0 +1,769 @@
# Personal Blog - UI 设计规范
> **文档类型**: 设计系统 (Design System)
> **适用范围**: Admin Dashboard 后台管理
> **版本**: v1.0
> **更新日期**: 2026-04-19
---
## 目录
1. [设计原则](#1-设计原则)
2. [色彩系统](#2-色彩系统)
3. [排版系统](#3-排版系统)
4. [间距系统](#4-间距系统)
5. [阴影与圆角](#5-阴影与圆角)
6. [组件规范](#6-组件规范)
7. [布局规范](#7-布局规范)
8. [动效规范](#8-动效规范)
9. [图标规范](#9-图标规范)
10. [响应式规范](#10-响应式规范)
---
## 1. 设计原则
### 1.1 核心原则
| 原则 | 描述 | 实践方式 |
|------|------|---------|
| **清晰 (Clarity)** | 信息层级明确,用户一眼找到重点 | 足够的对比度、合理的留白 |
| **效率 (Efficiency)** | 减少操作步骤,提高工作流效率 | 快捷操作、批量处理 |
| **一致 (Consistency)** | 相同元素表现一致,降低学习成本 | 统一的组件、颜色、间距 |
| **反馈 (Feedback)** | 操作后有明确的状态反馈 | Toast、Loading、过渡动画 |
### 1.2 设计价值观
- **内容优先**: 界面服务于内容,而非干扰
- **克制美学**: 减少不必要的装饰,保持专业感
- **渐进披露**: 复杂功能分层展示,避免信息过载
---
## 2. 色彩系统
### 2.1 色彩层级
```
┌─────────────────────────────────────────────────────────┐
│ 色彩层级金字塔 │
├─────────────────────────────────────────────────────────┤
│ │
│ ▲ 强调色 │
│ ╱ ╲ 10% (主按钮、链接) │
│ ╱ ╲ │
│ ▲ 主色 │
│ ╱ ╲ 20% (交互元素、状态) │
│ ╱ ╲ │
│ ▲ 文字色 │
│ ╱ ╲ 30% (标题、正文) │
│ ╱ ╲ │
│ ▲ 背景色 │
│ ╱ ╲ 40% (页面、卡片背景) │
│ ╱ ╲ │
│ │
└─────────────────────────────────────────────────────────┘
```
### 2.2 主色板
#### 主色调 (Primary)
| 色值 | 名称 | 用途 |
|------|------|------|
| `#10B981` | Primary | 主按钮、主链接、强调 |
| `#059669` | Primary Hover | 悬停状态 |
| `#D1FAE5` | Primary Light | 图标背景、标签背景 |
| `#ECFDF5` | Primary Subtle | 选中状态背景 |
#### 侧边栏色 (Sidebar)
| 色值 | 名称 | 用途 |
|------|------|------|
| `#0F172A` | Sidebar BG | 侧边栏背景 |
| `#1E293B` | Sidebar Hover | 菜单项悬停 |
| `#334155` | Sidebar Active | 当前选中项 |
| `#94A3B8` | Sidebar Text | 默认文字 |
| `#FFFFFF` | Sidebar Text Active | 选中文字 |
#### 中性色 (Neutral)
| 色值 | 名称 | 用途 |
|------|------|------|
| `#0F172A` | Text Primary | 主要文字、标题 |
| `#64748B` | Text Secondary | 次要文字、描述 |
| `#94A3B8` | Text Muted | 弱化文字、占位符 |
| `#E2E8F0` | Border | 分割线、边框 |
| `#F8FAFC` | BG Main | 主背景 |
| `#FFFFFF` | BG Card | 卡片背景 |
#### 功能色 (Functional)
| 色值 | 名称 | 用途 |
|------|------|------|
| `#10B981` | Success | 成功、增长 |
| `#F59E0B` | Warning | 警告、提示 |
| `#EF4444` | Danger | 错误、删除 |
| `#3B82F6` | Info | 信息、提示 |
### 2.3 色彩使用规则
```
✅ 正确用法:
- 主色仅用于主要操作按钮和重要链接
- 功能色用于状态指示和反馈
- 文字色保持 3 个层级以内
❌ 错误用法:
- 同一页面使用超过 3 种强调色
- 正文使用纯黑 (#000000)
- 边框颜色过深,喧宾夺主
```
### 2.4 对比度要求
| 场景 | 最小对比度 | 推荐对比度 |
|------|-----------|-----------|
| 正文文字 | 4.5:1 | 7:1 |
| 大号文字 | 3:1 | 4.5:1 |
| 图标 | 3:1 | 4.5:1 |
| 按钮 | 3:1 | 4.5:1 |
---
## 3. 排版系统
### 3.1 字体族
```css
font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
```
- **主要**: Inter (现代、清晰、专业)
- **后备**: 系统字体栈
### 3.2 字号规范
| 名称 | 类名 | 尺寸 | 行高 | 字重 | 用途 |
|------|------|------|------|------|------|
| Display | `text-3xl` | 30px | 36px | 700 | 大数字展示 |
| H1 | `text-2xl` | 24px | 32px | 600 | 页面标题 |
| H2 | `text-xl` | 20px | 28px | 600 | 区块标题 |
| H3 | `text-lg` | 18px | 28px | 500 | 卡片标题 |
| Body | `text-base` | 16px | 24px | 400 | 正文 |
| Body Sm | `text-sm` | 14px | 20px | 400 | 次要正文 |
| Caption | `text-xs` | 12px | 16px | 500 | 标签、辅助 |
### 3.3 字重使用
| 字重 | 数值 | 用途 |
|------|------|------|
| Regular | 400 | 正文、描述 |
| Medium | 500 | 按钮、标签、导航 |
| Semibold | 600 | 标题、重要文字 |
| Bold | 700 | 大数字、强调 |
### 3.4 排版规则
```
标题规范:
- 页面标题: text-2xl font-semibold
- 卡片标题: text-lg font-semibold
- 表单标签: text-sm font-medium
正文规范:
- 主要文字: text-base text-admin-text-primary
- 次要文字: text-sm text-admin-text-secondary
- 辅助文字: text-xs text-admin-text-muted
行高规则:
- 标题: 行高 = 1.25 × 字号
- 正文: 行高 = 1.5 × 字号
- 紧凑: 行高 = 1.25 × 字号
```
---
## 4. 间距系统
### 4.1 间距 Token
| Token | 值 | 用途 |
|-------|-----|------|
| `space-1` | 4px | 图标与文字间距 |
| `space-2` | 8px | 紧凑内边距、小间隙 |
| `space-3` | 12px | 按钮内边距、列表项间距 |
| `space-4` | 16px | 标准内边距、卡片间距 |
| `space-6` | 24px | 区块间距、大内边距 |
| `space-8` | 32px | 页面级间距 |
| `space-10` | 40px | 大区块分隔 |
| `space-12` | 48px | 章节间距 |
### 4.2 组件间距
| 组件 | 内边距 | 外边距 |
|------|--------|--------|
| 按钮 (sm) | px-3 py-1.5 | - |
| 按钮 (md) | px-4 py-2 | - |
| 按钮 (lg) | px-6 py-2.5 | - |
| 卡片 | p-6 | mb-6 |
| 卡片头部 | px-6 py-4 | - |
| 卡片内容 | px-6 py-4 | - |
| 表单输入框 | px-4 py-2.5 | mb-4 |
| 表格行 | px-6 py-4 | - |
### 4.3 布局间距
```
页面布局:
├── 主内容区: p-6 (24px)
├── 区块间距: space-y-6 (24px)
├── 卡片网格: gap-6 (24px)
└── 卡片内部: space-y-4 (16px)
表单布局:
├── 表单区块: space-y-6 (24px)
├── 表单项: space-y-1.5 (6px)
├── 标签与输入: 间距 6px
└── 按钮组: gap-3 (12px)
```
---
## 5. 阴影与圆角
### 5.1 阴影规范
| 名称 | 值 | 用途 |
|------|-----|------|
| `shadow-sm` | `0 1px 2px 0 rgba(0,0,0,0.05)` | 输入框、小按钮 |
| `shadow` | `0 1px 3px 0 rgba(0,0,0,0.1), 0 1px 2px 0 rgba(0,0,0,0.06)` | 标准卡片 |
| `shadow-md` | `0 4px 6px -1px rgba(0,0,0,0.1), 0 2px 4px -1px rgba(0,0,0,0.06)` | 悬停卡片 |
| `shadow-lg` | `0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -2px rgba(0,0,0,0.05)` | 下拉菜单、模态框 |
| `shadow-xl` | `0 20px 25px -5px rgba(0,0,0,0.1), 0 10px 10px -5px rgba(0,0,0,0.04)` | 特殊强调 |
### 5.2 阴影使用场景
```
✅ 使用阴影:
- 卡片组件: shadow (默认), shadow-md (悬停)
- 下拉菜单: shadow-lg
- 模态框: shadow-lg
- Toast 通知: shadow-lg
- 按钮: shadow-sm (主按钮)
❌ 避免阴影:
- 输入框 (使用 border 代替)
- 分割线
- 纯文本元素
```
### 5.3 圆角规范
| Token | 值 | 用途 |
|-------|-----|------|
| `rounded-sm` | 6px | 小按钮、标签 |
| `rounded` | 8px | 标准按钮、输入框、小卡片 |
| `rounded-lg` | 12px | 卡片、模态框 |
| `rounded-xl` | 16px | 大卡片、特殊组件 |
| `rounded-full` | 50% | 头像、圆形按钮 |
### 5.4 圆角使用规则
```
组件圆角:
├── 按钮 (sm): rounded-md (6px)
├── 按钮 (md/lg): rounded-lg (8px)
├── 卡片: rounded-xl (12px)
├── 输入框: rounded-lg (8px)
├── 下拉菜单: rounded-lg (8px)
├── 模态框: rounded-xl (12px)
├── 头像: rounded-full
└── Toast: rounded-lg (8px)
```
---
## 6. 组件规范
### 6.1 按钮 (Button)
#### 变体规范
```
Primary (主按钮):
├── 背景: bg-admin-primary (#10B981)
├── 文字: text-white
├── 悬停: bg-admin-primary-hover (#059669)
├── 阴影: shadow-sm
└── 用途: 主要操作、保存、提交
Secondary (次按钮):
├── 背景: bg-white
├── 边框: border border-admin-border
├── 文字: text-admin-text-primary
├── 悬停: bg-gray-50
└── 用途: 次要操作、取消
Ghost (幽灵按钮):
├── 背景: transparent
├── 文字: text-admin-text-secondary
├── 悬停: bg-gray-100 text-admin-text-primary
└── 用途: 低优先级操作、图标按钮
Danger (危险按钮):
├── 背景: bg-admin-danger (#EF4444)
├── 文字: text-white
├── 悬停: bg-red-600
└── 用途: 删除、危险操作
```
#### 尺寸规范
| 尺寸 | 内边距 | 字号 | 圆角 | 用途 |
|------|--------|------|------|------|
| sm | px-3 py-1.5 | text-xs | rounded-md | 表格内、紧凑布局 |
| md | px-4 py-2 | text-sm | rounded-lg | 标准按钮 |
| lg | px-6 py-2.5 | text-base | rounded-lg | 强调操作 |
#### 状态规范
```
默认状态:
- 正常显示
悬停状态:
- 背景色加深
- 阴影增强
- 过渡时间: 200ms
点击状态:
- 轻微下沉 (transform: translateY(1px))
- 过渡时间: 100ms
禁用状态:
- opacity: 0.5
- cursor: not-allowed
- 无交互效果
加载状态:
- 显示 Loading 图标
- 禁用点击
```
### 6.2 输入框 (Input)
#### 基础样式
```
默认状态:
├── 背景: bg-white
├── 边框: border border-admin-border
├── 圆角: rounded-lg
├── 内边距: px-4 py-2.5
├── 文字: text-admin-text-primary
└── 占位符: placeholder:text-admin-text-muted
聚焦状态:
├── 边框: border-admin-primary
├── 阴影: ring-2 ring-admin-primary/20
└── 过渡: transition-all duration-200
错误状态:
├── 边框: border-admin-danger
├── 阴影: ring-2 ring-red-200
└── 错误文字: text-sm text-admin-danger
```
#### 尺寸规范
| 尺寸 | 内边距 | 高度 | 用途 |
|------|--------|------|------|
| sm | px-3 py-2 | 36px | 紧凑表单 |
| md | px-4 py-2.5 | 42px | 标准输入 |
| lg | px-4 py-3 | 48px | 强调输入 |
### 6.3 卡片 (Card)
#### 结构规范
```
Card:
├── 背景: bg-white
├── 圆角: rounded-xl (12px)
├── 阴影: shadow
├── 边框: border border-admin-border
└── 内边距: 根据内容调整
CardHeader:
├── 下边框: border-b border-admin-border
├── 内边距: px-6 py-4
├── 标题: text-lg font-semibold
└── 描述: text-sm text-admin-text-secondary
CardContent:
└── 内边距: px-6 py-4
CardFooter:
├── 上边框: border-t border-admin-border
├── 背景: bg-gray-50
├── 圆角: rounded-b-xl
└── 内边距: px-6 py-4
```
#### 变体规范
```
标准卡片:
- shadow
- hover:shadow-md (可选)
扁平卡片:
- shadow-none
- bg-gray-50
强调卡片:
- border-admin-primary/30
- bg-admin-primary-subtle
```
### 6.4 表格 (Table)
#### 结构规范
```
Table:
├── 背景: bg-white
├── 圆角: rounded-xl
├── 阴影: shadow
└── overflow: hidden
TableHead:
├── 背景: bg-gray-50
├── 下边框: border-b border-admin-border
└── 文字: text-xs font-semibold uppercase
TableRow:
├── 下边框: border-b border-admin-border
└── 悬停: bg-gray-50
TableCell:
├── 内边距: px-6 py-4
├── 表头: text-admin-text-secondary
└── 内容: text-admin-text-primary
```
#### 行高规范
| 密度 | 内边距 | 用途 |
|------|--------|------|
| 紧凑 | px-4 py-3 | 数据量大时 |
| 标准 | px-6 py-4 | 默认 |
| 宽松 | px-6 py-5 | 强调行 |
### 6.5 标签 (Tag/Badge)
#### 变体规范
```
Primary:
├── 背景: bg-admin-primary-light
├── 文字: text-admin-primary
└── 圆角: rounded-full
Success:
├── 背景: bg-green-100
├── 文字: text-green-700
└── 圆角: rounded-full
Warning:
├── 背景: bg-amber-100
├── 文字: text-amber-700
└── 圆角: rounded-full
Danger:
├── 背景: bg-red-100
├── 文字: text-red-700
└── 圆角: rounded-full
Secondary:
├── 背景: bg-gray-100
├── 文字: text-gray-700
└── 圆角: rounded-full
```
#### 尺寸规范
| 尺寸 | 内边距 | 字号 | 用途 |
|------|--------|------|------|
| sm | px-2 py-0.5 | text-xs | 表格内、紧凑 |
| md | px-2.5 py-1 | text-xs | 默认 |
| lg | px-3 py-1 | text-sm | 强调 |
---
## 7. 布局规范
### 7.1 页面布局
```
┌─────────────────────────────────────────────┐
│ Sidebar (240px) │ Main Content (flex-1) │
│ │ │
│ Logo │ Header (64px) │
│ │ ──────────────────────── │
│ Navigation │ │
│ │ Page Header │
│ ─────────── │ ──────────────────────── │
│ │ │
│ User Profile │ Content Area │
│ │ │
└─────────────────────────────────────────────┘
```
### 7.2 网格系统
#### 统计卡片网格
```
桌面端 (lg+):
- grid-cols-4
- gap-6
平板端 (md):
- grid-cols-2
- gap-6
移动端:
- grid-cols-1
- gap-4
```
#### 内容网格
```
两栏布局:
├── 左侧: w-2/3 (主要内容)
└── 右侧: w-1/3 (侧边栏)
表单布局:
├── 单列: max-w-2xl mx-auto
├── 双列: grid-cols-2 gap-6
└── 三列: grid-cols-3 gap-6
```
### 7.3 内容区域
| 区域 | 最大宽度 | 对齐 | 用途 |
|------|---------|------|------|
| 全宽 | 100% | - | 表格、Dashboard |
| 适中 | max-w-4xl (896px) | mx-auto | 表单页面 |
| 窄 | max-w-2xl (672px) | mx-auto | 设置页面 |
---
## 8. 动效规范
### 8.1 过渡时间
| 时长 | 用途 |
|------|------|
| 100ms | 按钮点击、快速反馈 |
| 150ms | 颜色变化、透明度 |
| 200ms | 阴影、边框、transform |
| 300ms | 页面切换、模态框 |
| 500ms | Toast 进入/退出 |
### 8.2 缓动函数
```css
/* 标准 */
transition-timing-function: ease-in-out;
/* 进入 */
transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
/* 退出 */
transition-timing-function: cubic-bezier(0.4, 0, 1, 1);
/* 弹性 */
transition-timing-function: cubic-bezier(0.34, 1.56, 0.64, 1);
```
### 8.3 常用动效
#### 按钮悬停
```css
transition: all 200ms ease-in-out;
/* 悬停: 背景色变深 + 阴影增强 */
```
#### 卡片悬停
```css
transition: all 200ms ease-in-out;
/* 悬停: shadow → shadow-md + translateY(-2px) */
```
#### Toast 进入
```css
animation: slideIn 300ms cubic-bezier(0, 0, 0.2, 1);
/* 从右侧滑入 + 淡入 */
```
#### 模态框进入
```css
animation: modalIn 200ms cubic-bezier(0, 0, 0.2, 1);
/* 淡入 + 轻微缩放 */
```
### 8.4 性能优化
```
✅ 性能友好:
- transform (位移、缩放)
- opacity (淡入淡出)
- will-change (提前声明)
❌ 避免使用:
- width/height 动画
- top/left 动画
- box-shadow 大范围变化
```
---
## 9. 图标规范
### 9.1 图标库
- **主要**: [Lucide React](https://lucide.dev/)
- **风格**: 线性图标 (outline)
- **线宽**: 2px
- **端点**: 圆角
### 9.2 图标尺寸
| 尺寸 | 值 | 用途 |
|------|-----|------|
| xs | 14px | 内联文字 |
| sm | 16px | 按钮、表单 |
| md | 20px | 导航菜单 |
| lg | 24px | 独立图标 |
| xl | 32px | 空状态、强调 |
### 9.3 图标使用规则
```
图标 + 文字:
├── 间距: gap-2 (8px)
├── 图标位置: 文字左侧 (默认)
└── 对齐: items-center
图标按钮:
├── 尺寸: p-2 (按钮整体)
├── 图标: w-4 h-4 或 w-5 h-5
└── 圆角: rounded-lg
独立图标:
└── 尺寸: w-6 h-6 或更大
```
---
## 10. 响应式规范
### 10.1 断点定义
| 断点 | 宽度 | 设备 |
|------|------|------|
| sm | 640px | 大手机 |
| md | 768px | 平板 |
| lg | 1024px | 小桌面 |
| xl | 1280px | 桌面 |
| 2xl | 1536px | 大桌面 |
### 10.2 响应式规则
#### 侧边栏
```
桌面端 (lg+):
├── 固定显示
├── 宽度: 240px
└── 位置: fixed left-0
平板/移动端 (< lg):
├── 默认隐藏
├── 触发: 汉堡菜单
└── 遮罩: 半透明背景
```
#### 统计卡片
```
桌面端: grid-cols-4
平板端: grid-cols-2
移动端: grid-cols-1
```
#### 表格
```
桌面端: 完整显示
移动端:
├── 横向滚动
└── 或卡片式重构
```
### 10.3 触摸优化
```
最小点击区域:
├── 按钮: 44px × 44px
├── 图标按钮: 40px × 40px
└── 列表项: 48px 高度
间距调整:
├── 移动端增加间距
└── 按钮尺寸增大
```
---
## 11. 设计检查清单
### 11.1 新建组件检查
- [ ] 颜色使用设计系统 token
- [ ] 间距使用标准 spacing
- [ ] 字号符合排版规范
- [ ] 圆角统一为 8px/12px
- [ ] 阴影符合层级规范
- [ ] 包含所有状态样式 (默认/悬停/禁用)
- [ ] 过渡动画 150-200ms
- [ ] 支持响应式适配
### 11.2 代码审查检查
- [ ] 无硬编码颜色值
- [ ] 无硬编码间距值
- [ ] 可访问性达标 (对比度)
- [ ] 键盘导航支持
- [ ] 屏幕阅读器友好
---
## 12. 更新日志
| 日期 | 版本 | 变更内容 |
|------|------|----------|
| 2026-04-19 | v1.0 | 初始版本,完整的 UI 设计规范 |
---
*本文档为 Personal Blog Admin Dashboard 的 UI 设计规范,所有组件和页面应遵循此规范进行设计和开发。*