代码之家  ›  专栏  ›  技术社区  ›  D_N

我可以用javascript增强复杂表的可访问性吗?

  •  2
  • D_N  · 技术社区  · 6 年前

    一个网站有大量复杂的信息 tables with multi-level headers ,其简单版本为:

    table { border: 1px solid black; border-collapse:collapse; width: 100%; }
    td, th { border: 1px solid black; }
    th { background-color: lightgray; }
    <!-- simplified table -->
    <table>
      <thead>
        <tr><th></th><th>Col 1</th><th>Col 2</th></tr>
      </thead>
      <tbody>
        <tr><th>Row 1</th><td>Foo</td><td>Bar</td></tr>
        <tr><th colspan="3">Header for subregion</th></tr>
        <tr><th>Row 2</th><td>Foo</td><td>Bar</td></tr>
        <tr><th>Row 3</th><td>Foo</td><td>Bar</td></tr>
      </tbody>
    </table>

    由于各种原因,服务器端和手工编码解决方案已经过时。如果我使用的javascript应用了建议的WAI修复程序( "use id and headers attributes to associate header and data cells explicitly" )为了增强HTML,这会可靠地反映在用户在屏幕阅读器中实际获得的内容上吗?

    使用 ARIA Live Regions 似乎它会不必要地将它们更新为大量更改。所以,理想情况下,没有它能工作吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   slugolicious    6 年前

    简短的回答是“是”。一般来说,通过javascript应用的任何属性,无论是aria属性还是任何其他HTML属性,都将对屏幕阅读器可用。

    (*)我知道(至少)有一个例外, aria-live . 在浏览器和屏幕阅读器组合中,当加载页面时,该属性必须存在于元素上,以使其符合要求。你提到 咏叹调现场 在您的问题中,但该属性不会真正发挥作用,除非您正在对页面进行动态更新(例如,如果您的表头是根据某些用户操作进行更改的)。

    我本来打算显示一些示例代码,以根据代码片段显示所需的结果,但是您的示例有点混乱。您有一个跨越所有列的“子区域标题”。从视觉上看,它更像是表的标题/摘要,而不是列标题。你能澄清一下吗?表格标题应 编码为标题( <TH & GT; )

    是否要将“子区域的标题”读取为每个单元格的列标题?