File contents 交互规范
适用场景
定义用户与界面交互的细节,包括加载状态、空状态、反馈机制、动效、无障碍等,确保交互流畅、友好、可访问。
交互设计原则
及时反馈 :用户操作后立即给予反馈
清晰引导 :明确告诉用户下一步该做什么
容错性 :允许用户撤销、修改操作
一致性 :相同操作在不同场景下行为一致
可访问性 :支持键盘、屏幕阅读器等辅助技术
交互规范
1. 加载状态
加载场景
场景
处理方式
时机
视觉表现
页面首次加载
骨架屏
首次进入页面
灰色占位块,模拟内容结构
页面刷新
顶部进度条
刷新页面
蓝色进度条,从左到右
按钮提交
按钮内 spinner
点击提交按钮后
按钮内显示旋转图标,文字隐藏
列表加载更多
底部 spinner
滚动到底部
底部显示"加载中..."
局部刷新
区域内 spinner
刷新某个区域
区域内显示旋转图标
搜索
输入框内 spinner
输入后延迟搜索
输入框右侧显示旋转图标
骨架屏设计
┌─────────────────────────────────────┐
│ ████████ │ ← 标题占位
│ ████████████ │ ← 描述占位
│ │
│ ████ ████████████████ │ ← 列表项占位
│ ████ ████████████████ │
│ ████ ████████████████ │
└─────────────────────────────────────┘
骨架屏原则 :
模拟真实内容的结构和布局
使用灰色占位块(Gray-200)
添加微妙的动画(shimmer效果)
不要显示真实数据的占位符
Spinner设计
尺寸
大小
线宽
用途
sm
16px
2px
按钮内、输入框内
md
24px
2.5px
卡片内、区域内
lg
32px
3px
页面级加载
颜色 :
主色(Primary):主要操作的加载
灰色(Gray-400):次要操作的加载
白色(White):深色背景上的加载
2. 空状态
空状态场景
场景
展示内容
操作引导
无数据
插图 + "暂无数据"
"创建第一个项目" 按钮
搜索无结果
插图 + "未找到相关内容"
"尝试其他关键词" 提示
网络错误
插图 + "网络连接失败"
"重试" 按钮
权限不足
插图 + "无权访问"
"返回首页" 按钮
404页面
插图 + "页面不存在"
"返回首页" 按钮
空状态设计
┌─────────────────────────────────────┐
│ │
│ [插图/图标] │
│ │
│ 暂无数据 │
│ 您还没有创建任何项目 │
│ │
│ [创建项目] 按钮 │
│ │
└─────────────────────────────────────┘
空状态原则 :
使用友好的插图或图标
说明为什么是空的
提供明确的操作引导
不要让用户感到困惑或沮丧
3. 反馈机制
Toast通知
类型
颜色
图标
持续时间
位置
Success
Success
✓
3秒
顶部居中
Warning
Warning
⚠
4秒
顶部居中
Error
Error
✕
5秒
顶部居中
Info
Info
ℹ
3秒
顶部居中
Toast设计 :
┌─────────────────────────────────────┐
│ [图标] 操作成功 │
└─────────────────────────────────────┘
背景:对应语义色
文字:白色
圆角:radius-md
阴影:shadow-lg
最大宽度:400px
可手动关闭(右侧×按钮)
Modal确认框
类型
用途
按钮
确认
危险操作(删除、清空)
"取消" + "确认"
警告
重要提示
"我知道了"
信息
详细说明
"关闭"
Modal设计 :
┌─────────────────────────────────────┐
│ 标题 [×] │
├─────────────────────────────────────┤
│ │
│ 内容区域 │
│ │
├─────────────────────────────────────┤
│ [取消] [确认] │
└─────────────────────────────────────┘
背景:White
圆角:radius-xl
阴影:shadow-2xl
最大宽度:480px
遮罩:rgba(0,0,0,0.5)
表单验证
时机
验证方式
反馈位置
输入时
实时验证(延迟300ms)
输入框下方
失焦时
立即验证
输入框下方
提交时
全部验证
输入框下方 + Toast
错误提示 :
颜色:Error
字号:14px
图标:✕
位置:输入框下方,space-2间距
4. 动效规范
页面过渡
场景
动效
参数
页面进入
淡入
300ms ease-out, opacity 0→1
页面退出
淡出
200ms ease-in, opacity 1→0
路由切换
淡入淡出
250ms ease-in-out
弹窗动效
场景
动效
参数
Modal出现
淡入 + 缩放
250ms ease-out, scale 0.95→1, opacity 0→1
Modal消失
淡出 + 缩放
200ms ease-in, scale 1→0.95, opacity 1→0
Drawer出现
滑入
300ms ease-out, translateX -100%→0
Drawer消失
滑出
250ms ease-in, translateX 0→-100%
微交互
场景
动效
参数
按钮悬停
背景色渐变
150ms ease-out
按钮按下
缩放
100ms ease-out, scale 0.98
卡片悬停
阴影加深
200ms ease-out
展开收起
高度动画
250ms ease-in-out
淡入淡出
透明度
200ms ease-in-out
动效原则 :
动效要有意义,不要为了炫技
保持克制,不要过度动画
微交互要快(150ms),大动画可以慢(300ms)
提供关闭动画的选项(尊重用户偏好)
5. 无障碍设计
颜色对比度
组合
对比度
是否合规(WCAG AA)
Gray-900 / White
16.1:1
✅
Gray-700 / White
9.5:1
✅
Gray-500 / White
4.6:1
✅
Primary / White
需计算
需≥4.5:1
对比度要求 :
正文文字:≥4.5:1(WCAG AA)
大文字(18px+):≥3:1(WCAG AA)
图标、UI组件:≥3:1
键盘导航
按键
功能
Tab
移动到下一个可聚焦元素
Shift + Tab
移动到上一个可聚焦元素
Enter
激活按钮、链接、提交表单
Space
切换复选框、单选框、开关
Escape
关闭弹窗、下拉菜单、取消操作
方向键
在列表、菜单、选项卡中导航
Home / End
跳到列表开头/结尾
聚焦指示 :
所有可交互元素必须有明显的聚焦状态
聚焦样式:2px Primary 外发光
不要移除默认的 outline
屏幕阅读器
元素
ARIA 属性
说明
按钮
aria-label
图标按钮必须有文字说明
输入框
aria-label 或关联 <label>
说明输入框用途
加载状态
aria-busy="true"
告知正在加载
错误提示
aria-live="polite"
实时播报错误
弹窗
role="dialog", aria-modal="true"
标识为对话框
导航
role="navigation", aria-label
标识导航区域
触控目标
设备
最小尺寸
推荐尺寸
移动端
44x44px
48x48px
桌面端
32x32px
40x40px
触控原则 :
按钮、链接等可点击元素要足够大
相邻元素之间要有足够间距(至少8px)
移动端优先考虑拇指可达区域
6. 响应式交互
断点调整
断点
交互调整
< 640px (mobile)
全屏弹窗、底部抽屉、大触控目标
640-1024px (tablet)
侧边抽屉、适中触控目标
> 1024px (desktop)
居中弹窗、悬停效果、小触控目标
移动端特殊交互
交互
说明
下拉刷新
列表顶部下拉触发刷新
滑动删除
列表项左滑显示删除按钮
长按
长按触发上下文菜单
双击
双击放大图片
捏合缩放
图片、地图支持捏合缩放
输出要求
在UI设计文档中,应包含以下交互规范章节:
## 7. 交互规范
### 7.1 加载状态
[加载场景表格]
### 7.2 空状态
[空状态场景表格]
### 7.3 反馈机制
[Toast、Modal、表单验证规范]
### 7.4 动效规范
[页面过渡、弹窗动效、微交互表格]
### 7.5 无障碍设计
[颜色对比度、键盘导航、屏幕阅读器、触控目标]
关键原则
及时反馈 :用户操作后立即给予反馈
清晰引导 :明确告诉用户下一步该做什么
容错性 :允许用户撤销、修改操作
可访问性 :支持键盘、屏幕阅读器等辅助技术
常见误区
❌ 无加载提示 :操作后没有任何反馈,用户不知道是否成功
❌ 空状态不友好 :只显示"无数据",没有引导用户下一步
❌ 过度动画 :所有元素都加动画,影响性能和体验
❌ 忽略无障碍 :不支持键盘导航,颜色对比度不足
1 --- 2 name: ui-designer-interaction-specification 3 description: 交互规范,定义加载状态、空状态、反馈机制、动效、无障碍等交互细节 4 --- 5 6 # 交互规范 7 8 ## 适用场景 9 10 定义用户与界面交互的细节,包括加载状态、空状态、反馈机制、动效、无障碍等,确保交互流畅、友好、可访问。 11 12 ## 交互设计原则 13 14 1. **及时反馈**:用户操作后立即给予反馈 15 2. **清晰引导**:明确告诉用户下一步该做什么 16 3. **容错性**:允许用户撤销、修改操作 17 4. **一致性**:相同操作在不同场景下行为一致 18 5. **可访问性**:支持键盘、屏幕阅读器等辅助技术 19 20 ## 交互规范 21 22 ### 1. 加载状态 23 24 #### 加载场景 25 26 | 场景 | 处理方式 | 时机 | 视觉表现 | 27 |------|----------|------|----------| 28 | 页面首次加载 | 骨架屏 | 首次进入页面 | 灰色占位块,模拟内容结构 | 29 | 页面刷新 | 顶部进度条 | 刷新页面 | 蓝色进度条,从左到右 | 30 | 按钮提交 | 按钮内 spinner | 点击提交按钮后 | 按钮内显示旋转图标,文字隐藏 | 31 | 列表加载更多 | 底部 spinner | 滚动到底部 | 底部显示"加载中..." | 32 | 局部刷新 | 区域内 spinner | 刷新某个区域 | 区域内显示旋转图标 | 33 | 搜索 | 输入框内 spinner | 输入后延迟搜索 | 输入框右侧显示旋转图标 | 34 35 #### 骨架屏设计 36 37 ``` 38 ┌─────────────────────────────────────┐ 39 │ ████████ │ ← 标题占位 40 │ ████████████ │ ← 描述占位 41 │ │ 42 │ ████ ████████████████ │ ← 列表项占位 43 │ ████ ████████████████ │ 44 │ ████ ████████████████ │ 45 └─────────────────────────────────────┘ 46 ``` 47 48 **骨架屏原则**: 49 - 模拟真实内容的结构和布局 50 - 使用灰色占位块(Gray-200) 51 - 添加微妙的动画(shimmer效果) 52 - 不要显示真实数据的占位符 53 54 #### Spinner设计 55 56 | 尺寸 | 大小 | 线宽 | 用途 | 57 |------|------|------|------| 58 | sm | 16px | 2px | 按钮内、输入框内 | 59 | md | 24px | 2.5px | 卡片内、区域内 | 60 | lg | 32px | 3px | 页面级加载 | 61 62 **颜色**: 63 - 主色(Primary):主要操作的加载 64 - 灰色(Gray-400):次要操作的加载 65 - 白色(White):深色背景上的加载 66 67 ### 2. 空状态 68 69 #### 空状态场景 70 71 | 场景 | 展示内容 | 操作引导 | 72 |------|----------|----------| 73 | 无数据 | 插图 + "暂无数据" | "创建第一个项目" 按钮 | 74 | 搜索无结果 | 插图 + "未找到相关内容" | "尝试其他关键词" 提示 | 75 | 网络错误 | 插图 + "网络连接失败" | "重试" 按钮 | 76 | 权限不足 | 插图 + "无权访问" | "返回首页" 按钮 | 77 | 404页面 | 插图 + "页面不存在" | "返回首页" 按钮 | 78 79 #### 空状态设计 80 81 ``` 82 ┌─────────────────────────────────────┐ 83 │ │ 84 │ [插图/图标] │ 85 │ │ 86 │ 暂无数据 │ 87 │ 您还没有创建任何项目 │ 88 │ │ 89 │ [创建项目] 按钮 │ 90 │ │ 91 └─────────────────────────────────────┘ 92 ``` 93 94 **空状态原则**: 95 - 使用友好的插图或图标 96 - 说明为什么是空的 97 - 提供明确的操作引导 98 - 不要让用户感到困惑或沮丧 99 100 ### 3. 反馈机制 101 102 #### Toast通知 103 104 | 类型 | 颜色 | 图标 | 持续时间 | 位置 | 105 |------|------|------|----------|------| 106 | Success | `Success` | ✓ | 3秒 | 顶部居中 | 107 | Warning | `Warning` | ⚠ | 4秒 | 顶部居中 | 108 | Error | `Error` | ✕ | 5秒 | 顶部居中 | 109 | Info | `Info` | ℹ | 3秒 | 顶部居中 | 110 111 **Toast设计**: 112 ``` 113 ┌─────────────────────────────────────┐ 114 │ [图标] 操作成功 │ 115 └─────────────────────────────────────┘ 116 ``` 117 118 - 背景:对应语义色 119 - 文字:白色 120 - 圆角:radius-md 121 - 阴影:shadow-lg 122 - 最大宽度:400px 123 - 可手动关闭(右侧×按钮) 124 125 #### Modal确认框 126 127 | 类型 | 用途 | 按钮 | 128 |------|------|------| 129 | 确认 | 危险操作(删除、清空) | "取消" + "确认" | 130 | 警告 | 重要提示 | "我知道了" | 131 | 信息 | 详细说明 | "关闭" | 132 133 **Modal设计**: 134 ``` 135 ┌─────────────────────────────────────┐ 136 │ 标题 [×] │ 137 ├─────────────────────────────────────┤ 138 │ │ 139 │ 内容区域 │ 140 │ │ 141 ├─────────────────────────────────────┤ 142 │ [取消] [确认] │ 143 └─────────────────────────────────────┘ 144 ``` 145 146 - 背景:White 147 - 圆角:radius-xl 148 - 阴影:shadow-2xl 149 - 最大宽度:480px 150 - 遮罩:rgba(0,0,0,0.5) 151 152 #### 表单验证 153 154 | 时机 | 验证方式 | 反馈位置 | 155 |------|----------|----------| 156 | 输入时 | 实时验证(延迟300ms) | 输入框下方 | 157 | 失焦时 | 立即验证 | 输入框下方 | 158 | 提交时 | 全部验证 | 输入框下方 + Toast | 159 160 **错误提示**: 161 - 颜色:Error 162 - 字号:14px 163 - 图标:✕ 164 - 位置:输入框下方,space-2间距 165 166 ### 4. 动效规范 167 168 #### 页面过渡 169 170 | 场景 | 动效 | 参数 | 171 |------|------|------| 172 | 页面进入 | 淡入 | 300ms ease-out, opacity 0→1 | 173 | 页面退出 | 淡出 | 200ms ease-in, opacity 1→0 | 174 | 路由切换 | 淡入淡出 | 250ms ease-in-out | 175 176 #### 弹窗动效 177 178 | 场景 | 动效 | 参数 | 179 |------|------|------| 180 | Modal出现 | 淡入 + 缩放 | 250ms ease-out, scale 0.95→1, opacity 0→1 | 181 | Modal消失 | 淡出 + 缩放 | 200ms ease-in, scale 1→0.95, opacity 1→0 | 182 | Drawer出现 | 滑入 | 300ms ease-out, translateX -100%→0 | 183 | Drawer消失 | 滑出 | 250ms ease-in, translateX 0→-100% | 184 185 #### 微交互 186 187 | 场景 | 动效 | 参数 | 188 |------|------|------| 189 | 按钮悬停 | 背景色渐变 | 150ms ease-out | 190 | 按钮按下 | 缩放 | 100ms ease-out, scale 0.98 | 191 | 卡片悬停 | 阴影加深 | 200ms ease-out | 192 | 展开收起 | 高度动画 | 250ms ease-in-out | 193 | 淡入淡出 | 透明度 | 200ms ease-in-out | 194 195 **动效原则**: 196 - 动效要有意义,不要为了炫技 197 - 保持克制,不要过度动画 198 - 微交互要快(150ms),大动画可以慢(300ms) 199 - 提供关闭动画的选项(尊重用户偏好) 200 201 ### 5. 无障碍设计 202 203 #### 颜色对比度 204 205 | 组合 | 对比度 | 是否合规(WCAG AA) | 206 |------|--------|---------------------| 207 | Gray-900 / White | 16.1:1 | ✅ | 208 | Gray-700 / White | 9.5:1 | ✅ | 209 | Gray-500 / White | 4.6:1 | ✅ | 210 | Primary / White | 需计算 | 需≥4.5:1 | 211 212 **对比度要求**: 213 - 正文文字:≥4.5:1(WCAG AA) 214 - 大文字(18px+):≥3:1(WCAG AA) 215 - 图标、UI组件:≥3:1 216 217 #### 键盘导航 218 219 | 按键 | 功能 | 220 |------|------| 221 | Tab | 移动到下一个可聚焦元素 | 222 | Shift + Tab | 移动到上一个可聚焦元素 | 223 | Enter | 激活按钮、链接、提交表单 | 224 | Space | 切换复选框、单选框、开关 | 225 | Escape | 关闭弹窗、下拉菜单、取消操作 | 226 | 方向键 | 在列表、菜单、选项卡中导航 | 227 | Home / End | 跳到列表开头/结尾 | 228 229 **聚焦指示**: 230 - 所有可交互元素必须有明显的聚焦状态 231 - 聚焦样式:2px Primary 外发光 232 - 不要移除默认的 outline 233 234 #### 屏幕阅读器 235 236 | 元素 | ARIA 属性 | 说明 | 237 |------|-----------|------| 238 | 按钮 | `aria-label` | 图标按钮必须有文字说明 | 239 | 输入框 | `aria-label` 或关联 `<label>` | 说明输入框用途 | 240 | 加载状态 | `aria-busy="true"` | 告知正在加载 | 241 | 错误提示 | `aria-live="polite"` | 实时播报错误 | 242 | 弹窗 | `role="dialog"`, `aria-modal="true"` | 标识为对话框 | 243 | 导航 | `role="navigation"`, `aria-label` | 标识导航区域 | 244 245 #### 触控目标 246 247 | 设备 | 最小尺寸 | 推荐尺寸 | 248 |------|----------|----------| 249 | 移动端 | 44x44px | 48x48px | 250 | 桌面端 | 32x32px | 40x40px | 251 252 **触控原则**: 253 - 按钮、链接等可点击元素要足够大 254 - 相邻元素之间要有足够间距(至少8px) 255 - 移动端优先考虑拇指可达区域 256 257 ### 6. 响应式交互 258 259 #### 断点调整 260 261 | 断点 | 交互调整 | 262 |------|----------| 263 | < 640px (mobile) | 全屏弹窗、底部抽屉、大触控目标 | 264 | 640-1024px (tablet) | 侧边抽屉、适中触控目标 | 265 | > 1024px (desktop) | 居中弹窗、悬停效果、小触控目标 | 266 267 #### 移动端特殊交互 268 269 | 交互 | 说明 | 270 |------|------| 271 | 下拉刷新 | 列表顶部下拉触发刷新 | 272 | 滑动删除 | 列表项左滑显示删除按钮 | 273 | 长按 | 长按触发上下文菜单 | 274 | 双击 | 双击放大图片 | 275 | 捏合缩放 | 图片、地图支持捏合缩放 | 276 277 ## 输出要求 278 279 在UI设计文档中,应包含以下交互规范章节: 280 281 ```markdown 282 ## 7. 交互规范 283 284 ### 7.1 加载状态 285 [加载场景表格] 286 287 ### 7.2 空状态 288 [空状态场景表格] 289 290 ### 7.3 反馈机制 291 [Toast、Modal、表单验证规范] 292 293 ### 7.4 动效规范 294 [页面过渡、弹窗动效、微交互表格] 295 296 ### 7.5 无障碍设计 297 [颜色对比度、键盘导航、屏幕阅读器、触控目标] 298 ``` 299 300 ## 关键原则 301 302 1. **及时反馈**:用户操作后立即给予反馈 303 2. **清晰引导**:明确告诉用户下一步该做什么 304 3. **容错性**:允许用户撤销、修改操作 305 4. **可访问性**:支持键盘、屏幕阅读器等辅助技术 306 307 ## 常见误区 308 309 ❌ **无加载提示**:操作后没有任何反馈,用户不知道是否成功 310 ❌ **空状态不友好**:只显示"无数据",没有引导用户下一步 311 ❌ **过度动画**:所有元素都加动画,影响性能和体验 312 ❌ **忽略无障碍**:不支持键盘导航,颜色对比度不足
echovic/boss-skill/tree/main/skill/skills/ui-designer/interaction-specification commit 9517f61096
Frequently asked questions How do I install the UI Designer/interaction Specification skill? Run npx skillmds@latest add echovic/ui-designer-interaction-specification in your terminal (requires Node.js), paste this page's agent-chat prompt into Claude, Cursor, or any MCP-connected agent, or download the SKILL.md file and copy it into your agent's skills directory.
What does the UI Designer/interaction Specification skill do? 交互规范,定义加载状态、空状态、反馈机制、动效、无障碍等交互细节 It is listed under Coding & Dev Tools on SkillMD.
Is UI Designer/interaction Specification safe to use? This skill has not completed SkillMD's automated safety review yet. SkillMD never runs a skill's scripts for you; review the SKILL.md before installing.
Which AI agents work with UI Designer/interaction Specification? This skill is tagged as working with Claude Code, Claude.ai, OpenAI Codex. SKILL.md is an open format, so most agents that read a skills directory can load it too.
Is UI Designer/interaction Specification free to use? Yes. Installing skills from SkillMD is free, and the skill stays under its author's original license.
Who published UI Designer/interaction Specification? echovic (@echovic) published this skill. Their other Agent Skills are listed on their SkillMD profile.