Html “list”和“listitem”ARIA角色是否适合a<;表>;?

Html “list”和“listitem”ARIA角色是否适合a<;表>;?,html,accessibility,wai-aria,Html,Accessibility,Wai Aria,我想知道表示项目列表的表是否应该或者也可以用ARIA角色来修饰,或者表的语义是否足够 这是我正在研究的一个基本示例: <table role="list" aria-labelledby="caption"> <caption id="caption">Opening hours</caption> <tr role="listitem"><td>Sunday</td><td>10am - 8pm

我想知道表示项目列表的表是否应该或者也可以用ARIA角色来修饰,或者表的语义是否足够

这是我正在研究的一个基本示例:

<table role="list" aria-labelledby="caption">
    <caption id="caption">Opening hours</caption>
    <tr role="listitem"><td>Sunday</td><td>10am - 8pm</td></tr>
    <tr role="listitem"><td>Monday</td><td>10am - 8pm</td></tr>
    <tr role="listitem"><td>Friday</td><td>10am - 8pm</td></tr>
</table>

营业时间
星期日上午10时至晚上8时
星期一上午10时至晚上8时
星期五上午10时至晚上8时
我仍然对aria和html5语义的轻微重叠感到困惑

更新的示例

我现在正在考虑类似的事情

<table role="presentation">
    <caption id="oh-caption">Opening hours</caption>
    <tbody role="list" aria-describedby="oh-caption">
        <tr role="listitem">
            <td>...</td>
        <tr role="listitem">
            <td>...</td>
    </tbody>
</table>

营业时间
...
...

您显示的数据实际上是一个数据表,您应该使用适当的标记对其进行标记,以正确关联行标题。之所以可以将其作为数据表,是因为第二列中的数据与第一列中的数据关联,并且每列都包含相同类型的数据(如果是复杂的数据表,则需要扩展这些简单规则)


营业时间
星期日上午10时至晚上8时
星期一上午10时至晚上8时
星期五上午10时至晚上8时

您显示的数据实际上是一个数据表,您应该使用适当的标记对其进行标记,以正确关联行标题。之所以可以将其作为数据表,是因为第二列中的数据与第一列中的数据关联,并且每列都包含相同类型的数据(如果是复杂的数据表,则需要扩展这些简单规则)


营业时间
星期日上午10时至晚上8时
星期一上午10时至晚上8时
星期五上午10时至晚上8时

让我们回顾一下您的示例:

<table role="presentation">
  <caption id="oh-caption">Opening hours</caption>
  <tbody role="list" aria-describedby="oh-caption">
    <tr role="listitem">
        <td>...</td>
    <tr role="listitem">
        <td>...</td>
</tbody>

营业时间
...
...

首先[role=“presentation”]否定了隐含的“table”语义。这还包括其tbody/tr/…的隐式原生语义。。。后代,因为它们也将被删除。基本上这就是用户代理现在“看到的”:


营业时间
...
...
您不是在增强表的语义,而是在删除它们。在中阅读有关[role=“presentation”]的更多信息

下一步是[role=“list”]和[role=“listitem”],这将生成一组列表项:

<span>
  <span id="oh-caption">Opening hours</span>
  <ul aria-describedby="oh-caption">
    <li>
        <span>...</span>
    <li>
        <span>...</span>
  </ul>
</span>

营业时间
  • ...
  • ...
左边是aria descripeby=“oh caption”,它引用了#oh caption元素作为标签

屏幕阅读器现在将公布一个包含2项的列表,标签为“开放时间”。但是,由于简化了内容结构,您失去了该行标题(“周一”)与相关开放时间之间的联系。此外,用户不能只“读取”开放时间而不读取连接的天数,他可以通过从一个表单元格到另一个表单元格的垂直“跳跃”来读取语义表中的开放时间。(他可能已经知道你每周7天营业,只想知道你是否比晚上8点提前一天关门。)


因此,我个人不认为这种转换有什么好处,建议使用@unobf提供的语义标记。还要记住未来的变化。如果必须添加另一列,您会怎么做,因为它们在中午关闭,并希望在单独的列中显示上午和下午的开放时间?

让我们来回顾一下您的示例:

<table role="presentation">
  <caption id="oh-caption">Opening hours</caption>
  <tbody role="list" aria-describedby="oh-caption">
    <tr role="listitem">
        <td>...</td>
    <tr role="listitem">
        <td>...</td>
</tbody>

营业时间
...
...

首先[role=“presentation”]否定了隐含的“table”语义。这还包括其tbody/tr/…的隐式原生语义。。。后代,因为它们也将被删除。基本上这就是用户代理现在“看到的”:


营业时间
...
...
您不是在增强表的语义,而是在删除它们。在中阅读有关[role=“presentation”]的更多信息

下一步是[role=“list”]和[role=“listitem”],这将生成一组列表项:

<span>
  <span id="oh-caption">Opening hours</span>
  <ul aria-describedby="oh-caption">
    <li>
        <span>...</span>
    <li>
        <span>...</span>
  </ul>
</span>

营业时间
  • ...
  • ...
左边是aria descripeby=“oh caption”,它引用了#oh caption元素作为标签

屏幕阅读器现在将公布一个包含2项的列表,标签为“开放时间”。但是,由于简化了内容结构,您失去了该行标题(“周一”)与相关开放时间之间的联系。此外,用户不能只“读取”开放时间而不读取连接的天数,他可以通过从一个表单元格到另一个表单元格的垂直“跳跃”来读取语义表中的开放时间。(他可能已经知道你每周7天营业,只想知道你是否比晚上8点提前一天关门。)


因此,我个人不认为这种转换有什么好处,建议使用@unobf提供的语义标记。还要记住未来的变化。如果必须添加另一列,您会怎么做,因为它们在中午关闭,并希望在单独的列中显示上午和下午的开放时间?

是的,当然,这就是为什么我首先选择table元素而不是简单的UL。但我想重写这个表的语义,以传递这样的信息,即这实际上是餐厅的营业时间列表。这个示例中的标记非常完美(不要忘记使用th元素!)。残疾人可以获得所有必要的信息。为什么要添加信息,即包含开放时间的数据表也是一个列表?我认为这不会为用户增加任何价值。@chaenu是的,这正是我问题的要点:我是否在添加一些信息?:)问题在于,似乎“很难”找到这个问题的方形答案。元素一次只能有一个角色。如果添加角色属性,它将替换隐式角色。你成功了