UI 样式与可访问性

July 5, 2026 · View on GitHub

最后更新:2026-04-15 | 覆盖源码:src/styles/src/store/uiStore.tssrc/shared/components/ui/src/app/components/header/src/app/components/settings/ 交叉引用:architecture.md

1. 关键入口

  • 语义 token:src/styles/index.css
  • 主题状态:src/store/uiStore.ts
  • 系统主题监听:src/app/hooks/useAppEffects.ts
  • 共享 UI 原语:src/shared/components/ui/*
  • 3D HUD / 画布主题辅助:src/shared/components/3d/LoadingHud.tsxsrc/shared/components/3d/scene/themeUtils.ts

2. 必须遵守

  • 使用语义色 token,不散落硬编码 #RRGGBB
  • 所有组件在 light + dark + prefers-contrast: more 下都应可读
  • 暗色界面使用 base / surface / elevated 层级,避免纯黑硬切
  • 状态表达不能只依赖颜色,补充图标、文案或形态差异
  • Focus 态必须可见,建议统一 ring-system-blue/30
  • 小字号文本避免低对比度颜色

2.1 控件复用边界

  • 基础交互控件统一从 src/shared/components/ui/ 引用:ButtonIconButtonCheckboxSwitchInputSelectPanelSelectSliderSegmentedControlDialogTooltipContextMenu
  • 面板组合控件统一从 src/shared/components/Panel/ 引用;面板内 overlay / toolbar 小按钮优先使用 IconButtonPanelOverlayToggleButton
  • Feature 内可以保留业务 adapter(如 property editor 的数值输入),但 adapter 只负责业务布局、密度和行为,不复制完整 hover / focus / disabled / token 状态样式
  • Header、toolbar、panel、menu、dialog 表面禁止新增 bg-whitetext-slate-*border-slate-* 等绕过语义 token 的 Tailwind 色值;使用 panel-bgelement-bgelement-hoverinput-bgborder-blackborder-strongtext-*

3. 高频语义色

Token用途
app-bg应用背景
panel-bg面板背景
element-bg元素背景
element-hover元素悬停
border-black边框
text-primary / text-secondary / text-tertiary文本层级
system-blue文本 / 图标强调
system-blue-solid主按钮底色
slider-accent线性高亮 / 进度条

4. 蓝色使用强约束

  • #0088FF 仅用于 slider-accent、进度线、细线型高亮
  • #0088FF 禁止用于:主按钮实底、小字号正文链接、大面积背景填充
  • 语义映射:线性高亮 -> slider-accent,主按钮 -> system-blue-solid,文本/图标强调 -> system-blue

5. 面板文案约束

  • 常驻工具面板默认使用短标签、短标题、短状态文案
  • 测量、吸附、显示开关等高频操作直接提供可选项,不重复解释
  • 只有首次门槛高、流程长或存在误操作成本的区域(如 toolbox、批量优化、复杂导入导出流程)才保留简短 helper copy
  • 若面板已能通过标题、字段名、占位文案和按钮标签表达清楚,删除冗余说明文本

6. 验收标准

  • Light / Dark / 高对比 三种场景均可读
  • Hover / Active / Focus 行为一致且可感知
  • 无新增分散硬编码色值