播报顺序由结构顺序决定
别名: 源顺序决定播报 · AT 遍历顺序 · programmatic order
概念解释
读屏念出来的下一句,是结构树里的下一个节点,不是眼睛在画面上扫到的下一块。播报顺序由结构顺序决定:文档源、无障碍树里节点出现的先后,就是辅助技术遍历的先后。视觉排版可以把按钮画到右下角,只要它在树里排在页脚链接后面,听到的就是「先页脚、后按钮」。
这是一条对作者的判据,不是对阅读器内部如何缓存页面的说明。树排对了,播报才可能对;树排错了,再精致的视觉动线也救不了那条耳朵听到的序列。
机制
辅助技术不消费绘制结果,消费的是结构投影。作者写入源里的先后,经无障碍树变成可遍历的序列。CSS 改的是绘制,一般不改这棵树,所以「看起来的下一件」和「听到的下一件」默认不是用同一份清单对过的。
人用读屏完成任务时,理解靠的是序列里的因果关系:先标签后字段、先说明后操作、先商品后购买。结构把这两端的次序写反,听到的故事就是反的——不是少听了一句,是因果被颠倒。键盘焦点顺序常常跟结构走,但焦点乱跳是另一条操作问题;这里锁定的是被念出来的阅读序列是否等于作者想让人理解的那条。
怎么研究
让读屏用户(或评估者开着 NVDA / JAWS / VoiceOver 的浏览模式)不看屏幕走完一篇内容,把听到的对象顺序记成名单。另请明眼人标出他们的视觉阅读顺序。两份名单的第一处分叉,就是结构没有承载那条阅读。自变量:源里节点的先后(不改视觉)。因变量:序列一致率、任务是否按错对象、用户是否报告「听起来在乱跳」。
不要把「虚拟缓冲区怎么建」当作要测的机制;要测的是作者交给结构的那份顺序,是否就是任务顺序。不同阅读器组合可以做稳健性复查,但判据本身跨组合成立。
边界
画布、地图、游戏对象本来就不是一份线性清单,结构顺序几乎没有「正确阅读」可言,需要另做空间探索策略。可视化里根本没进无障碍树的图形,结构顺序管不到。表格、列表一旦用了对应语义,内部会按行 / 项的规则走,不能再用「整页从上到下」去套。正的文档流已经按任务排好时,不必再发明第二套顺序。
怎么落地
- 先按「完成这件事的先后」写结构:标题和说明在操作之前,标签在字段之前,商品信息在购买之前。视觉位置用布局去放,不要靠在树里颠倒节点来迁就画面。
- 每个主要模板交出一份「应当被听到的顺序」名单,和源里的节点顺序对照,而不是和设计稿的左右对照。
- 验证:关掉显示器,只用浏览模式把主路径听完,把听到的名称按顺序记下来。拿去问没看过稿的人「这是在干什么」。若故事讲不通,或与你给明眼人讲的步骤相反,改的是树的先后,不是再画一条视觉箭头。