两栏布局用 order 把侧栏挪到左边,视觉上侧栏排在前面,键盘按 Tab 却先从右边正文的第一个链接开始走,读完再跳回侧栏,来回横跳。第一次遇到会往复杂处想,其实漏掉的多是个小前提。
.layout{display:flex}
.aside{order:-1} /* 视觉在前 朗读仍在后 */
/* 调整 DOM 顺序是唯一稳妥的解 */
order 只改绘制顺序,不改变 DOM 顺序,浏览器派发焦点仍然照着源码走。屏幕阅读器读的也是 DOM,视觉和朗读顺序就这样对不上,用户按 Tab 时像在两个区域之间折返。这一点先确认清楚,后面就不用反复试。
「视觉顺序与焦点顺序」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。
具体做法是,把需要在前面朗读的那一栏在 DOM 里往前挪,视觉位置交给网格或浮动去排;确实调整不了结构时,把可聚焦元素在源码里重新排序,不要用正数 tabindex 硬凑;改完只用键盘走一遍,记录每一步落点,和眼睛看到的顺序对一遍。
改完照着核一遍,只用 Tab 从头走到尾,焦点落点与视觉从上到下、从左到右的顺序完全一致。
