如何基于 ARIA 规范构建无障碍友好的 UI 控件

面试官:小伙子,你的数组去重方式惊艳到我了

随着互联网的普及,我们使用的应用程序和网站越来越多。然而,我们并不总是能够获得与其他人一样的访问这些资源的能力。例如,存在一部分用户,他们需要使用助听器、屏幕阅读器或其他辅助设备来访问网站,使他们能够在互联网中实现生活中的常见任务。这个例子中的用户被称为 “残障人士”(人们偏好地称之为 “残疾人士”)。

在无障碍界面设计的过程中,ARIA 规范(可访问性渐进式增强技术)是一个必不可少的规范,可以确保残障人士能够像其他人一样访问网络资源,并使用功能更加强大和易用的界面。本文将介绍如何基于 ARIA 规范构建无障碍友好的 UI 控件。

ARIA 规范简介

ARIA 是一组 Web 技术规范,其目的是使 Web 内容和 Web 应用程序可访问性更好。ARIA 规范为当前不支持无障碍交互的 Web 应用程序添加标准属性和事件,使残障人士可以使用助听器、屏幕阅读器和其他辅助技术与界面进行交互。ARIA 定义了一组 semantic role(语义角色)、state(状态)和property(属性),以描述网页上控件的行为、结构和意义。

如何构建无障碍友好的 UI 控件

使用 role 属性

role 属性用于将语义信息(如按钮、列表或标签页等)添加到 HTML 标记中,以便屏幕阅读器和其他助听器可以识别它们。以下是 role 属性的几个示例:

  • <button role="button">Click Me!</button>
  • <nav role="navigation"> ... </nav>
  • <table role="table"> ... </table>
  • <h1 role="heading" aria-level="1">Page Title</h1>

这些语义信息可以帮助香盲用户正确地导航网站,并使他们能够更好地理解网站的结构和内容。

使用 aria-label 和 aria-labelledby 属性

使用 aria-label 属性可以为一个元素提供一个简短的描述,该描述提供了一个人类读者能够理解的标签。这通常用于没有相关文本的图像或按钮。例如:

  • <button aria-label="Add Item">+</button>
  • <img src="..." alt="" aria-label="Fun Image">

而使用 aria-labelledby 属性可以将一个元素关联到一个标准元素、一个指定 ID 的元素、一个 title 属性和 / 或一个 name 属性中的值。以下是用于指定 aria-labelledby 属性的示例:

  • <label id="label1">Item Name:</label>
  • <input type="text" aria-labelledby="label1">
  • <h2 id="main-heading">Main Heading</h2>
  • <nav aria-labelledby="main-heading"> ... </nav>

以上示例中,输入元素使用了 aria-labelledby="label1" 属性,将输入元素与 id="label1" 的标签关联起来,这样屏幕阅读器就可以生成一个简短的标签。

使用 aria-expanded 属性

aria-expanded 属性表示元素是否展开或折叠。它可以用于例如折叠面板、标签页或下拉列表等组件。以下是使用 aria-expanded 属性的示例:

  • ------- -------------------- ------------------------------- --------------
    ---- ----------- --------------
    ---
    ------

    这个示例中,当按钮被点击时,折叠面板展开或折叠,屏幕阅读器也会相应地告知用户。

使用 aria-describedby 属性

aria-describedby 属性用于将辅助文本描述添加到一个元素,这个描述提供了一个简短的、可理解的解释,并为残障人士提供了额外的信息。以下是使用 aria-describedby 属性的示例:

  • ------ ----------- -----------------------------
    ---- ---------------
    ------ ----- ---- ---- ---- ------ --- ---- ------
    ------

    在这个示例中,当屏幕阅读器移动到输入元素时,它将给出 Please enter your full name (first and last name). 的提示,帮助用户更好地理解界面语义。

使用 aria-live 属性

aria-live 属性指定了一个元素是否需要被立即报告到用户,在它的内容发生变化时,例如聊天室应用程序。以下是使用 aria-live 属性的示例:

  • ---- -------------------
    --- ---- ------- ---- -------
    ------

    这个示例中,当新消息到达聊天室时,屏幕阅读器将在内容发生变化时通知用户。

结论

ARIA 规范为 Web 应用程序开发者提供了一种构建无障碍友好的 UI 控件的标准方法,它涵盖了一系列用于增强 Web 内容可访问性的语义角色、状态和属性。在设计界面时,开发者应该使用这些方法,使残障人士能够同其他用户一样访问 Web 内容。

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


猜你喜欢

  • Mongoose 一步步实现 MongoDB 传输层安全性 (SSL/TLS)

    Mongoose 是一个 MongoDB 官方支持的 Node.js 的 ORM 工具,它提供了很多强大的功能,使得在 Node.js 应用程序中使用 MongoDB 变得更加容易。

    8 天前
  • Fastify 如何使用 JWT 实现 OAuth 授权?

    OAuth 是一种认证授权协议,它允许第三方应用程序在用户授权后访问另一个应用程序的资源。JWT(JSON Web Token)是一种常用的身份认证方案,它提供了一种安全的方法来在网络中传输数据。

    8 天前
  • 如何使用 Cypress 测试 GraphQL API

    GraphQL 是一种现代化的 API 查询语言,它提供了更高效、更灵活的数据查询方式。然而在开发复杂的 GraphQL API 时,需要进行大量的测试,以确保 API 的正确性、性能和可靠性。

    8 天前
  • GraphQL 中的数据重构技巧及最佳实践

    随着前端开发的快速发展,越来越多的应用需要从服务器获取数据。GraphQL 是一种用于API的查询语言,在前端开发中越来越受欢迎,凭借其强大的查询能力,易于扩展的架构和丰富的工具库。

    8 天前
  • 如何通过无障碍技术优化数字创意设计

    数字创意设计是一个众所周知的重要部分,现在设计从互联网,广告到产品设计都离不开它。但是,许多人没有意识到数字创意的无障碍性问题,所以他们忽略了需要用于非主流设备上的行业标准。

    8 天前
  • 如何使用 TypeScript 进行 web 开发

    前言 在现代 web 开发中,TypeScript 已经成为了不可或缺的一部分。它是一种由 Microsoft 推出的开源编程语言,是 JavaScript 的超集,可以为弱类型的 JavaScrip...

    8 天前
  • 如何使用 Next.js 集成 TinaCMS 内容管理系统

    TinaCMS 是一个基于 React 的 Git-backed 内容管理系统,可以帮助开发者快速构建可定制化的 CMS 界面。Next.js 是一个用于构建 React 应用的框架,它提供了诸如服务...

    8 天前
  • RESTful API 中的请求和响应数据加密

    在当今互联网的环境下,不断有各种类型的黑客攻击事件发生,因此,保护用户的数据和隐私成为了一个至关重要的问题。RESTful API 是一种非常流行的服务器架构类型,许多应用程序和网站都使用此类型的 A...

    8 天前
  • 使用 try-catch 及 Promise.reject 优雅地处理异步错误

    在前端开发中,异步操作是非常常见的。然而,异步错误的处理却是一件棘手的问题。在这篇文章中,我们将介绍如何使用 try-catch 及 Promise.reject 优雅的处理异步错误。

    8 天前
  • 如何使用 Sequelize 实现数据库性能监控

    随着现代应用程序的复杂性不断增加,数据库性能监控变得越来越重要。Sequelize 是 Node.js 中一个流行的 ORM(对象关系映射)库,可帮助我们更轻松地与数据库进行交互。

    8 天前
  • ES12 中数组的新方法 contains() 的实际应用

    随着 JavaScript 的发展,每一个新版本都会带来一些新的功能和特性,其中 ES12 带来了许多有用的新方法,其中包括一个被广泛关注的新方法叫做 contains(),该方法可以方便地判断一个数...

    8 天前
  • 如何在 Linux 中实现高性能的 IO 操作

    在计算机科学领域中,IO(Input/Output)操作是非常重要的一部分。对于 Web 开发人员来说,IO 操作尤其重要,因为它涵盖了所有与网络和文件系统交互的内容。

    8 天前
  • 在 Deno 中使用 WebAssembly

    前言 在前端开发中,WebAssembly 已经成为了一个炙手可热的技术。它被用于性能敏感的任务,如图形计算、游戏开发等。因为 WebAssembly 比 JavaScript 更快,同时它也能够利用...

    8 天前
  • 清晰易理解的 Socket.io 快速入门指南

    Socket.io 是一种 JavaScript 库,用于在客户端和服务器之间进行实时通信。它支持实时数据传输、双向通信和广播功能。这使得 Socket.io 成为一款流行的前端技术,广泛用于网页游戏...

    8 天前
  • 如何在 Mocha 测试中使用 Webpack-dev-server

    前言 Mocha 是一个流行的 JavaScript 测试框架,而 Webpack-dev-server 是一个用于本地开发环境的 Webpack 服务器。在开发前端应用程序时,通常需要使用 Moch...

    8 天前
  • 基于 Web Components 标准的集成

    Web Components 是一种用来创建可重用组件的 Web 平台技术。它由四个标准组成: Custom Elements(自定义元素)、 Shadow DOM(影子 DOM)、 HTML Tem...

    8 天前
  • 用 Chai 和 Mocha 测试 Express 应用程序

    用 Chai 和 Mocha 测试 Express 应用程序 前言 在开发 Web 应用的过程中,经常需要测试我们的代码,以保证它们能够按照预期的方式工作。本文将介绍使用 Chai 和 Mocha 两...

    8 天前
  • 利用 ES8 中的 Object.values() 和 Object.entries() 简化前端代码

    ES8(ECMAScript 2017)带来了很多新的特性,其中包含了两个新的 Object 方法:Object.values() 和 Object.entries()。

    8 天前
  • 如何在 Enzyme 测试中模拟 React Native 的摄像机?

    前言 Enzyme 是 React 生态系统中常用的测试工具之一,通常用于测试 React 组件的行为和外观。但是,当涉及到 React Native 和移动端应用开发时,如何在 Enzyme 中测试...

    8 天前
  • PM2如何监控多个Node.js应用

    介绍 PM2是一个基于Node.js开发的进程管理器。它可以帮助您管理应用程序,确保它们在服务器上保持活动状态,并自动重启它们以避免进程崩溃造成的问题。本文将介绍如何使用PM2监控多个Node.js应...

    8 天前

相关推荐

    暂无文章