ARIA 属性详解:增强网页可访问性的关键工具

文章目录

    • 前言
    • 一、什么是 ARIA?
    • 二、ARIA 的核心概念
    • 三、如何正确使用 ARIA 属性
    • 四、实际案例分析
    • 结语


前言

随着互联网的普及和技术的发展,确保网页对所有用户都是可访问的变得越来越重要。这不仅符合道德责任,也是法律要求的一部分(例如,在美国,《美国残疾人法案》要求网站必须是无障碍的)。WAI-ARIA(Web Accessibility Initiative - Accessible Rich Internet Applications)是一套技术标准,旨在提高动态内容和高级用户界面控件在辅助技术中的可访问性。


一、什么是 ARIA?

WAI-ARIA 是由 W3C(World Wide Web Consortium)开发的一组属性,用于增强网页和应用程序的可访问性。这些属性可以添加到 HTML 元素中,帮助屏幕阅读器和其他辅助技术理解页面上复杂的用户界面组件,如滑块、菜单、模态对话框等。ARIA 的主要目的是填补现有 HTML 标签语义不足的地方,使网页内容更加丰富和交互性强,同时保持可访问性。

二、ARIA 的核心概念

ARIA 主要通过三个核心概念来实现其目标:角色(Roles)、状态(States)和属性(Properties)。

  1. 角色(Roles)
    • 角色定义了元素的基本类型或功能。每个角色都有其特定的用途和预期行为。常见的角色包括:
      • Landmark Roles:用于标识页面的主要部分,如 bannernavigationmaincomplementarycontentinfo 等。
      • Widget Roles:用于描述交互式组件,如 buttoncheckboxcomboboxmenumenubaroptionprogressbarradiosliderspinbuttontabtabpanel 等。
      • Document Structure Roles:用于描述文档结构,如 articleheadinglistlistitemdefinition 等。
      • Live Region Roles:用于实时更新的内容区域,如 alertlogmarqueestatus 等。
  2. 状态(States)
    • 状态描述了元素的当前条件,可以随用户的交互而改变。状态通常用于动态更新元素的状态信息,以便辅助技术能够及时通知用户。常见的状态包括:
      • aria-checked:表示复选框或单选按钮是否被选中。
      • aria-expanded:表示一个可展开/折叠的元素当前是展开还是折叠。
      • aria-selected:表示选项是否被选中。
      • aria-pressed:表示按钮是否被按下。
      • aria-busy:表示元素是否正在处理某些任务。
      • aria-disabled:表示元素是否被禁用。
  3. 属性(Properties)
    • 属性提供了关于元素的额外信息,这些信息不会因用户操作而变化。属性通常用于提供静态的信息,帮助辅助技术更好地理解元素的功能和用途。常见的属性包括:
      • aria-label:为元素提供一个明确的文本标签,特别是在没有可见文本标签的情况下。
      • aria-labelledby:指定一个或多个元素作为当前元素的标签。
      • aria-describedby:指定一个或多个元素作为当前元素的描述。
      • aria-valuenowaria-valueminaria-valuemax:用于滑块或其他数值输入控件,表示当前值、最小值和最大值。
      • aria-controls:表示当前元素控制的其他元素。
      • aria-owns:表示当前元素拥有其他元素,即使这些元素不在 DOM 树的层次结构中。
      • aria-live:表示元素的内容何时需要实时更新,值可以是 offpoliteassertive

三、如何正确使用 ARIA 属性

  1. 优先使用语义化 HTML
    • 在可能的情况下,首先尝试使用具有固有语义的 HTML 标签。例如,使用 <button> 而不是带有 role="button"<div><span>
    • 语义化的 HTML 不仅对可访问性有益,还提高了代码的可读性和维护性。
    <button>Click me</button>
    
  2. 确保 ARIA 属性与实际行为一致
    • 如果你为某个元素指定了一个特定的角色或状态,那么这个元素的行为必须与该角色或状态相匹配。例如,如果一个元素被赋予了 role="slider",它就应该能够响应键盘导航并支持相应的 ARIA 属性,如 aria-valueminaria-valuemax
    <div role="slider" aria-valuenow="50" aria-valuemin="0" aria-valuemax="100" tabindex="0"></div>
    
  3. 避免过度使用 ARIA
    • 只在必要时使用 ARIA。过度使用或错误使用 ARIA 属性可能会导致混淆,甚至降低可访问性。
    • 例如,不要在普通的链接上使用 role="link",因为 <a> 标签已经具有这种语义。
    <!-- 正确 -->
    <a href="#">Link</a><!-- 错误 -->
    <div role="link" href="#">Link</div>
    
  4. 使用 aria-hidden 隐藏非相关内容
    • 有时,页面上的某些内容对视觉用户是有用的,但对于屏幕阅读器用户来说可能是多余的或干扰的。在这种情况下,可以使用 aria-hidden="true" 来隐藏这些内容。
    <img src="logo.png" alt="Company Logo" aria-hidden="true">
    
  5. 使用 aria-live 实现实时更新
    • 对于动态更新的内容,如通知、错误消息等,可以使用 aria-live 属性来实现实时更新,确保屏幕阅读器用户能够及时获取这些信息。
    <div id="alerts" aria-live="polite" aria-atomic="true"></div>
    <script>document.getElementById('alerts').textContent = 'Your order has been placed successfully.';
    </script>
    
  6. 确保键盘可访问性
    • 许多 ARIA 组件需要键盘导航才能完全可用。确保所有交互式元素都可以通过键盘访问,并且焦点管理得当。
    <button onclick="alert('Button clicked!')">Click me</button>
    <div role="button" tabindex="0" onclick="alert('Div clicked!')">Click me</div>
    
  7. 测试和验证
    • 使用屏幕阅读器等辅助技术进行测试,确保你的网页对所有用户都友好且易于使用。
    • 利用在线工具和服务来检查 ARIA 属性的正确性和一致性。一些常用的工具包括:
      • WAVE Web Accessibility Evaluation Tool:一个在线工具,可以检测网页的可访问性问题。
      • axe-core:一个开源的 JavaScript 库,可以集成到自动化测试中,检测可访问性问题。
      • Chrome DevTools:现代浏览器的开发者工具通常包含可访问性审计功能,可以帮助你发现和修复问题。

四、实际案例分析

假设我们有一个复杂的滑块控件,需要支持屏幕阅读器用户。我们可以使用以下 ARIA 属性来增强其可访问性:

<div id="slider" role="slider" aria-valuemin="0" aria-valuemax="100" aria-valuenow="50" tabindex="0" onkeydown="handleKeydown(event)"><div class="track"></div><div class="thumb" style="left: 50%;"></div>
</div><script>
function handleKeydown(event) {const slider = document.getElementById('slider');let value = parseInt(slider.getAttribute('aria-valuenow'));switch (event.key) {case 'ArrowLeft':value = Math.max(value - 1, parseInt(slider.getAttribute('aria-valuemin')));break;case 'ArrowRight':value = Math.min(value + 1, parseInt(slider.getAttribute('aria-valuemax')));break;default:return;}slider.setAttribute('aria-valuenow', value);slider.querySelector('.thumb').style.left = `${value}%`;
}
</script>

在这个例子中,我们使用了 role="slider" 来定义滑块的角色,并使用 aria-valueminaria-valuemaxaria-valuenow 来定义滑块的范围和当前值。此外,我们还使用了 tabindex="0" 使滑块可以通过键盘访问,并添加了一个 onkeydown 事件处理器来处理键盘导航。


结语

通过合理地应用 ARIA 属性,开发者可以显著提高网页的可访问性,让更多的用户能够顺畅地浏览和使用网页内容。然而,重要的是要记住,ARIA 应该作为语义化 HTML 的补充,而不是替代品。始终遵循最佳实践,并持续测试,以确保所有用户都能获得良好的体验。通过这些方法,我们可以创建更加包容和友好的网络环境,使每个人都能平等地享受互联网带来的便利。

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

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

相关文章

游戏引擎学习第15天

视频参考:https://www.bilibili.com/video/BV1mbUBY7E24 关于游戏中文件输入输出&#xff08;IO&#xff09;操作的讨论。主要分为两类&#xff1a; 只读资产的加载 这部分主要涉及游戏中用于展示和运行的只读资源&#xff0c;例如音乐、音效、美术资源&#xff08;如 3D 模型和…

(二)Ubuntu22.04+Stable-Diffusion-webui AI绘画 中英双语插件安装

一、说明 看情况添加 二、双语安装 双语插件 https://github.com/journey-ad/sd-webui-bilingual-localization 中文语言包 https://github.com/dtlnor/stable-diffusion-webui-localization-zh_CN 先装中文语言包 错误&#xff1a;AssertionError: extension access disable…

UE5 DownloadImage加载jpg失败的解决方法

DownloadImage加载jpg失败的解决方法 现象解决方案具体方法 现象 用UE自带的 DownloadImage 无法下载成功&#xff0c;从 failure 引脚出来。 接入一个由监控器自动保存起的图像&#xff0c;有些可以正常加载成功&#xff0c;有些无法加载成功。 经调查问题出现在&#xff0c;…

Elasticsearch 中的热点以及如何使用 AutoOps 解决它们

作者&#xff1a;来自 Elastic Sachin Frayne 探索 Elasticsearch 中的热点以及如何使用 AutoOps 解决它。 Elasticsearch 集群中出现热点的方式有很多种。有些我们可以控制&#xff0c;比如吵闹的邻居&#xff0c;有些我们控制得较差&#xff0c;比如 Elasticsearch 中的分片分…

Statsmodels之OLS回归

目录 Statsmodels基本介绍OLS 回归实战实战1&#xff1a;实战2&#xff1a; Statsmodels基本介绍 Statsmodels 是 Python 中一个强大的统计分析包&#xff0c;包含了回归分析、时间序列分析、假设检验等等的功能。Statsmodels 在计量的简便性上是远远不及 Stata 等软件的&…

【接口封装】—— 1、加载样式表

函数定义 static void loadStyleSheet(QWidget* widget, const QString &fileName,const QString& otherStyleQString());&#xff08;头文件&#xff09;&#xff1a; #include <qfile.h> #include <QWidget> 源文件: void CommonUtils::loadStyleSheet(…

AI、VR与空间计算:教育和文旅领域的数字转型力量

在这个数字技术高速发展的时代&#xff0c;AI、VR技术及大空间计算技术&#xff0c;已成为推动多个行业革新的强劲动力。近日&#xff0c;世优科技推出了最新研发的VR大空间产品《山海经》&#xff0c;这一全新的沉浸式体验项目不仅重新定义了观展方式&#xff0c;还为文化旅游…

AWTK 最新动态:支持鸿蒙系统(HarmonyOS Next)

HarmonyOS是全球第三大移动操作系统&#xff0c;有巨大的市场潜力&#xff0c;在国产替代的背景下&#xff0c;机会多多&#xff0c;AWTK支持HarmonyOS&#xff0c;让AWTK开发者也能享受HarmonyOS生态的红利。 AWTK全称为Toolkit AnyWhere&#xff0c;是ZLG倾心打造的一套基于C…

数据库、数据仓库、数据湖、数据中台、湖仓一体的概念和区别

数据库、数据仓库、数据湖、数据中台和湖仓一体是数据管理和分析领域的不同概念&#xff0c;各自有不同的特点和应用场景。以下是它们的主要区别&#xff1a; 1. 数据库&#xff08;Database&#xff09; 定义&#xff1a;结构化的数据存储系统&#xff0c;用于高效地存储、检…

Linux运维篇-iscsi存储搭建

目录 概念实验介绍环境准备存储端软件安装使用targetcli来管理iSCSI共享存储 客户端软件安装连接存储 概念 iSCSI是一种在Internet协议上&#xff0c;特别是以太网上进行数据块传输的标准&#xff0c;它是一种基于IP Storage理论的存储技术&#xff0c;该技术是将存储行业广泛…

Django一分钟:django中收集关联对象关联数据的方法

场景&#xff1a;我有一个模型&#xff0c;被其它多个模型关联&#xff0c;我配置了CASCADE级联删除&#xff0c;我想要告知用户删除该实例之后&#xff0c;哪些关联数据将会被一同删除。 假设我们当前有这样一组模型&#xff1a; class Warehouse(models.Model):""…

iPhone 17 Air看点汇总:薄至6mm 刷新苹果轻薄纪录

我们姑且将这款iPhone 17序列的超薄SKU称为“iPhone 17 Air”&#xff0c;Jeff Pu在报告中提到&#xff0c;我同意最近关于 iPhone 17超薄机型采用6 毫米厚度超薄设计的传言。 如果这一测量结果被证明是准确的&#xff0c;那么将有几个值得注意的方面。 首先&#xff0c;iPhone…

Tcp协议Socket编程

&#x1f30e; Tcp协议Socket编程 本次socket编程需要使用到 日志文件&#xff0c;此为具体日志编写过程。以及 线程池&#xff0c;线程池原理比较简单&#xff0c;看注释即可。 文章目录&#xff1a; Tcp协议Socket编程 TCP Socket API简介 构建Tcp_echo_server      …

嵌入式系统中QT实现网络通信方法

大家好,今天主要给大家分享一下,如何使用QT中的网络编程实现。 第一:QT网络编程基本简介 QT中网络模块为提供了可以使用TCP/IP客户端与服务器的类。它提供了较低级别的类,例如代表低级网络概念的 QTcpSocket, QTcpServer 和 QUdpSocket,以及诸如 QNetworkRequest, QNetw…

【卡尔曼滤波】数据预测Prediction观测器的理论推导及应用 C语言、Python实现(Kalman Filter)

【卡尔曼滤波】数据预测Prediction观测器的理论推导及应用 C语言、Python实现&#xff08;Kalman Filter&#xff09; 更新以gitee为准&#xff1a; 文章目录 数据预测概念和适用方式线性系统的适用性 数据预测算法和卡尔曼滤波公式推导状态空间方程和观测器先验估计后验估计…

大模型时代的具身智能系列专题(十三)

迪士尼研究中心 瑞士苏黎世迪斯尼研究中心致力于不同领域的业务活动&#xff0c;其中包括电影、电视、公园和度假村以及消费产品。我们针对所有这些领域进行科研工作。我们开发能使我们将后道生产元素整合到前级生产中的技术。由此可节省许多昂贵的效果&#xff0c;这些效果最…

IDEA2023设置控制台日志输出到本地文件

1、Run->Edit Configurations 2、选择要输出日志的日志&#xff0c;右侧&#xff0c;IDEA2023的Logs在 Modify option 里 选中就会展示Logs栏。注意一定要先把这个日志文件创建出来&#xff0c;不然不会自动创建日志文件的 IDEA以前版本的Logs会直接展示出来 3、但是…

o1的风又吹到多模态,直接吹翻了GPT-4o-mini

开源LLaVA-o1&#xff1a;一个设计用于进行自主多阶段推理的新型VLM。与思维链提示不同&#xff0c;LLaVA-o1独立地参与到总结、视觉解释、逻辑推理和结论生成的顺序阶段。 LLaVA-o1超过了一些更大甚至是闭源模型的性能&#xff0c;例如Gemini-1.5-pro、GPT-4o-mini和Llama-3.…

AJAX的基本使用

AJAX的基本使用 &#x1f389;&#x1f389;&#x1f389;欢迎来到我的博客,我是一名自学了2年半前端的大一学生,熟悉的技术是JavaScript与Vue.目前正在往全栈方向前进, 如果我的博客给您带来了帮助欢迎您关注我,我将会持续不断的更新文章!!!&#x1f64f;&#x1f64f;&#x…

DDei在线设计器V1.2.43版发布

2024-11-21-----V1.2.43 一、bug 修复 1. 修复只读情况下&#xff0c;连线依然可以通过特殊点调整的 bug 2. 修复了同一页面多个实例时&#xff0c;部分方法只会引用最后一个实例的问题 3. 修复了组合控件和容器控件改变容器后没有清理的问题&#xff0c;优化了容器的实现 4. …