R3.01.2complete semantics for fake controls设计

用通用容器模拟控件需补全全部语义

别名: 假控件补全语义 · 通用容器冒充控件 · reconstruct native semantics

概念解释

外观或动效逼得必须放弃平台控件、改用通用容器(divspan、无语义的 View)去「画」一个开关、菜单或标签页时,平台控件附带的那一整包行为都不会自动出现。模拟控件要把缺的全部补上,不能只补鼠标能点的那一层。少补任何一块,鼠标用户以为控件是真的,键盘和读屏用户碰到的是一块静态盒子。

「全部」指这个原生控件在辅助技术和键盘下会做的事:能被找到、能被聚焦、能被正确的键激活、禁用时不可操作、在所属的控件名单里出现。这里要的是补齐,不是另写一套新的控件理论。

机制

原生按钮把可聚焦、键激活、禁用、表单参与、被列入按钮清单绑在同一个元素类型上。通用容器只复制了像素。点按可以另绑,但绑定是一件一件加的:加了点击没加键盘,鼠标通、Tab 不通;加了键盘没让读屏认出这是控件,听觉通道里它仍是一段文字;加了识别没处理禁用,视觉上灰了,辅助技术仍当它可按。

残缺的补丁会制造分裂的界面:一条路径成功,其余路径失败,而且失败不容易在视觉走查里被看见。补全的参照物永远是那个被放弃的原生控件在辅助通道里的完整行为,不是「再加一条 ARIA 也许够」。每少一项,就有一类用户会在这一步掉下去。

边界

不是控件的装饰容器(分割、卡片底、插画框)不该被补成控件,补全会变成错误的可交互宣告。通用容器只是把原生控件包一层、里面已经有真按钮时,外层再补一套语义会重复宣告、重复聚焦,应拆掉外层伪装而不是叠一层。部分平台对自定义控件的完整复刻成本极高(复杂的组合框、电子表格单元格),这时更合理的是退回原生或改设计,而不是宣称「已经加了角色」。无法补全键盘激活的控件,等于还没做成控件,不能靠「看起来能点」过关。

怎么落地

  • 每做一个自定义控件,对照被它替换的原生控件,列出辅助通道和键盘通道上的行为清单,缺项写成实现任务,不准只交付外观。
  • 禁止「先可点、语义以后补」进入主干;残缺补丁比没有控件更难发现。
  • 禁用、只读、加载中这些非默认态一并列入清单,不要只补默认可点态。
  • 验证:键盘走完该控件的开、关、选、退出;读屏宣布它的类型并出现在对应名单里;禁用时键盘不能激活。任何一项失败,就还是一只假控件。

延伸

  • 同组R3.01.1 语义元素自带无障碍行为 · R3.01.3 结构顺序决定辅助技术的遍历顺序
  • 相邻J2.09 语义结构 · R3.09 语义化结构与可访问性实现
  • 站内检索complete semantics · custom control accessibility · generic container as widget

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/R3.01.2