使用 HTML 地标角色提高可访问性

请务必确保所有用户都可以访问您的网站,包括使用屏幕阅读器等辅助技术的用户。 一种方法是使用 ARIA 地标角色来帮助屏幕阅读器用户轻松浏览您的网站。使用地标角色还有其他好处,例如改进 HTML 的语义并更轻松地设置网站样式。在这篇博文中,我们将通过一个简单的例子仔细研究这些地标以及如何在您的网站上使用它们。

什么是 HTML 地标角色?

地标在可访问的富 Internet 应用程序 (ARIA) 规范中定义为用户可能希望快速访问的页面区域。虽然没有说这是专门针对屏幕阅读器用户的,但他们是一组特别有用的用户。ARIA 规范中定义了八个具有里程碑意义的角色:

  • banner
  • navigation
  • search
  • main
  • region
  • complementary
  • form
  • contentinfo

为元素分配特定角色的一种方法是使用元素上的属性。例如:

<div class="banner" role="banner"></div>

虽然在某些情况下,您可能需要显式设置元素的角色,但某些 HTML 元素已经具有与之关联的角色。在这篇文章的其余部分,我们将遵循 ARIA 的第一条规则,如下所示:

如果可以将本机 HTML 元素或属性与已内置的语义和行为一起使用,而不是重新调整元素的用途并添加 ARIA角色、状态或属性以使其可访问,那么请这样做。

如何使用地标角色

为了说明 HTML 地标的工作原理,我们将构建一个基本的网页,该网页将改善屏幕阅读器用户的用户体验和页面的可访问性。我们不会编写任何 CSS,而是专注于编写干净的语义 HTML。

将以下 HTML 保存到名为的文件中,然后在您喜欢的浏览器中打开它。

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta http-equiv="X-UA-Compatible" content="ie=edge" /><title>Mr. Pineapple's Pizzeria</title></head><body></body>
</html>

您应该在浏览器选项卡中看到一个标题为“菠萝先生的比萨饼店”的空白页面。对于每个地标,我们将添加适当的 HTML 并检查可访问性树以查看其变化情况。

banner地标

横幅地标用于标识网页的标题,该标题通常包含网站的徽标、导航和搜索输入。当 <header> 元素未用作 <main> 元素或其他分段元素的子元素时,会为其分配角色。

让我们通过在我们的页面中添加一个横幅地标来看看它是什么样子的。

<body><header><a class="logo" href="/"><span class="visually-hidden">Mr. Pineapple's Pizzeria</span></a></header>
</body>

刷新页面并打开开发人员工具。根据您的浏览器,访问辅助功能树的方式会有所不同。您可以点击以下链接了解更多信息:

  • Firefox(火狐浏览器)
  • Chromium (Edge, Chrome, Arc)
  • 在 Safari 中,打开开发人员工具(称为 Web 检查器)。在“元素”选项卡中选择一个元素。在最右侧,选择“节点”选项卡,然后展开“辅助功能”部分

    从屏幕截图中可以看出,选中元素后,角色显示为 .我们有一个良好的开端!

注意:Firefox 开发者工具的辅助功能检查器不会显示该元素的适当角色。相反,它将所有这些元素的角色显示为“地标”。此问题已得到解决,并将在 Firefox 114 中登陆。如果您使用的是面向开发人员的 Firefox,则该问题已经得到解决。

navigation地标

地标用于标识一组链接,这些链接可帮助用户浏览网页或相关网页。这可以包括侧边栏导航、网站的主导航或页面页脚中的一组相关链接等内容。

如前所述,在页眉中找到的常见元素之一是网站的主要导航。让我们在页面中添加一个:

<nav aria-label="Primary"><ul><li><a aria-current="page" href="/">Home</a></li><li><a href="/menu">Our pizzas</a></li><li><a href="/contact">Get in touch</a></li></ul>
</nav>

在这里,我们使用 <nav> 元素元素,因为它隐式具有角色。由于一个页面可以有多个导航元素,因此唯一地标识每个地标非常重要。为此,我们使用该属性,并将导航地标命名为“Primary”。

注意当屏幕阅读器描述上述导航地标时,它会显示“主要导航”。这就是值中不包含“导航”一词的原因。

如果检查该元素,您会注意到两件事:该元素被标识为导航地标,并公开了我们使用 .

search地标

该角色用于对一组相关元素进行分组,这些元素共同提供了一种搜索网站的方法。使用此角色的最常见方法是通过窗体。

<form name="site-search" action="/search" method="get" role="search"><label for="query">Find your perfect pizza</label><input type="search" id="query" name="query" />
</form>

在这里,我们遇到了第一个实例,我们需要显式地为元素分配角色。由于没有具有隐式搜索角色的本机 HTML 元素,因此在此示例中,我们将该角色分配给 <form> 元素。 随着引入新的 HTML 元素,这种情况将发生变化,我们将在本文后面讨论。

如果使用开发人员工具检查表单元素,您将看到它正确地将地标标识为搜索地标:

main地标

我们现在走出了标题,进入了页面的主要内容。这引入了下一个地标,恰如其分地命名为 .需要注意的是,一个页面只能有一个 <main> 元素。

现在,在开发人员工具中选择元素将正确识别我们的主要内容。

region地标

我们的主要内容可以由不同类型的内容或地区组成,幸运的是,这其中有一个作用。这个角色很有趣;从技术上讲,有一个 HTML 元素的隐式作用是 ,但所讨论的元素笼罩在一些争议中。

我所指的元素是 <section> 元素,或者有些人称之为另一个名称。引起争议的原因是,当像下面的例子一样使用时,它没有任何语义意义:

<section><h2>Our pizzas</h2><ul><li>Margherita with pineapple</li><li>Veggie with pineapple</li><li>Meaty with pineapple</li></ul>
</section>

使用开发人员工具检查它还将显示它未被标识为区域导航地标:

那么,我们如何将其变成一个区域呢?我们可以通过使用 aria-labelledby 属性将标题元素与部分相关联来做到这一点。这有两个目的:它将该部分变成区域导航地标,然后标题为该区域提供唯一名称。

在极少数情况下,如果没有与元素关联的标题,您还可以使用该属性来实现相同的最终结果。让我们更新前面的代码来做到这一点:

<section aria-labelledby="our-pizzas-heading"><h2 id="our-pizzas-heading">Our pizzas</h2><p>All our pizzas come with the best pizza topping in the world. Pineapple!</p><ul><li>Margherita with pineapple</li><li>Veggie with pineapple</li><li>Meaty with pineapple</li></ul>
</section>

现在检查元素时,它将被正确标识为区域地标,并显示从标题元素继承的名称:

在这个阶段,重申使用地标的原因很重要。地标旨在标识用户最有可能感兴趣并希望导航到的页面的关键区域。因此,在决定页面的哪些区域应突出显示为地标时,请注意。

complementary地标

地标旨在识别与主要内容相辅相成的内容,同时在与主要内容分离时仍然有意义。这可能包括相关文章、演出时间或天气信息等内容。对于我们的页面,我们将链接到一些很棒的披萨食谱。

这一次,我们确实有一个原生的 HTML 元素,我们可以将其用作我们的补充地标:

<aside aria-labelledby="pizza-recipe-heading"><h3 id="pizza-recipe-heading">Make your own pie!</h3><p>Below is a list of our favorite pizza recipes.</p><ul><li><a href="/mushroom-pizza">The shroom</a></li><li><a href="/smokey-joe">Smokey Joe</a></li><li><a href="/fromage">Fromage</a></li></ul>
</aside>

<aside>元素具有互补的隐含作用,因此是满足我们需求的完美选择。由于一个页面上可以有多个互补区域,因此我们必须以唯一和描述性的方式命名每个区域。我们可以通过将标题元素与属性相关联或在元素上使用来实现这一点。

在开发人员工具中检查该元素将显示它被标识为互补的导航地标角色,并从关联的标题元素继承其名称。

form地标

乍一看,这似乎是显而易见的,如果不是因为与该元素所讨论的内容类似的重要细微差别,那将是如此。让我们在我们的页面上添加一个时事通讯订阅表格。

<div class="newsletter"><h3>Subscribe to Mr. Pineapple's newsletter</h3><p>In our newsletter, you can expect even more wonderful pizza recipes, allfeaturing the versatile pineapple.</p><form name="newsletter" action="/subscribe" type="post"><label for="email">Please provide your email address</label><input type="email" id="email" name="email" /><button type="submit">Pineapple Me 🍍</button></form>
</div>

如果检查 <form> 元素,您可能会失望地发现它没有被标识为窗体地标,而是一个通用部分:

什么给了?与前面的元素一样,您需要将标题元素与表单关联或使用属性。我们已经有一个描述性标题,所以我们需要做的就是将标题与表单相关联。

<div class="newsletter"><h3 id="newsletter-subscribe-form-heading">Subscribe to Mr. Pineapple's newsletter</h3><p>In our newsletter, you can expect even more wonderful pizza recipes, allfeaturing the versatile pineapple.</p><formaria-labelledby="newsletter-subscribe-form-heading"name="newsletter"action="/subscribe"type="post"><label for="email">Please provide your email address</label><input type="email" id="email" name="email" /><button type="submit">Pineapple Me 🍍</button></form>
</div>

完成这些更改后,检查表单元素将产生预期结果:

contentinfo 地标

地标用于标识有关网页的信息,例如版权信息或隐私声明的链接。最常见的用例是页面的页脚。在这里,我们有一个原生的 HTML 元素来救援。

<footer><p>Copyright &copy; Mr. Pineapple's Pizzeria - 2023</p>
</footer>

与元素一样,重要的是<footer>元素不要位于元素或其他剖面元素内。如果是这样,它将不具有 的隐式作用。看到我们的元素是元素的直接后代,在开发人员工具中检查它将产生预期的结果。

新的搜索 HTML 元素

我们现在已经涵盖了所有具有里程碑意义的角色,对于每个里程碑,我们都有一个可以使用的原生 HTML 元素。当然,我们必须为 和 地标做一些额外的工作,但我们从来不需要显式使用该属性。

但是等等,地标呢?我们必须在表单上使用该属性。的,你抓住了我!但我确实提到过,我会在帖子后面给你一个惊喜。随着新的 <search> 元素的引入,必须将角色显式分配给表单的日子即将结束。那么,我们该如何使用它呢?让我们更新前面的搜索地标以使用新元素:

<search><form name="site-search" action="/search" method="get" role="search"><label for="query">Find your perfect pizza</label><input type="search" id="query" name="query" /></form>
</search>

不过,这是处于最前沿的生活,所以如果你今天(2023 年初)检查该元素,你会发现它在可访问性树中显示为被忽略。

这就是我将该属性保留在嵌套元素上的原因。一旦浏览器和屏幕阅读器开始实现该元素,表单上将不再需要该属性。曾经有一段时间,该元素也存在同样的问题,主要是由于 Internet Explorer 中缺乏支持,因此需要显式添加到该元素中。

现在,我们可以退后一步,看看我们共同构建的光荣的可访问性树:

这是一件美丽的事情,不是吗?

在 Chrome 浏览器中启用完整的辅助功能树

请注意,在 Chromium 浏览器中,显示此树是一项试验性功能。在开发工具中选择辅助功能选项卡后,你会看到 "启用全页面辅助功能树 "条目,左侧有一个未选中的复选框。

选中该复选框时,将显示一条通知,要求你重新加载 DevTools。单击该按钮并重新加载 DevTools 后,你将在“元素”面板的右上角看到一个新图标。单击此图标将显示完整的辅助功能树。

总结

HTML 地标是使屏幕阅读器用户更易于访问网页的重要工具。通过在网页上定义地标,您可以帮助用户更轻松地导航并快速找到他们需要的信息。请记住尽可能使用适当的 HTML 元素,并清楚地标记您的地标,以便用户知道它们的用途。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/209110.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度探索Linux操作系统 —— 构建initramfs

系列文章目录 深度探索Linux操作系统 —— 编译过程分析 深度探索Linux操作系统 —— 构建工具链 深度探索Linux操作系统 —— 构建内核 深度探索Linux操作系统 —— 构建initramfs 文章目录 系列文章目录前言一、为什么需要 initramfs二、initramfs原理探讨三、构建基本的init…

tomcat篇---第二篇

系列文章目录 文章目录 系列文章目录前言一、tomcat容器是如何创建servlet类实例?用到了什么原理?二、tomcat 如何优化?三、熟悉tomcat的哪些配置?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女…

Web应用JSON数据保护(密码算法、密钥、数字签名和数据加密)

1.JSON&#xff08;JavaScript Object Notation&#xff09; JSON是一种轻量级的数据交换格式&#xff0c;采用完全独立于编程语言的文本格式来存储和表示数据。JSON通过简单的key-value键值对来描述数据&#xff0c;可以被广泛用于网络通信、数据存储等各种应用场景&#xff0…

Python面向对象基础

Python面向对象基础 一、概念1.1面向对象的设计思想1.2 面向过程和面向对象1.2.1 面向过程1.2.2 面向对象1.2.3 面向过程和面向对象的优缺点 二、类和对象2.1 概念2.2 类的定义2.3 对象的创建2.3.1 类中未定义构造函数2.3.2 类中定义构造函数 2.4 类的设计 三、类中的成员3.1 变…

Python教程-数组

作为软件开发者&#xff0c;我们总是努力编写干净、简洁、高效的代码。在本文中&#xff0c;我们将探索 Python 数组的各种特性和功能。我们将学习如何在 Python 中创建、操作和使用数组&#xff0c;以及数组与 Python 编程语言中的其他数据结构有何不同。我们的目标是提供有关…

资源文件、布局管理器、样式表拓展

QT 资源文件 提供了和本地路径无关的资源管理。 图片资源的获取&#xff1a;阿里巴巴矢量图库&#xff08;&#x1f448; 安全链接&#xff0c;放心跳转&#xff09; widget.ui .qrc widget.h #ifndef WIDGET_H #define WIDGET_H#include <QtWidgets>namespace Ui { c…

Plonky2 = Plonk + FRI

Plonky2由Polygon Zero团队开发&#xff0c;实现了一种快速的递归SNARK&#xff0c;据其团队公开的基准测试&#xff0c;2020年&#xff0c;以太坊第一笔递归证明需要60s生成&#xff0c;而于今Plonky2在 MacBook Pro上生成只需 170 毫秒。 下面将逐步剖析Plonky2。 整体构造 …

活久见—当设置不同坐标系统时,ArcMap中的图形相关位置关系会变化

这两天一件十分神奇的事情发生了&#xff1a;当设置不同坐标系统时&#xff0c;ArcMap中的图形相对位置关系会变化。 事情起因是这样的&#xff1a;博主和同行用ArcMap同时验证2个相邻多边形的相对位置关系&#xff0c;见下图图1和图2的多边形&#xff0c;在博主的ArcMap中&am…

大电流H桥电机驱动电路的设计与解析(包括自举电路的讲解,以IR2104+LR7843为例)

大电流H桥电机驱动电路的设计与解析&#xff08;包括自举电路的讲解&#xff0c;以IR2104LR7843为例&#xff09; 电机驱动板主要采用两种驱动芯片&#xff0c;一种是全桥驱动&#xff08;如&#xff1a;HIP4082&#xff09;&#xff0c;一种是半桥驱动&#xff08;如&#xff…

单片机语言--C51语言的数据类型以及存储类型以及一些基本运算

C51语言 本文主要涉及C51语言的一些基本知识&#xff0c;比如C51语言的数据类型以及存储类型以及一些基本运算。 文章目录 C51语言一、 C51与标准C的比较二、 C51语言中的数据类型与存储类型2.1、C51的扩展数据类型2.2、数据存储类型 三、 C51的基本运算3.1 算术运算符3.2 逻辑…

docker学习(七、搭建mysql8.2主从)

一、主库搭建 1.构建主库镜像 # 运行mysql镜像&#xff0c;配置端口3307为主库 docker run -p 3307:3306 --name mysql-master --privilegedtrue -v /mydata/mysql-master/log:/var/log/mysql -v /mydata/mysql-master/data:/var/lib/mysql -v /mydata/mysql-master/conf:/etc…

前端:HTML+CSS+JavaScript实现轮播图2

前端&#xff1a;HTMLCSSJavaScript实现轮播图2 1. 和之前版本的区别2. 实现原理3. 针对上述的改进3. 参考代码 1. 和之前版本的区别 之前发布的那篇关于轮播图的文章在这&#xff1a;前端&#xff1a;HTMLCSSJavaScript实现轮播图&#xff0c;只能说存在问题吧&#xff01;比…

HuggingFace学习笔记--Prompt-Tuning、P-Tuning和Prefix-Tuning高效微调

1--Prompt-Tuning 1-1--Prompt-Tuning介绍 Prompt-Tuning 高效微调只会训练新增的Prompt的表示层&#xff0c;模型的其余参数全部固定&#xff1b; 新增的 Prompt 内容可以分为 Hard Prompt 和 Soft Prompt 两类&#xff1b; Soft prompt 通常指的是一种较为宽泛或模糊的提示&…

搭乘“低代码”快车,引领食品行业数字化转型全新升级

数字化技术作为重塑传统行业重要的力量&#xff0c;正以不可逆转的趋势改变着企业经营与客户消费的方式。 在近些年的企业数字化服务与交流过程中&#xff0c;织信团队切实感受到大多数企业经营者们从怀疑到犹豫再到焦虑最终转为坚定的态度转变。 在这场数字化转型的竞赛中&a…

VS2009和VS2022的错误列表可复制粘贴为表格

在VS2019或VS2022中&#xff0c;可看到如下错误列表&#xff1a; 如果复制这两行错误信息&#xff1a; 然后把它粘贴到word文件&#xff0c;就可以看到以下表格&#xff1a; 严重性 代码 说明 项目 文件 行 禁止显示状态 错误(活动) E0020 未定义标识符 "dd"…

0基础学java-day16-(坦克大战[1])

一、 坦克大战游戏演示 1 游戏演示 2.为什么写这个项目 3.写项目前的提醒 二、java 绘图坐标体系 1 坐标体系-介绍 2 坐标体系-像素 3 介绍-快速入门 package com.hspedu.draw;import javax.swing.*; import java.awt.*;/*** author 林然* version 1.0* 演示如何在面板画圆…

【python可视化系统源码】基于爬虫与可视化的电影推荐系统课题背景、目的、意义、研究思路、研究方法

该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等学习内容。 目录 一、项目介绍&#xff1a; 二、文档学习资料&#xff1a; 三、模块截图&#xff1a; 四、开发技术与运行环境&#xff1a; 五、代码展示&#xff1a; 六、数据库表截图&#xff1a…

从简单到入门,一文掌握jvm底层知识文集。

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

matlab RGB三元组和十六进制的转换

matlab画柱状图改颜色的时候&#xff0c;用三元组的形式&#xff0c;范围是[0&#xff0c;1] 我们获得了十六进制 到网站转换为[0,255] https://c.runoob.com/front-end/55/ 然后将得到的值/255 输入matlab就可以了

Bean作用域和生命周期

小王学习录 前言Bean的作用域什么是Bean的作用域Bean的六种作用域1. 单例作用域 singleton2. 原型作用域 prototype (多例作用域)3. 请求作用域 request4. 会话作用域 session5. 全局作用域 application6. Http WebSocket作用域 websocket Spring的执行流程和Bean的生命周期Spr…