J2.09.2list and table semantics设计研究

列表、表格需使用对应语义

别名: 列表语义 · 表格语义 · fake list fake table

概念解释

圆点排出来的不一定是列表,格子画出来的不一定是表。阅读器要的是「列表,五项」和按行、按列移动单元格时听到的表头。列表和表格必须用对应的语义节点:无序列表、有序列表、定义列表、带表头的数据表。div 加项目符号、flex 画成网格,看起来整齐,树上仍是一串平的块。

标题给人跳章节;列表和表给人另一套移动单位——项,以及单元格。两套单位不要混用,也不要用样式去冒充。

机制

列表语义会宣布项数、当前是第几项、嵌套层。用户按「下一个列表项」移动,而不是把每一行当独立段落听完再猜边界。表格语义提供二维移动:行、列、表头作为当前格的名称。没有这些节点,阅读器无法切进「列表模式」或「表格模式」,只能当普通文字流。一份四行三列的价目表若是 div 网格,听到的是十二段话,没有「这一列叫月费」的坐标。

项数和表头是认知脚手架。宣布「列表,七项」让人决定听还是跳过;表头让人在第 19 格仍知道自己在「库存」列。脚手架只能从语义来,不能从圆点和竖线来。

怎么研究

在阅读器里打开元素列表 / 转轮,分别数页面上的列表对象和表格对象,对照视觉上的列表和表。因变量:视觉列表数 vs 语义列表数、视觉表数 vs 语义表数;在真表上按单元格走 vs 在假表上线性听,找到「第三行第二列的值」的时间和错误。

自变量可以是同一份内容的两种实现:语义列表/表 vs 等视觉的 div。不要把「样式冒充结构」的一般机制在这里写开——这里只比较列表和表这两种对象有没有对应角色。

边界

一两个并列短句用逗号或分号写在段落里即可,不必为了「看起来像列表」强行套列表。布局用的网格(页眉三块、卡片排列)不是数据表,标成表会让人进入单元格导航却找不到表头。展示性的「表」若只是把几个数字并排,用列表或描述列表可能比假表更诚实。复杂图表的数据替代是长描述和等价数据表的问题,前提仍是:那张等价表必须是真表。

怎么落地

  • 一组并列的项(步骤、功能点、搜索结果)用列表标记;有先后用有序列表,名值对用定义列表。
  • 行列都有意义的数据用表,第一行或第一列用表头,并让表头成为单元格的名称,而不是只把字加粗。
  • 不要用无语义容器加圆点、加边框去画这两类对象。
  • 验证:转轮或元素列表里应出现与视觉清单、视觉表数量相符的列表和表。进入表后,移动一格应听到行/列头。假列表听不到项数、假表不能按格走,就是语义没对应上。

延伸

  • 同组J2.09.1 标题层级用于快速跳转 · J2.09.3 用样式模拟结构会丢失语义
  • 相邻J5.02 无障碍树与角色 · J2.12 复杂图形的长描述
  • 站内检索list semantics · table headers · data table role

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/J2.09.2