You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
7.6 KiB
7.6 KiB
巴适伙伴 · UI 设计规范(最新规范学习 + 项目审计落地)
本文是「查找最新 UI 设计规范 → 学习记忆 → 运用到项目」的产物。第 1–2 节是学到的规范(记忆),第 3 节是对照本项目的审计,第 4 节是本次落地,第 5 节是可选后续。 研究时间:2026-08。规范以 WCAG 2.2(W3C)、Design Tokens(W3C DTCG)、Material Design 3、现代 CSS(web.dev)为权威基线,结合 2026 趋势。
1. 研究来源(权威基线)
- WCAG 2.2(W3C,2023 发布,现行标准):对比度、焦点、目标尺寸、跳转等可访问性准则。
- Design Tokens Community Group(W3C DTCG):令牌分层与格式化标准。
- Material Design 3(Google):色彩系统、动效、形状、高程的 web 友好体系。
- web.dev / Smashing:现代 CSS 实践(color-mix、OKLCH、clamp、container queries)。
- 2026 趋势(行业报告):动态自适应、流体间距/排版、主题感知令牌、动效克制、空间深度。
2. 最新 UI 设计规范要点(学习记忆)
2.1 Design Tokens 四层架构(2026 共识)
- Foundation(基础):颜色基值、字号比例、圆角基准、间距基线——系统的"物理常数",极少变动。
- Semantic(语义):primary / success / warning / error / text / surface——映射到视觉表现,支持品牌调性切换。
- Contextual(情境):响应式/容器派生(如
--space-*随屏宽缩放)。 - Intelligent(智能):AI/行为数据驱动(本项目不涉及)。
- 铁律:单一真相源(single source of truth),组件只引用令牌不写散值;深色模式靠令牌覆盖而非重写。
2.2 WCAG 2.2 无障碍(核心规范骨架)
| 准则 | 要求 | 级别 |
|---|---|---|
| 1.4.3 对比度(最小) | 正文 ≥4.5:1;大字(≥18pt 或 ≥14pt 粗)≥3:1 | AA |
| 1.4.1 颜色用途 | 颜色不能是传达信息的唯一通道(需文字/图标冗余) | A |
| 1.4.11 非文本对比 | UI 组件/图形对象 ≥3:1 | AA |
| 2.1.1 键盘 | 全部功能可用键盘操作 | A |
| 2.4.1 绕过区块 | 提供"跳到主内容"链接 | A |
| 2.4.7 焦点可见 + 2.4.11 焦点外观 | 焦点指示器 ≥2 CSS px、与相邻色 ≥3:1 | AA |
| 2.5.8 目标尺寸(最小) | 交互元素 ≥24×24 CSS px(AA);2.5.5 ≥44×44(AAA) | AA |
| 2.3.3 交互动画 | 尊重 prefers-reduced-motion |
AAA |
| 3.1.1 / 3.1.2 页面语言 | <html lang> 随语种;外文片段标注 |
A |
| 4.1.2 名称/角色/值 | 交互元素有可访问名(aria-label/原生语义) | A |
2.3 现代 CSS(2026 工程基线)
- color-mix() / OKLCH:感知均匀的混色与调阶(OKLCH 比 HSL 更符合人眼)。
- clamp() 流体排版/间距:无断点连续缩放,避免极端屏崩坏。
- container queries:组件级响应式(比视口 media query 更内聚)。
- 逻辑属性:
margin-inline/inset等,天然支持 RTL。 - prefers-color-scheme + color-scheme:原生暗色 + 表单控件自动适配。
- :focus-visible:仅键盘聚焦显指示器,不干扰鼠标。
2.4 2026 趋势(取舍)
- 动态自适应(弱网降级、环境光调对比)——方向正确,落地需克制,避免过度工程。
- 流体间距(间距随屏宽缩放)——优于固定 8px,但需防过度变形。
- 动效克制(长周期、低强度,避免视觉疲劳)——本项目已践行(40s/50s drift)。
- 空间深度(AR/3D)——官网不涉及。
2.5 视觉层级与一致性
- 8px 间距网格;模块化字号阶梯(display > h1 > h2 > h3 > body > micro)。
- 语义化用色(强调色按显示角色分档,各档过 WCAG 阈值)。
- 克制圆角(大块锐利、小元素圆润,形成层次)。
- 微交互有目的(hover 微浮、状态反馈),不炫技。
3. 项目审计(对照规范)
✅ 已合规项(设计系统成熟)
- Design Tokens:Foundation(
--brand-*、--fs-*、--space-*、--radius-*、--duration-*)+ Semantic(--accent、--status-*、--surface-*、--text-*)齐备;赛道色--track-*单源(经src/lib/tracks.ts的TRACK_TOKEN)。 - 主题感知 + 暗色模式:
[data-theme="dark"]覆盖块 +useTheme.ts三态切换 +index.html防 FOUC 内联脚本。 - color-mix:大量用于派生色(赛道卡片底、描边、阴影)。
- 流体排版:
--fs-*全部用clamp()。 - 8px 间距网格:
--space-1..11。 - :focus-visible:全局 2px outline + offset(2.4.7/2.4.11 ✓)。
- prefers-reduced-motion:全局守卫降级动画时长(2.3.3 ✓)。
- 键盘可达:flip-card 支持键盘/触摸/点击翻转,Esc 关下拉(2.1.1 ✓)。
- html lang:随路由语种切换
zh-CN/zh-HK/en(3.1.1 ✓)。 - landmark:
<main>语义标签。 - 动效克制:长周期低强度(mesh 40s、渐变文 14s),有注释记录"降低强度"。
<html lang>、hreflang、OG/Twitter、JSON-LD:SEO + 无障碍元数据完备。
⚠️ 差距与修复
| 差距 | 规范 | 状态 |
|---|---|---|
| 缺 skip-to-content 跳转链接 | WCAG 2.4.1 | 已修复(首次) |
.status-badge/.status-developing/.status-planned/.progress-glow 死 CSS(src 0 引用已复核) |
一致性 | 已清理(本次) |
| 触控目标:桌面端导航 ≈24px(达 AA 24px 下限) | WCAG 2.5.8 | 已加固(本次,navBase 加 py-1.5 → ~28px,安全过 AA) |
组件内 text-[Npx] 硬编码未走 --fs-* 令牌 |
Tokens 单源 | 已迁移(Header.tsx 4 处 text-[16px]→text-body;全 src 复核无 text-[15px] 散落,其余页面已用令牌) |
4. 本次落地(已执行并验证)
.sr-only+.skip-link工具类:新增于 global.css 末尾。- skip-to-content 链接:加在 SiteShell.tsx,
<main>加id="main-content";三语文案(跳到主要内容 / 跳到主要內容 / Skip to main content);默认隐藏、键盘 Tab 聚焦时滑入显现。 - 清理死 CSS:删除 global.css 中 0 引用的
.status-badge / .status-developing / .status-planned / .progress-glow / .progress-glow::after / @keyframes progressShine(删除前Select-String全 src 复核确认零引用)。 --fs-*令牌迁移:Header.tsx 4 处text-[16px]→text-body(走--fs-body=16px 令牌,1:1 视觉等价);保留text-[27px](品牌字标,无对应令牌)与text-[10px](▼ 装饰符,无对应令牌)。- 触控目标加固(WCAG 2.5.8):桌面端
navBase加py-1.5,链接触控目标由 ~24px(贴 AA 下限)提升至 ~28px,安全过 AA 24px;移动端mobileNavBase原有py-2.5(~36px)保持不变。 - 验证:dev server HMR 干净生效(global.css + Header.tsx 多次 hmr update,零报错)。
5. 可选后续(opt-in,未动,需你拍板优先级)
A(死 CSS 清理)、B(
--fs-*令牌迁移:Header 已完成,全 src 复核无其他text-[Npx]散落)、F(触控目标加固)均已在本次落地,从清单移除。
- C. 流体间距:把
--space-*升级为clamp()极端屏自适应(中风险,需逐页验证)。 - D. 容器查询:关键卡片组件改 container query(重构,中高风险)。
- E. OKLCH 色彩空间:派生色从
color-mix(in srgb)迁到in oklch(更符合人眼;中风险)。