我的网页上有一张桌子。它有列标题和行标题。在每个单元格中都有一个复选框。无法为所有复选框提供可视标签,因此我使用“咏叹调”标签提供标签。属性。 当我使用表格快捷键(Alt + Ctrl +箭头键)导航时,屏幕阅读器会发布行标题,列标题和“aria-label”标签。文本。 例如,未选中“操作1”复选框,为所有事件列2'选择操作1,这是多余的。
因此,如果我删除两个表格标题,屏幕阅读器将仅宣布“aria-label'文本,这是有意义的,足以确定复选框的目的。但根据WCAG准则(1.3.1信息和关系),表必须具有与表数据相关联的标题。
所以这是我的问题:
如果我删除表格标题 - 它会违反WCAG合规吗?屏幕阅读器用户与桌面的交互是什么?他们是否总是需要导航标题?屏幕阅读器用户是否能够通过听到咏叹调标签来完成桌面活动。仅限文字?。
请参阅代码段:
<table>
<tr>
<th scope="col" width="40%">Events</th>
<th scope="col" align="left">Action 1</th>
<th scope="col" align="left">Action 2</th>
<th scope="col" align="left">Action 3</th>
</tr>
<tr>
<th scope="row">Select All</th>
<td><input type="checkbox" name="Action11" id="Action11" aria-label="Select action 1 for all event" /></td>
<td><input type="checkbox" name="Action12" id="Action12" aria-label="Select action 2 for all event" /></td>
<td><input type="checkbox" name="Action13" id="Action13" aria-label="Select action 3 for all event" /></td>
</tr>
<tr>
<th scope="row">Event 1</th>
<td><input type="checkbox" name="Action21" id="action21" aria-label="Select action 1 for event 1" /></td>
<td><input type="checkbox" name="Action22" id="action22" aria-label="Select action 2 for event 1" /></td>
<td><input type="checkbox" name="Action23" id="Action23" aria-label="Select action 3 for event 1" /></td>
</tr>
<tr>
<th scope="row">Event 2</th>
<td><input type="checkbox" name="Action31" id="action31" aria-label="Select action 1 for event 2" /></td>
<td><input type="checkbox" name="Action32" id="action32" aria-label="Select action 2 for event 2" /></td>
<td><input type="checkbox" name="Action33" id="Action33" aria-label="Select action 3 for event 2" /></td>
</tr>
</table>
提前致谢!
答案 0 :(得分:2)
保留表格标题。当导航为表格(CTRL + ALT +箭头)时,典型的屏幕阅读器行为是仅在到达新行或列时宣布标题,这是为了防止不必要的重复。但是,某些事情(例如通知行号和列号)可以由用户自定义。在这里使用aria-label
稍微开始通过强制重复发言来搞乱这些偏好。
而是使用aria-labelledby
将行标题和列标题与每个复选框相关联,如下所示:
<table>
<tr>
<th scope="col" width="40%">Events</th>
<th id="a1" scope="col" align="left">Action 1</th>
<th id="a2" scope="col" align="left">Action 2</th>
<th id="a3" scope="col" align="left">Action 3</th>
</tr>
<tr>
<th id="sa" scope="row">Select All</th>
<td><input type="checkbox" name="Action11" id="Action11" aria-labelledby="sa a1" /></td>
<td><input type="checkbox" name="Action12" id="Action12" aria-labelledby="sa a2" /></td>
<td><input type="checkbox" name="Action13" id="Action13" aria-labelledby="sa a3" /></td>
</tr>
<tr>
<th id="e1" scope="row">Event 1</th>
<td><input type="checkbox" name="Action21" id="action21" aria-labelledby="e1 a1" /></td>
<td><input type="checkbox" name="Action22" id="action22" aria-labelledby="e1 a2" /></td>
<td><input type="checkbox" name="Action23" id="Action23" aria-labelledby="e1 a3" /></td>
</tr>
<tr>
<th id="e2" scope="row">Event 2</th>
<td><input type="checkbox" name="Action31" id="action31" aria-labelledby="e2 a1" /></td>
<td><input type="checkbox" name="Action32" id="action32" aria-labelledby="e2 a2" /></td>
<td><input type="checkbox" name="Action33" id="Action33" aria-labelledby="e2 a3" /></td>
</tr>
</table>
答案 1 :(得分:0)
如果我删除表格标题 - 是否会违反WCAG合规性?
如果您认为自己没有显示表格数据并使用table
标记进行布局,WCAG允许您对布局表使用table
标记..(as long as it can be linearized)
恕我直言,你所展示的是一个包含3个动作的事件列表。您可能会认为它不是数据table
。
在你的情况下,问题是,我没有看到如何通过删除表格标题和没有视觉label
的复选框,你可以帮助没有屏幕阅读器的人知道复选框的意图。 aria-label
对于不使用屏幕阅读器的人没用。 WCAG需要视觉说明。
为清晰起见编辑:
WCAG主要关注数据表(需要标题),但不禁止布局表(禁止标题)。这里的所有问题都是要了解您的表是否真的是数据表或布局表。
例如,在这里,您可以使用ul
列表:
Events
<ul>
<li>Event 1
<input type="checkbox" title="Action1" aria-label="Action1" />
<input type="checkbox" title="Action2" aria-label="Action2" />
<input type="checkbox" title="Action3" aria-label="Action3" />
</li>
<li>Event 2
<input type="checkbox" title="Action1" aria-label="Action1" />
<input type="checkbox" title="Action2" aria-label="Action2" />
<input type="checkbox" title="Action3" aria-label="Action3" />
</li>
</ul>
这使我认为您的表格不是数据表,并且您只使用table
标记进行垂直对齐设计。
这是非常概念性的
编辑2:ul
vs td
的替代使用(这只是为了说明你并没有真正使用数据表)并没有解决可见标签的问题(同样,奇怪的是,这不是WCAG的要求。
我的观点是复选框旁边的可见标签是最好的。如果不能,您有两种选择:
答案 2 :(得分:0)
我同意亚当。此表似乎用于布局而不是用于显示结构化表格数据。
布局表没有问题,但你不应该使用表格标题&lt; th&gt;元素(使用&lt; td&gt;代替),并删除所有的aria标记,以避免混淆屏幕阅读器用户。使用标准HTML表单标签而不是aria-labelledby属性。
无论任何自动化测试工具可能告诉您什么,放置额外的数据表标记(即表头,aria标记)实际上会导致不易访问。
如果您有兴趣了解有关此主题的更多信息,WebAIM对布局表与数据表有很好的解释。