UI/UX 规范模板
阶段 4 模板:用户界面与体验标准
文档信息
| 字段 |
值 |
| 项目名称 |
{项目名称} |
| 版本 |
1.0.0 |
| 创建日期 |
{日期} |
1. 设计系统概述
1.1 设计原则
| 原则 |
描述 |
应用方式 |
| 清晰性 |
清晰的视觉层级 |
使用一致的间距和排版 |
| 高效性 |
最小化用户操作 |
智能默认值、快捷键 |
| 一致性 |
可预测的模式 |
可复用组件 |
| 无障碍 |
包容性设计 |
WCAG 2.1 AA 合规 |
1.2 品牌个性
| 属性 |
描述 |
| 调性 |
专业 / 友好 / 活泼 |
| 语气 |
直接 / 对话式 / 技术性 |
| 风格 |
极简 / 丰富 / 插画 |
2. 色彩系统
2.1 主色调
| 令牌 |
亮色模式 |
暗色模式 |
用途 |
--color-primary |
#3B82F6 |
#60A5FA |
主要操作、链接 |
--color-primary-hover |
#2563EB |
#93C5FD |
悬停状态 |
--color-primary-active |
#1D4ED8 |
#BFDBFE |
激活/按下 |
2.2 语义色
| 令牌 |
亮色 |
暗色 |
用途 |
--color-success |
#10B981 |
#34D399 |
成功状态 |
--color-warning |
#F59E0B |
#FBBF24 |
警告状态 |
--color-error |
#EF4444 |
#F87171 |
错误状态 |
--color-info |
#3B82F6 |
#60A5FA |
信息提示 |
2.3 中性色
| 令牌 |
亮色 |
暗色 |
用途 |
--color-background |
#FFFFFF |
#111827 |
页面背景 |
--color-surface |
#F9FAFB |
#1F2937 |
卡片背景 |
--color-text-primary |
#111827 |
#F9FAFB |
主要文本 |
--color-text-secondary |
#6B7280 |
#9CA3AF |
次要文本 |
--color-border |
#E5E7EB |
#374151 |
边框、分割线 |
2.4 颜色使用规范
/* 正确用法 */
.button-primary {
background-color: var(--color-primary);
color: var(--color-text-on-primary);
}
/* 避免硬编码颜色 */
.button-bad {
background-color: #3B82F6; /* 不要这样做 */
}
3. 排版系统
3.1 字体族
| 令牌 |
字体 |
回退字体 |
用途 |
--font-heading |
Inter |
system-ui, sans-serif |
标题 |
--font-body |
Inter |
system-ui, sans-serif |
正文 |
--font-mono |
JetBrains Mono |
monospace |
代码 |
3.2 字号层级
| 令牌 |
字号 |
行高 |
字重 |
用途 |
--text-xs |
12px |
16px |
400 |
说明文字、标签 |
--text-sm |
14px |
20px |
400 |
小号正文、元信息 |
--text-base |
16px |
24px |
400 |
正文 |
--text-lg |
18px |
28px |
400 |
引导段落 |
--text-xl |
20px |
28px |
500 |
小标题 |
--text-2xl |
24px |
32px |
600 |
H3 |
--text-3xl |
30px |
36px |
700 |
H2 |
--text-4xl |
36px |
40px |
800 |
H1 |
3.3 排版示例
<h1 class="text-4xl font-extrabold">页面标题</h1>
<h2 class="text-3xl font-bold">章节标题</h2>
<h3 class="text-2xl font-semibold">小节标题</h3>
<p class="text-base">正文段落内容。</p>
<span class="text-sm text-secondary">2 小时前更新</span>
4. 间距系统
4.1 间距层级
| 令牌 |
值 |
像素 |
用途 |
--space-0 |
0 |
0px |
无间距 |
--space-1 |
0.25rem |
4px |
紧凑间距 |
--space-2 |
0.5rem |
8px |
小间距 |
--space-3 |
0.75rem |
12px |
中等间距 |
--space-4 |
1rem |
16px |
标准内边距 |
--space-6 |
1.5rem |
24px |
区块内边距 |
--space-8 |
2rem |
32px |
大区块 |
--space-12 |
3rem |
48px |
页面区块 |
--space-16 |
4rem |
64px |
主要区块 |
4.2 栅格系统
| 断点 |
列数 |
间距 |
边距 |
| 移动端 (<640px) |
4 |
16px |
16px |
| 平板 (640-1024px) |
8 |
24px |
24px |
| 桌面 (>1024px) |
12 |
24px |
32px |
5. 组件库
5.1 按钮
按钮变体
| 变体 |
用途 |
样式 |
| 主要 |
主要操作 |
主色填充 |
| 次要 |
备选操作 |
描边 |
| 幽灵 |
第三操作 |
无边框/背景 |
| 危险 |
危险操作 |
错误色填充 |
按钮尺寸
| 尺寸 |
高度 |
内边距 |
字号 |
| 小 |
32px |
8px 12px |
14px |
| 中 |
40px |
10px 16px |
14px |
| 大 |
48px |
12px 24px |
16px |
按钮状态
| 状态 |
视觉效果 |
| 默认 |
标准外观 |
| 悬停 |
变暗 10%,指针光标 |
| 激活 |
变暗 20% |
| 禁用 |
透明度 50%,无交互 |
| 加载中 |
旋转图标,禁用 |
<button class="btn btn-primary btn-medium">
主要按钮
</button>
<button class="btn btn-secondary btn-medium">
次要按钮
</button>
<button class="btn btn-danger btn-medium" disabled>
禁用按钮
</button>
5.2 表单控件
输入框
| 状态 |
边框颜色 |
背景 |
| 默认 |
--color-border |
--color-background |
| 聚焦 |
--color-primary |
--color-background |
| 错误 |
--color-error |
#FEF2F2 |
| 禁用 |
--color-border |
--color-surface |
<div class="form-group">
<label class="form-label">邮箱地址</label>
<input type="email" class="form-input" placeholder="you@example.com" />
<span class="form-helper">我们不会分享您的邮箱。</span>
</div>
<div class="form-group has-error">
<label class="form-label">密码</label>
<input type="password" class="form-input" />
<span class="form-error">密码至少需要 8 个字符。</span>
</div>
5.3 卡片
<div class="card">
<div class="card-header">
<h3 class="card-title">卡片标题</h3>
<p class="card-description">可选的描述文字。</p>
</div>
<div class="card-content">
<!-- 卡片内容 -->
</div>
<div class="card-footer">
<button class="btn btn-primary">操作</button>
</div>
</div>
5.4 导航
| 组件 |
用途 |
| 顶部导航 |
主应用导航 |
| 侧边导航 |
二级/上下文导航 |
| 面包屑 |
位置感知 |
| 标签页 |
内容组织 |
6. 响应式设计
6.1 断点
| 名称 |
最小宽度 |
目标设备 |
sm |
640px |
大屏手机、横屏 |
md |
768px |
平板 |
lg |
1024px |
小型笔记本 |
xl |
1280px |
桌面 |
2xl |
1536px |
大屏幕 |
6.2 响应式模式
| 模式 |
用途 |
示例 |
| 重排 |
移动端堆叠 |
栅格 → 弹性列 |
| 显示/隐藏 |
条件显示 |
导航菜单 → 汉堡菜单 |
| 缩放 |
尺寸调整 |
字号、间距 |
/* 移动优先响应式 */
.container {
padding: var(--space-4);
}
@media (min-width: 768px) {
.container {
padding: var(--space-6);
}
}
@media (min-width: 1024px) {
.container {
padding: var(--space-8);
max-width: 1200px;
}
}
7. 无障碍
7.1 WCAG 2.1 AA 要求
| 要求 |
实现方式 |
| 颜色对比度 |
文本 4.5:1,大文本 3:1 |
| 焦点指示器 |
所有交互元素可见焦点环 |
| 键盘导航 |
所有功能可通过键盘访问 |
| 屏幕阅读器支持 |
ARIA 标签、语义化 HTML |
| 动画 |
尊重 prefers-reduced-motion |
7.2 焦点管理
/* 焦点环 */
:focus-visible {
outline: 2px solid var(--color-primary);
outline-offset: 2px;
}
/* 跳过链接 */
.skip-link {
position: absolute;
top: -40px;
left: 0;
padding: var(--space-2) var(--space-4);
background: var(--color-primary);
color: white;
z-index: 100;
}
.skip-link:focus {
top: 0;
}
7.3 ARIA 模式
<!-- 带加载状态的按钮 -->
<button aria-busy="true" aria-live="polite">
<span class="sr-only">加载中...</span>
<span aria-hidden="true" class="spinner"></span>
</button>
<!-- 带错误的表单 -->
<div role="alert" class="form-error">
请修正下面的错误。
</div>
8. 交互模式
8.1 加载状态
| 状态 |
指示器 |
用途 |
| 骨架屏 |
占位形状 |
初始页面加载 |
| 旋转器 |
旋转图标 |
操作进行中 |
| 进度条 |
填充条 |
文件上传、多步骤 |
8.2 反馈消息
| 类型 |
持续时间 |
位置 |
| 成功提示 |
3 秒 |
右上角 |
| 错误提示 |
5 秒(或手动关闭) |
右上角 |
| 信息提示 |
4 秒 |
右上角 |
8.3 动画
| 动画 |
时长 |
缓动函数 |
| 快速 |
150ms |
ease-out |
| 正常 |
250ms |
ease-in-out |
| 慢速 |
400ms |
ease-in-out |
/* 减少动画 */
@media (prefers-reduced-motion: reduce) {
*,
*::before,
*::after {
animation-duration: 0.01ms !important;
transition-duration: 0.01ms !important;
}
}
9. 页面布局
9.1 页面模板
仪表盘布局
┌─────────────────────────────────────────────┐
│ 顶部栏(Logo、导航、用户菜单) │
├──────────┬──────────────────────────────────┤
│ │ │
│ 侧边栏 │ 主内容区 │
│ │ │
│ │ ┌─────────┐ ┌─────────┐ │
│ │ │ 卡片 1 │ │ 卡片 2 │ │
│ │ └─────────┘ └─────────┘ │
│ │ │
├──────────┴──────────────────────────────────┤
│ 底部栏 │
└─────────────────────────────────────────────┘
表单布局
┌─────────────────────────────────────────────┐
│ 页面头部 │
│ 标题 + 描述 │
├─────────────────────────────────────────────┤
│ │
│ 表单区块 1 │
│ ┌─────────────────────────────────────────┐│
│ │ 字段 1 │ 字段 2 ││
│ │ 字段 3 ││
│ └─────────────────────────────────────────┘│
│ │
│ 表单区块 2 │
│ ┌─────────────────────────────────────────┐│
│ │ ... ││
│ └─────────────────────────────────────────┘│
│ │
│ [取消] [保存] │
└─────────────────────────────────────────────┘
10. 图标系统
10.1 图标库
| 库 |
用途 |
| Heroicons |
主要图标集 |
| Lucide |
扩展图标 |
10.2 图标尺寸
| 尺寸 |
像素 |
用途 |
| 小 |
16x16 |
行内、徽章 |
| 中 |
20x20 |
按钮、导航 |
| 大 |
24x24 |
功能图标 |
10.3 图标用法
<!-- 带标签 -->
<button class="btn btn-primary">
<svg class="icon icon-sm"><!-- 图标 SVG --></svg>
<span>保存</span>
</button>
<!-- 仅图标(带无障碍标签) -->
<button class="btn btn-ghost" aria-label="设置">
<svg class="icon icon-md"><!-- 图标 SVG --></svg>
</button>
11. 错误处理界面
11.1 错误状态
| 状态 |
视觉效果 |
消息 |
| 表单错误 |
红色边框 + 图标 |
具体错误信息 |
| 页面错误 |
插图 + 文字 |
"出错了" |
| 空状态 |
插图 + 文字 |
"暂无数据" |
| 离线状态 |
横幅 |
"您已离线" |
11.2 空状态
<div class="empty-state">
<img src="empty-illustration.svg" alt="" class="empty-state-image" />
<h3 class="empty-state-title">暂无数据</h3>
<p class="empty-state-description">
点击下方按钮创建第一条数据。
</p>
<button class="btn btn-primary">创建数据</button>
</div>
校验清单