Files
geMoldInsight/.trae/documents/交互走查_UIv2_动效键盘无障碍.md
T

90 lines
3.5 KiB
Markdown
Raw Normal View History

2026-03-25 23:59:29 +08:00
# 交互走查(UI v2)
## 1. 动效参数(Motion Tokens)
- Easing
- `--ease-default`: `cubic-bezier(0.4, 0, 0.2, 1)`
- Duration
- `--duration-fast`: `140ms`(hover/press/focus 的轻量过渡)
- `--duration-normal`: `180ms`(弹窗/抽屉等容器级过渡)
- `--duration-slow`: `260ms`(页面级淡入、复杂布局切换)
- Reduced Motion
- 当 `prefers-reduced-motion: reduce`:所有 transition/animation 时长强制为 `1ms`,并关闭平滑滚动。
## 2. 微交互规范(Micro-interactions)
- Button
- Hover:轻微提升(如 `translateY(-1px)`)+ 阴影增强
- Active:回落(`translateY(0)`)+ 阴影减弱
- Focus-visible:3px 可见焦点环(UI v2 使用 indigo 系)
- Input / Select
- Focus:边框高亮 + 3px 焦点环
- Invalid:`aria-invalid="true"` 时显示错误态(颜色 + 文案)
- Loading
- 页面级:使用非阻塞 Loading(避免焦点丢失/Tab 被截断)
- 按钮级:loading 状态应禁用重复提交并提示“处理中”
## 3. 键盘与焦点顺序(Tab Order)
### 3.1 全局
- 焦点顺序必须与视觉顺序一致(从左到右、从上到下)。
- 页面切换(路由变化)后:
- 默认把焦点设置到页面标题 `h1`(若可实现)或第一个可交互元素。
### 3.2 组件级
- 导航链接(`a`)
- `Tab` 聚焦
- `Enter` 触发导航
- Button(`button`)
- `Tab` 聚焦
- `Enter/Space` 触发
- 输入框(`input`/`textarea`)
- `Tab` 聚焦
- `Esc` 不应清空内容(除非明确说明)
- Select(`select`)
- `Tab` 聚焦
- `Arrow` 在打开态变更选项
### 3.3 模态框(Modal)
- 打开时:
- 焦点移动到第一个可交互控件(或标题 + 关闭按钮)。
- 关闭时:
- 焦点回到触发打开的按钮。
- `Esc`:关闭(如果业务允许)。
## 4. 无障碍标签与语义(WCAG 2.1 AA 关键点)
### 4.1 颜色对比
- 正文、按钮文字、表单占位与边框需满足 AA 对比度要求。
- 通过令牌层保证:`--text-primary/secondary/tertiary` 与 `--bg-*` 配对达标。
### 4.2 表单
- 每个输入控件必须有可见 `label`。
- 错误提示与输入框绑定:
- 输入框:`aria-invalid="true"`
- 错误文本:为其生成 `id` 并用 `aria-describedby` 关联
- 提交失败:聚焦到第一个错误字段并播报错误(可通过 `aria-live`)。
### 4.3 图标按钮
- 若按钮仅图标,必须提供可读名称:
- `aria-label="关闭"` / `title="关闭"`
### 4.4 通知(Toast/Alert)
- 错误类:建议 `role="alert"`(立即播报)
- 信息类:建议 `role="status"`(非打断播报)
## 5. 像素级验收建议(与工程联动)
- 验收基线:
- 每个关键页面至少 1 张桌面端基线截图(含主要状态:默认/空态/加载/错误)。
- 容差:
- 像素级对比误差 ≤ 1px(文本抗锯齿允许极小差异,建议在工具中配置阈值)。
- 关键路径:
- 登录 → 进入首页 → 打开核心模块 → 创建/编辑/删除关键实体(若业务允许)。
## 6. 灰度与回滚交互(前端开关)
- UI 版本
- `document.documentElement.dataset.ui`:`v1` / `v2`
- 本地覆盖:`localStorage.gemold_ui_version`
- 灰度比例:`localStorage.gemold_ui_rollout_percent`(0–100)
- 主题
- `document.documentElement.dataset.theme`:`light` / `dark`
- 本地覆盖:`localStorage.gemold_theme`
- 内部控制台
- `/_release`:提供切换 v1/v2、设置灰度比例与“一键回滚”