审校 | 重楼
你曾经在 HTML 语言中使用过某个属性,却并未完全明白它的用途吗?你并非个例!随着时间的推移,我深入探究了众多HTML属性背后的含义,特别是那些对于可访问性极为关键的属性。
在这个深入的教程里,我将剖析一些增强可访问性的关键HTML属性,阐释它们的作用以及何时有效地运用它们。
先决条件
要学习本教程,你应该对HTML具备基本的认识,并且对Javascript知识稍有了解。
目录
- 什么是ARIA属性?
- alt属性
- aria-label属性
- 使用 aria-label的最佳实践
- aria-labelledby属性
- aria-label和aria-labelledby有什么不同
- 使用 aria-labelledby的最佳实践
- aria-describedby属性
- 使用 aria-describedby 的最佳实践
- role属性
- 常见的 role 值
- 使用 role 属性的最佳实践
- aria-controls属性
- 使用 aria-controls 的最佳实践
- aria-selected属性
- 使用 aria-selected 的最佳实践
- tabindex属性
- tabindex可能的值
- 使用tabindex的最佳实践
- title属性
- title 的可访问性问题
- 使用 title 属性的最佳实践
- 在 label 中使用 for 属性
- 使用 for 属性的最佳实践
- scope 属性
- 可能的 scope 值
- 使用 scope 的最佳实践
- aria-hidden 属性
- 使用 aria-hidden 的最佳实践
- inert属性
- 使用 inert 的最佳实践
- aria-live 属性
- aria-live 可能的值
- 使用 aria-live 的最佳实践
- aria-roledescription属性
- 使用aria-roledescription的最佳实践
- aria-atomic 属性
- 使用 aria-atomic 的最佳实践
- 结论
1.什么是ARIA属性?
本文中列出的大多数属性都是ARIA属性。ARIA,全称为Accessible Rich Internet Applications(可访问富互联网应用),是由W3C(万维网联盟)定义的一组属性,旨在提升网络应用的可访问性。
ARIA属性为辅助技术(如屏幕阅读器)提供额外信息。正确运营这些属性可以使复杂的网络应用对视觉、听觉或运动障碍人士更加友好。
使用ARIA的一个关键原则是:有时最好不要使用它。尽管这听起来可能有些矛盾,但你应该仅在必要时才使用ARIA属性。过度使用ARIA可能会干扰依赖辅助技术的用户体验。虽然视力正常的用户可能察觉不到任何问题,但ARIA的过度或不当使用可能会对可访问性产生负面影响。
2.alt属性
如果你已经在HTML中使用过图片,那么alt属性对你来说或许并不陌生。你使用它来提供替代文本,这些文本会在图片无法在屏幕上正确显示时予以呈现。
然而,alt属性最重要的用途在于可访问性。如果图片元素中缺失alt属性,那么屏幕阅读器可能会仅显示图片文件的名称或图片的URL,而不是解释它所展示的内容。这可能会对用户造成困扰,而我们不希望发生这种情况。
alt属性中的内容应该简洁明了,因为其主要目的是为那些无法看到图片的人简要地描述图片。这涵盖了依赖屏幕阅读器的用户、搜索引擎以及因网络连接缓慢致使图片可能无法加载的用户。如果alt文本过长,可能会包含不必要的细节,这些细节不会增加用户对图片内容的理解。
alt属性与图片说明有所不同。图片说明是可见的,可以提供更多关于图片的上下文或额外信息。将图片说明用作alt文本可能会使其过长且冗余。
如果图片纯粹是装饰性的,那么alt属性应当为空。若图片有一个空的alt属性,辅助工具将会跳过它。这对于帮助用户专注于内容而不被不必要的信息分散注意力非常重要。
下面是一个如何使用alt属性的例子:
Lions are remarkable for their powerful roars,
which can be heard up to five miles away.
These roars are used to communicate with other
members of the pride, as well as to ward off rival lions and intruders.
Although lions are often associated with the African savannah,
a small population of Asiatic lions still exists in India's Gir Forest,
making them one of the world's most endangered big cats.
3.aria-label属性
aria-label属性用于为可能没有可见文本的元素提供一个可访问的名称。一个常见的例子是包含图像或 SVG 的按钮。
很多元素都有一个可访问的名称——可访问的名称是元素内部的内容。在这个例子中,的可访问名称是“Frequently Asked Questions”。
包括使用辅助技术的人员在内的每个人,都能清楚地理解上面这个例子的意思,因为它包含了可见的内容。
但在下面的例子中,倘若按钮没有aria-label,依赖屏幕阅读器的用户或许会错过按钮中的内容。这是因为按钮中的内容是一个SVG格式(Scalable Vector Graphics:可缩放矢量图),而SVG不包含任何可见的内容:
不要过度使用aria-label。并非所有内容都需要aria-label——例如,如果你有一个包含带有alt的图像的按钮,或者带有title的 SVG,那么这些属性就充当了该元素的可访问名称。
你应该谨慎且适当地使用aria-label。过度使用该属性可能会导致几个问题:
- aria-label的内容对视力正常的用户不可见。如果有认知障碍的用户使用屏幕阅读器来获取支持时,他们可能不理解为什么听到的信息与在屏幕上看到的不同。
- 在大型代码库中广泛使用aria-label会使 HTML 更难维护。你可能难以跟踪标签的来源,特别是如果它们是通过编程方式设置的或在多个地方设置的。
使用aria-label的最佳实践
- 只要有可能,就用可见文本标签。它们更易于理解和维护,并且能够为所有用户提供一致的体验。
- 倘若页面上已经存在一个可见的标签,请使用 aria-labelledby 将元素与现有文本关联起来,而非使用 aria-label 创建一个新标签(我们稍后会探讨这一点)。
- 如果你使用 aria-label,请让文本保持简短且切中要害,并用最少的词汇来描述元素的目的。
4.aria-labelledby属性
aria-labelledby属性用于将一个元素和另一个元素相关联,后者充当前者的标签。它能够把目标元素与页面上的一个或多个其他元素相连接,这些元素中包含的文本将作为目标元素的标签来使用。
你能够在已经存在可见的文本标签,或者标签需要由多个文本元素构成时运用此属性。
例如,你能够在
About Us
We are a company dedicated to providing excellent service...
Our Services
We offer a wide range of services including...
有时,你可能想将多个文本片段组合成标签,可以通过在aria-labelledby属性中列出多个ID来实现这一点:
Are you sure you want to delete this item?
aria-labelledby与aria-label在目的上是相似的,都是为了提供一个可访问的元素。
aria-label和aria-labelledby有什么不同
aria-label属性直接为元素指定一串文本作为标签。这段文本在屏幕上不可见,但会被屏幕阅读器等辅助技术朗读出来。它通常用于那些没有可见文本标签的情况。
而aria-labelledby属性则通过引用页面上已存在的一个或多个元素(利用这些元素的ID属性)来作为目标元素的标签。标签文本对所有用户都是可见的,因为它们本身就是页面上其他元素内容的一部分。
使用aria-labelledby的最佳实践
- 当页面上已经存在可以作为标签的文本时,应优先使用aria-labelledby而不是aria-label。这样做可以减少冗余,并确保视力正常的用户和屏幕阅读器用户都能看到相同的内容。
- aria-labelledby引用的ID属性在页面上必须是唯一的,并且必须正确地指向现有的元素。如果ID缺失或错误,标签将不会起作用,从而导致可访问性问题。
- 当组合多个标签时,请确保组合后的标签在一起阅读时是有意义的。aria-labelledby中ID的顺序很重要,因为屏幕阅读器会按照列出的顺序来朗读标签。
- 与aria-label一样,应避免在可以使用更简单方法(如直接使用可见的label元素)的情况下过度使用aria-labelledby。这有助于保持代码的可维护性,并减少用户的认知负担。
5.aria-describedby属性
aria-describedby属性用于将一个元素与一个或多个能为其提供额外描述性信息的元素相关联。aria-describedby属性用于为元素提供额外的上下文或说明。
与旨在提供标签或名称的aria-labelledby不同,aria-describedby旨在为用户提供有关元素的更为详细的信息或上下文,通常是对他们从标签中已经了解到的内容的补充。
Enter your full name.
当在同一个元素上同时运用了 aria-labelledby 和 aria-describedby 属性时,屏幕阅读器会首先声明由 aria-labelledby 指定的标签,接着声明元素的角色(例如,“按钮”),最后声明由 aria-describedby 所提供的描述。
使用aria-describedby的最佳实践
- 当你需要为用户提供超出标签范畴的额外上下文或说明时,应当使用“aria-describedby”属性。这对于表单、复杂控件或者任何可能需要加以澄清的元素而言特别有用。
- 尽管“aria-describedby”旨在提供更为详尽的描述,但是应当避免使用过长的文本。要保持描述的内容专注于用户与元素有效交互所需要了解的信息。
- 和“aria-labelledby”相同,请确保“aria-describedby”所引用的元素具备唯一且相关的“id”属性。这些元素的内容应当直接与它们所描述的元素相关联。
6.role属性
role属性用于指定元素的角色。你可以使用它来覆盖语义元素的默认角色,从而帮助辅助技术理解元素应该如何被解释或与之交互。
当你使用非语义元素(如 地标区域的角色: 下面的这个示例仅用于演示目的——在可能的情况下,你应该使用正确的语义元素: Here is some main content... © 2024 My Website 小部件和交互式元素的角色: Are you sure you want to proceed? 选项卡面板的示例: This is the content of the first tab. This is the content of the second tab. This is the content of the third tab. aria-controls 属性会通知屏幕阅读器该元素由另一个元素所控制或者受其影响。它通常被用于声明一个组件(如按钮或者选项卡)控制或者与页面的另一部分(如面板或者菜单)进行交互。它也应用于交互式组件,例如选项卡、折叠面板(accordions)和滑块,以描述当用户与组件进行交互时,页面的哪些部分会受到影响。 例如,你能够在选项卡按钮上使用aria-controls来声明每个按钮控制所对应的面板: aria-selected 属性用于声明一组可选项目当中某个元素的当前选择状态。可选项目可以是菜单中的选项、选项卡面板中的选项,或列表框中的项目。 以下是一个在列表框中选择状态的一个示例,选项1中的 aria-selected ="true"表示选项1目前被选中: tabindex 属性用于把控元素的键盘导航。你能够用它为非交互式元素(例如 div、p 或者 span)激活焦点,或者为交互式元素(例如 button、a、input)禁用焦点。此外,你还能够使用 tabindex 来控制页面上的焦点顺序。 正值:具有正值的元素将变得可聚焦,并且会按照它们的tabindex值被纳入到tab键的导航顺序中。tabindex值较小的元素会先于tabindex值较大的元素获得焦点。 具有相同tabindex值的元素将依照它们在文档中出现的顺序进行导航。 注意:使用正值的tabindex或许会致使tab键的导航顺序变得混乱且不符合直觉。通常,对于应当按照自然顺序接收焦点的元素,使用tabindex="0"是更优的选择。 零值:你可以使用此选项来让一个元素变得可聚焦,并将其按照在文档中的位置自然地纳入到tab键的导航顺序中。这对于让那些通常不可聚焦的元素(如 负值:在 tabindex 属性中使用负值,目的是将元素从 Tab 键的导航顺序里移除,这表示用户无法通过 Tab 键直接聚焦到该元素上。然而,这并不代表该元素完全不可聚焦;它依旧能够通过编程的方式(例如,使用 JavaScript)来接收焦点。这种设置对于那些默认情况下不应被聚焦,但在某些特定条件下可能需要被聚焦的元素尤其有用。 在HTML中,title属性用于提供关于元素的附加信息。当用户将鼠标悬停在包含的元素上时,属性中的内容会以工具提示的形式显示。它可以应用于大多数HTML元素,包括链接、图片和表单字段。 你可以使用title属性来提供元素内容的简要解释或描述。例如,你可以在使用<abbr>标签时,通过它来声明缩略语或首字母缩略词的含义。 属性虽然具有一定的实用价值,但也存在一些可访问性问题: 当在声明该标签。当正确使用for属性时,点击标签会使对应的输入获得焦点。 for属性的值应该与它所关联的输入的id相匹配: 在HTML表格中,scope属性用于定义 scope属性可以应用于 “aria-hidden” 属性被设计用来在辅助技术(如屏幕阅读器)中控制元素的“可访问性”状态,即便这些元素在视觉呈现上依然对用户可见。通过应用此属性,开发者可以使用它来隐藏纯粹的装饰性元素,如图标或图像,这些元素不会为内容添加有意义的信息。这有助于防止屏幕阅读器读取不必要的信息。 你还可以使用aria-hidden来隐藏已经声明过的内容,以防止屏幕阅读器重复声明相同的信息。对于可以打开和关闭的内容(如模态窗口或可扩展部分),你可以使用aria-hidden来隐藏非活动状态的内容,确保屏幕阅读器仅与可见的活动内容交互。 你也可以在创建复杂的控件(如轮播图或选项卡式界面)时使用 “aria-hidden”,以对辅助技术隐藏当前未激活的面板或幻灯片,从而引导辅助技术(如屏幕阅读器)将注意力集中在控件的激活部分上。 inert属性阻止元素及其所有后代元素成为可聚焦、可交互的,或者被辅助技术(如屏幕阅读器)感知。当一个元素具有 inert属性时,它无法接受焦点、被点击或以任何方式与之交互。同时,它也会被辅助技术隐藏。 与仅影响可访问性的aria-hidden不同,inert适用于所有用户交互。inert属性可用于禁用页面上暂时不相关的部分,例如在表单验证错误期间、加载数据时,或者当某个部分被隐藏但仍保留在DOM中时。它还可用于复杂的用户界面,如多步骤表单或向导,以确保用户仅与当前步骤或部分进行交互。 然而,inert最常见的用途是在模态窗口中,此时你希望防止用户在模态窗口打开时与背景内容交互。 以下是一个示例,当模态窗口打开时,inert属性被添加到主要内容上,使其变为非交互式的,并从屏幕阅读器中隐藏。当模态窗口关闭时,inert属性被移除,主要内容再次变为可交互的。 This is the main content of the page. It will be inactive when the modal is open. This is the content inside the modal. 你可以使用aria-live属性来通知辅助技术关于网页上动态内容的变化。当aria-live应用于某个元素时,如果该元素内的内容被更新,屏幕阅读器会收到提醒,从而确保用户在页面初次加载后能够得知发生的重要变化。 此属性对于动态更新的内容非常有用,如通知、警报、聊天消息或股票价格等。它确保了用户能够意识到那些可能未被注意到的变化。 aria-live属性主要有三个值:off、polite和assertive: 以下是一个示例,其中每条新消息都被添加到具有aria-live="polite"属性的#messages容器中。屏幕阅读器将在用户完成当前活动后宣布新消息。 在下面的示例中,股票价格的更新被放置在一个具有aria-live="assertive"属性的容器中。 你可以使用aria-roledescription为元素的角色提供人类可读、本地化的描述。它覆盖屏幕阅读器的隐式或显式role值,并允许开发人员为复杂或非传统的用户界面组件创建更直观和上下文特定的描述,这些组件可能没有标准的角色名称。 你可以借助它更清晰地阐释元素的用途或者功能。 在下面的示例当中,屏幕阅读器会将其声明为“书签按钮”,而非仅仅是“按钮”。 你还可以使用它来支持国际化,例如提供不同语言的角色描述。 你可以使用 aria-atomic 属性来控制辅助技术如何宣布对元素的更新。当 aria-atomic 设置为 true 时,它表示当元素内发生更改时,应将元素的整个内容视为一个单元,并由屏幕阅读器完整宣布(而不是仅宣布更改的部分)。 如果对元素部分的更新可能会使整体上下文不清晰,aria-atomic 会提供帮助,提供元素内容的完整公告,让用户全面了解上下文。 它通常与 aria-live 结合使用。aria-live 决定如何宣布更新(礼貌或自信),而 aria-atomic 控制是读取整个内容还是仅读取更改。 了解和有效使用HTML属性以提高可访问性对于创建包容性的网络体验至关重要。通过了解并适当使用这些属性,你可以确保你的应用程序为所有访问者提供出色的用户体验。 非常感谢你的阅读,我希望本指南能帮助你创建更易于访问的 Web 内容。 刘涛,51CTO社区编辑,某大型央企系统上线检测管控负责人。 原文How to Use HTML Attributes to Make Your Websites and Apps More Accessible,作者:Elizabeth Lola 免责声明: ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。 ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341 193.9 KB下载数265 191.63 KB下载数245 143.91 KB下载数1148 183.71 KB下载数642 644.84 KB下载数2756常见的role值
Welcome to My Website
Confirmation
Content for Tab 1
Content for Tab 2
Content for Tab 3
使用role属性的最佳实践
7.aria-controls属性
使用aria-controls的最佳实践
8.aria-selected属性
使用aria-selected的最佳实践
9.tabindex属性
tabindex可能的值
使用tabindex的最佳实践
10.title属性
WWW
title的可访问性问题
使用title属性的最佳实践
11.在label标签中使用for属性
使用for属性的最佳实践
12.scope属性
(表格头部)与其所描述的单元格之间的关系。这个属性对于可访问性尤为重要,因为它帮助屏幕阅读器和其他辅助技术理解表格的结构,并向用户传达正确的信息。 (表格头部)元素,以指定该头部是应用于一行、一列,还是一组行或列。 可能的scope值
元素是行的。在下面的例子中,scope="row"用于每行的第一个 元素,表明该适用于整行。
Product A
$1000
$1200
$1100
Product B
$900
$950
$1000
元素是列的。
Name
Age
Occupation
Jane
30
Engineer
Tobe
25
Designer
元素是一组行的。在下面的例子中,“Marketing Department”和“Sales Department”这两行具有scope="rowgroup"属性,以声明它们作为后续行组的。
Department
Employee Name
Position
Salary
Marketing Department
Amari Pere
Marketing Manager
$75,000
Uyati Hope
SEO Specialist
$65,000
Sales Department
Timini Prosper
Sales Manager
$80,000
Delilu Pink
Account Executive
$70,000
元素是一组列的。在下面的例子中,scope="colgroup" 用于声明第一行适用于多组列(Q1 和 Q2),而scope="col"和scope="row"分别用于单个列和行。
Region
Q1
Q2
Sales
Profit
Sales
Profit
North
$2000
$400
$2500
$500
South
$1500
$300
$1800
$350
使用scope的最佳实践
13.aria-hidden属性
使用aria-hidden的最佳实践
14.inert属性
Modal Title
使用inert的最佳实践
15.aria-live属性
aria-live可能的值
使用aria-live的最佳实践
16.aria-roledescription属性
使用aria-roledescription的最佳实践
17.aria-atomic属性
使用aria-atomic的最佳实践
结论
资源
译者介绍
软考中级精品资料免费领
相关文章
发现更多好内容猜你喜欢
AI推送时光机