给 Custom Elements 添加 Aria 标准实现可访问性

前言

前端开发不仅仅是选择合适的技术和框架,还需要考虑到每个用户的体验,尤其是对于那些对语音输入和视觉识别依赖度高的用户。随着网站和应用的不断发展,越来越多的人将使用无障碍技术来访问网页。为了帮助这些人,我们需要编写特殊的 HTML、CSS 和 JavaScript 代码,使他们可以更方便地访问和使用我们的网站和应用。

本文将介绍如何将 Aria 标准融入 Custom Elements 中,使其在可访问性方面具有更强的兼容性和易用性。

什么是 Custom Elements?

Custom Elements 是 Web Component 规范的一部分,它允许您创建可重复使用、自定义的 HTML 标记。相对于传统的 HTML 元素,Custom Elements 允许前端开发人员创建自己的定制元素,如通知、警告框等。

Custom Elements 提供以下优点:

  • 更好的可组合性:Custom Elements 为 Web 组件提供更好的组合方式。这使得您能够更好地拆分复杂的用户界面和在某些情况下重用它们。
  • 更好的封装性:Custom Elements 可以使开发人员更轻松地实现封装。Custom Elements 的元素封装了特定的功能,不必公开博弈式的函数和属性。
  • 更好的数据封装:Custom Elements 定义了一个元素的接口,该接口是元素与其使用者的接口。这使得开发人员可以更好地定义如何访问数据并提供方法来报告其状态。

但是,Custom Elements 在可访问性方面的问题需要进行进一步改进,以便能够更轻松地实现特定的行为,如键盘非组合操作和语义元素。在本文中,我们将重点介绍如何将 Aria 标准融入 Custom Elements 中,使其在可访问性方面具有更强的兼容性和易用性。

什么是 Aria?

WAI-ARIA(Web Accessibility Initiative - Accessible Rich Internet Applications)是一个技术规范,它使 Web 内容和 Web 应用程序能够更好地适应和满足残障用户的需求。 WAI-ARIA 提供了一套语义化和浏览器可识别的属性,使残障用户能够使用辅助工具访问 Web 内容。

WAI-ARIA 包括两个部分:

  1. 角色:WAI-ARIA 角色为用户界面组件提供可访问性的信息。角色可能包括按钮、文本输入框、标签等。
  2. 属性:WAI-ARIA 属性为角色提供更多的具体信息,以便辅助技术可以更好地掌握 Web 内容的结构、交互和状态。属性可能包括 aria-label、aria-describedby、aria-disabled 等。

通过将 Aria 标准融入 Custom Elements 中,我们可以更好地为所有 Web 用户提供可访问性的信息,使其能够更轻松地使用我们的网站和应用程序。

如何将 Aria 标准融入 Custom Elements 中?

在 Custom Elements 中使用 Aria,我们需要考虑以下几个方面:

使用正确的角色

正确的角色是定义 Custom Element 的第一步。无论您创建的元素的用途是什么,都应该选择一个与该用途相对应的角色。例如,如果您创建了一个警告框元素,那么您应该使用 role="alert" 属性。

以下是一些常用的 WAI-ARIA 角色:

  • role="button":表示给出操作的按钮。这将使辅助技术知道该元素可键盘导航。
  • role="checkbox":表示复选框。这将使辅助技术知道该元素的当前状态或状态更改事件。
  • role="grid":表示表格或网格。这将使辅助技术知道该元素的结构。
  • role="menu":表示简单的菜单。
  • role="presentation"aria-hidden="true":通常与不带语义的 HTML 元素结合使用,该元素被称为 presentation role,即元素没有重要的角色。结合使用 aria-hidden="true" 可以防止辅助技术将该元素的内容视为重要内容。

使用适当的角色有助于构建无障碍的 Custom Elements。

------------- -------------
  ------ ----- ---- ------------
---------------

使用正确的属性

您的 Custom Elements 应该与 WAI-ARIA 属性一起使用,以便使残障用户了解元素的状态和交互。

我们可以采用以下两种方法来添加 WAI-ARIA 属性:

  • 直接在元素上添加属性。例如:<my-alert-box role="alert" aria-labelledby="alertTitle alertDesc"></my-alert-box>
  • 通过 JavaScript 动态添加属性。例如:alertBox.setAttribute('data-testid', 'alertBox')

以下是一些常用的 WAI-ARIA 属性:

  • aria-label:表示元素的文本标签。
  • aria-labelledby:表示元素的标题,可以是当前页面中的标记 HTML 元素 ID 或相应元素的 ID 或 HTML 元素的 ID。
  • aria-disabled:表示下拉菜单当前是否不可用。
  • aria-haspopup:表示下拉菜单是否可用于显示其他组件(例如带有子下拉菜单的“导航菜单”)。

以下是一个使用 WAI-ARIA 属性的示例:

------------- ------------ --------------------------- -----------------------------

--------
--- -------- - ---------------------------------------
----------------------------------- ---------
---------------------------------------- ----------- ---------------
---------

使用 JavaScript 事件

当用户与元素进行交互时,我们需要使用 JavaScript 事件来提供可访问性。以下是一些常用的事件:

  • keydown:当键盘按下时发生。
  • click:当鼠标按键或触摸屏触摸时发生。
  • focusblur:当元素获得或失去焦点时触发。

例如,下面的代码片段将使用 click 事件设置 Custom Element 的状态:

---------- ------------- -------------------------

--------
--- -------- - ------------------------------------
---------------------------------- --------------- -
  -----------------------
  --- ------ - --------------------------------------- --- --------
  -------------------------------------- ---------
---
---------

结论

在这篇文章中,我们介绍了如何将 Aria 标准融入 Custom Elements 中,以便为残障用户提供更好的可访问性。了解 WAI-ARIA 角色和属性、正确使用 JavaScript 事件、和组合好的 Custom Elements 都可以帮助您为无障碍用户提供良好的体验。始终牢记,为所有 Web 用户编写可访问的代码是让我们的网站和应用程序可靠、可用和可重复使用的关键。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/671215daad1e889fe20295ee


猜你喜欢

  • GraphQL 的自省及其应用场景

    GraphQL 是一种具有强大查询语言的 API,其自省功能使其具有更多的可能性。GraphQL 的自省能力让开发人员能够深入了解其服务端 API 的结构,并根据其服务端结构定制客户端。

    5 天前
  • Vue.js: 解决在 v-model 中使用自定义组件无法绑定数据的问题

    在 Vue.js 中,使用 v-model 指令可以将数据双向绑定到表单元素或自定义组件中。然而,当我们想在 v-model 中使用自定义组件时,可能会遇到一个问题,那就是无法绑定数据。

    5 天前
  • 解决 SPA 应用中图片加载问题的最佳实践教程

    在单页面应用 (SPA) 中,图片加载的问题常常被忽略,但其实这是一个非常重要的问题。因为在 SPA 中,页面只加载一次,所有的页面切换都是通过 JavaScript 来实现的,如果没有使用合适的图片...

    5 天前
  • 如何在 Cypress 中集成测试报告并实现自动邮件推送

    如何在 Cypress 中集成测试报告并实现自动邮件推送? Cypress 是一个基于 Node.js 的端到端测试框架,旨在提供友好的 API,丰富的断言和快速稳定的执行。

    5 天前
  • 如何在 Hapi 中实现 AOP 编程

    AOP(面向切面编程)是一种编程思想,可以将需要横跨多处的代码功能抽离成模块化的切面,以便在运行时动态地组合到应用中。在前端开发中,AOP 通常用于需要注入第三方 SDK 或者其他不属于应用逻辑范畴的...

    5 天前
  • 响应式设计中如何实现网格布局

    在现代web开发中,响应式设计已经成为了一种通用的设计模式。随着越来越多的设备参与进来,我们需要为不同尺寸的屏幕和设备提供更好的用户体验。当今的网页设计已经远离固定的布局且趋向于灵活自适应的网格布局。

    5 天前
  • Sequelize ORM 实践技巧:如何处理异步调用问题

    随着前端技术的不断发展,后端业务也越来越需要前端技术的支持。Sequelize ORM 是一款流行的 Node.js 数据库 ORM 工具,多数后端开发者选择使用它来操作数据库。

    5 天前
  • 如何在Material Design中自定义Dialog风格

    Material Design是一种由谷歌推出的设计语言,它强调直观、统一和有层次感的设计风格,成为越来越多Web和移动应用开发者的选择。其中Dialog是其中一种基本元素,通常用于弹出提示对话框或交...

    5 天前
  • 如何使用 Vue.js 构建响应式的 SPA 应用

    Vue.js 是一个流行的 JavaScript 框架,它提供了许多工具和能力,可以帮助你构建现代化的应用程序。在本篇文章中,我们将讨论如何使用 Vue.js 构建响应式的 SPA(单页应用)应用程序...

    5 天前
  • Mongoose 中的数据复制方法

    Mongoose 是 Node.js 的一种优秀的 MongoDB 驱动程序,它提供了易于使用的 API 和强大的数据库查询功能。当我们需要在一些操作中进行数据复制时,Mongoose 提供了几个方法...

    5 天前
  • 如何使用Tailwind CSS实现响应式表格布局

    Tabular数据是许多应用程序中必不可少的一种数据类型,因此良好的表格布局对于提高数据可读性和用户体验来说至关重要。在这篇文章中,我们将介绍如何使用Tailwind CSS框架来实现响应式表格布局。

    5 天前
  • 使用 Angular 和 React Native 构建混合应用程序的步骤和技巧

    随着移动设备的普及,越来越多的公司开始考虑开发移动应用程序。传统的 Native 应用开发方式需要开发人员熟悉不同的技术栈,如 Java 或 Swift,这给开发带来了一定的复杂度和挑战。

    5 天前
  • ECMAScript 2021 (ES12)如何优化代码中的递归操作

    随着前端技术的不断发展,递归算法在前端开发中的应用越来越广泛。但是,递归操作在执行过程中需要调用大量的函数,增加程序内存的消耗和执行时间的耗费,如果不加以优化,会导致代码的效率极低、程序崩溃等问题。

    5 天前
  • Fastify 框架中的 JWT 用户验证

    在现代 web 应用程序中,用户验证是必不可少的。JSON Web Token(JWT)是一种在 web 应用程序中用于安全验证的开放标准。Fastify 是一个高效的 Node.js web 框架,...

    5 天前
  • 解决 Socket.io 跨域问题的方法

    在前端开发中,使用 Socket.io 进行实时通信已经变得越来越普遍。然而,在实际应用中,由于跨域问题,很多开发者在使用 Socket.io 时会遇到许多麻烦。本文将介绍一些解决 Socket.io...

    5 天前
  • 使用 Cypress 测试框架进行无头浏览器测试的实例展示

    随着 web 应用开发的日益普及,前端测试也变得越来越重要。在前端测试中,无头浏览器测试是一项必不可少的任务。Cypress 是一款基于 JavaScript 的端到端测试框架,它具有易用、灵活和强大...

    5 天前
  • 对 ES7 中的 Array.prototype.includes 方法进行深入分析与应用

    在 ES7 中,我们得到了一个非常有用的方法,即 Array.prototype.includes()。该方法可用于判断一个数组是否包含某个指定的元素并返回 true 或 false。

    5 天前
  • 使用 Hapi 进行打包与发布的最佳实践

    随着Web应用程序的发展,打包和发布变得越来越重要。Hapi是一个流行的Node.js框架,它提供了一种有效的方法来打包和发布应用程序。本文将介绍使用Hapi进行打包和发布的最佳实践,包括项目的组织,...

    5 天前
  • Node.js 常用调试工具介绍

    Node.js 是一种非常受欢迎的后端开发语言,其包含了丰富的模块和工具。然而,当我们在开发和调试 Node.js 应用程序时,难免会遇到一些问题。为了快速解决这些问题,我们需要使用一些调试工具来帮助...

    5 天前
  • Webpack 本地开发中常见问题的解决方法

    在前端开发中,Webpack 常被用来进行模块化打包。然而,在本地开发中,我们往往会遇到各种各样的问题,例如热加载不起作用、编译速度太慢等等。本文将介绍一些常见的问题,并提供解决方法和示例代码。

    5 天前

相关推荐

    暂无文章