SVG 中的可访问图表

Posted

技术标签:

【中文标题】SVG 中的可访问图表【英文标题】:Accessible diagram in SVG 【发布时间】:2022-01-19 05:48:48 【问题描述】:

您将如何改进 SVG 中图表的可访问性

<svg class="chart" viewBox="0 0 420 150" aria-labelledby="desc" >
  <desc id="desc">Ein Diagramm</desc>

  <g class="bar" tabindex="0" aria-describedby="bar1info">
    <rect   />
    <text id="bar1info" x="45" y="9.5">4 apples</text>
  </g>
</svg>

aria-attribute 是否足以将 rect 与其图例联系起来?有必要吗?

条形图/图表应该是可标签的还是应该避免使用tabindex="0"

【问题讨论】:

【参考方案1】:

关于这个主题有很好的网络文章。包括以下内容:

Accessible SVGs - CSS Tricks Accessible SVGs: Perfect Patterns For Screen Reader Users - Smashing Magazine

【讨论】:

添加一个角色="listitem" 似乎不错。你会保留tabindexaria-describedby 吗?【参考方案2】:

aria-attribute 是否足以将 rect 与其图例联系起来?有必要吗?

在这种情况下没有必要,具有标签的分组没有任何用途,因为文本元素将在本机公开。

条形图/图表应该是可标签的还是应该避免使用 tabindex="0"?

如果这是静态内容,那么 no 作为项目只有在它们以某种方式交互时才应该是可聚焦的。

屏幕阅读器用户可以在图表中导航,如果他们不希望它是可聚焦的。

复杂的 SVG 和图形

您似乎正在根据提供的代码制作某种形式的条形图。

通常,对于复杂的 SVG、图形等,您最好的选择是对屏幕阅读器隐藏 SVG 本身并在表格中提供数据。

您可以在 SVG 上使用 aria-hidden="true" 将其从可访问性树中删除(focusable="false" 仅适用于 IE),或者如果将其作为外部图像包含,则将 alt 属性设置为 ""

<svg aria-hidden="true" focusable="false"></svg>

<!-- or if external -->

<img src="mysvg.svg" >

然后我们可以在页面中添加一个表格,其中包含图表中使用的数据。

如果您的设计允许表格可见,那会更好,但在很多情况下这是不可能的,因此我们可以使用 visually hidden CSS class 直观地隐藏它。

示例

.visually-hidden  
    border: 0;
    padding: 0;
    margin: 0;
    position: absolute !important;
    height: 1px; 
    width: 1px;
    overflow: hidden;
    clip: rect(1px 1px 1px 1px); /* IE6, IE7 - a 0 height clip, off to the bottom right of the visible 1px box */
    clip: rect(1px, 1px, 1px, 1px); /*maybe deprecated but we need to support legacy browsers */
    clip-path: inset(50%); /*modern browsers, clip-path works inwards from each corner*/
    white-space: nowrap; /* added line to stop words getting smushed together (as they go onto seperate lines and some screen readers do not understand line feeds as a space */
<svg class="chart" viewBox="0 0 420 150" aria-hidden="true" focusable="false">
  <desc id="desc">Ein Diagramm</desc>
  <g class="bar">
    <rect   />
    <text x="45" y="9.5">4 apples</text>
  </g>
</svg>

<table class="visually-hidden">
  <tr>
    <th>Item</th>
    <th>Quantity</th>
  </tr>
  <tr>
    <td>Apples</td>
    <td>4</td>
  </tr>
</table>

【讨论】:

以上是关于SVG 中的可访问图表的主要内容,如果未能解决你的问题,请参考以下文章

通过单元格中的可访问性标识符访问 UIButton

有没有办法使用 react-native-svg 访问剪辑的 svg 图像以保存回设备中的 react-native

使用 XCTestCases 类中的可访问性标识符访问 NavigationLink - SwiftUI

UIScrollView 中的可访问性问题

HTML - 图标和 apple-touch-icon 中的可访问性

限制访问报告中图表中的列数