html - 如何通过满足 Web 可访问性准则以正确的方式在 html 中添加图像
问题描述
我目前正在研究有关 HTML5 的网络可访问性指南。
关于图像,我目前正在 HTML 中添加图像,如下所示:
<!-- Normal Images -->
<img src="https://placeholder.pics/svg/300x300" title="Image Placeholder" alt="Image Placeholder" aria-labelledby="Image Placeholder" width="300" height="300">
<!-- Decorative images -->
<img src="https://placeholder.pics/svg/100x100" role="presentation" aria-hidden="true" alt="" width="100" height="100">
我的问题:
- 为普通图像同时
aria-lablleby
添加和alt
标签是一种好习惯吗?还是我应该采用更好的做法。 - 我需要在每个装饰图像中添加
role="presentation"
、aria-hidden="true"
和吗?alt=""
他们三个应该一起去吗?还是只有其中之一?(如果只有一两个,那么是哪一个?)
解决方案
aria-labelledby
为普通图像同时添加和alt
标签是一种好习惯吗?还是我应该采用更好的做法。
咏叹调-labelledby
不,实际上将和加aria-labelledby
在一起alt
会导致某些屏幕阅读器读取该名称两次。只需使用一个alt
属性,这就是它的用途,它具有最广泛的支持(100%)并且可以很好地完成工作。
还aria-labelledby
需要在 DOM 中至少有一个包含文本的元素,您可以通过 ID 引用它。您也可以拥有多个标签,仅供参考。它旨在用于无法使用语义 HTML 标记的其他元素,而不是真正用于图像(总是有例外,但它们很少见,这是一般指导)。
例如
<span id="ID1">Read First</span>
<span id="ID2">You can add a second label that will be read second</span>
<div aria-labelledby="ID1 ID2"></div>
标题属性
也不要使用title
属性,除非您打算使其与alt
属性相同。否则,鼠标用户将获得与屏幕阅读器用户不同的体验,因为title
大多数屏幕阅读器无法访问该属性。请参阅我给出的有关该属性的深入回答title
,以及如果您想使用它,如何滚动一个可访问的版本。
可访问的图像示例
所以你最终的、可访问的图像看起来像这样:-
<img src="https://placeholder.pics/svg/300x300" alt="Image Placeholder" width="300" height="300">
完全可访问且易于维护。
我是否需要在每个装饰图像中添加 role="presentation"、aria-hidden="true" 和 alt=""?他们三个应该一起去吗?还是只有其中之一?(如果只有一两个,那么是哪一个?)
alt 属性
您需要做的就是添加一个空alt
属性。注意我说的是空的而不是空的。例如alt=""
不只是alt
。用作 null 属性将alt
导致它被某些屏幕阅读器忽略,因此文件名将被读出。
角色="演示"
为了完整起见,您可以添加role="presentation"
,但据我所知,它不会添加任何额外的支持。
话虽如此,我个人将添加role="presentation"
到装饰图像中,因为我们的单元测试将标记任何空alt
属性,除非添加它。这是一个深思熟虑的决定,所以当我们运行测试时,我们不会一直检查相同的空alt
属性是否正确。
由于对空alt
属性的支持也达到了 99/100%,因此它也完全有效且仅可使用alt=""
.
咏叹调隐藏
您想要aria-hidden
在外部图像上使用的唯一地方(主要时间,总是有例外)是如果您要动态隐藏和显示它。一些屏幕阅读器监视 WAI-ARIA 更改比监视 DOM 更改更好。
aria-hidden 和内联 SVG
我建议在纯装饰性的内联 SVG 上添加 aria-hidden="true"
,role="presentation"
和focusable="false"
,因为 Internet Explorer 有时可以让它们集中注意力。
请注意,alt
无论如何您都不会在内联 SVG 上使用属性。
装饰图像示例
因此,您最终的装饰图像将是:-
<!--all image types loaded externally using `img` including SVGs-->
<img src="https://placeholder.pics/svg/100x100" alt="" width="100" height="100">
<!--exception for inline SVGs due to focus bug in IE-->
<svg aria-hidden="true" role="presentation" focusable="false">...</svg>
关于 WAI-ARIA 的最后说明
当没有语义方式时,WAI-ARIA 可以提供信息。
到处添加额外的 WAI-ARIA 实际上会使可访问性变得更糟。您应该始终从“是否有将信息提供给屏幕阅读器的本地方式”开始,如果有,则不需要或实际上不推荐使用 WAI-ARIA。
三思而后行
我提到了不使用alt
属性的内联 SVG ,而是希望将其<title>
用作 SVG 的一部分。阅读这篇关于可访问 SVG 的快速文章以获得快速概览。
推荐阅读
- asp.net - ScriptResource.axd(Html Extender)在谷歌浏览器中给出错误
- php - 如何 set_userdata 登录 codeigniter
- windows - 从子文件夹中删除早于特定日期的特定命名子文件夹
- pyqt - QTableview: How to add a blank row at the bottom and have it show delegates
- javascript - 样式模式下的highcharts列笔划
- mysql - Mysql触发器:OLD和NEW如何序列化为字符串?
- excel - 如果另一个在 vba 中的单元格范围内发生更改,则清除单元格内容
- javascript - Internet Explorer 错误 SCRIPT1014 无效字符`
- reactjs - React jsx - 在地图函数内进行条件渲染时出现意外令牌错误
- laravel - 在 Redis 中使用标签缓存键会降低性能