iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 7
6

Hi there!

讀過前篇文章,對 WAI-ARIA 已經有基本認知,就可以來認識 ARIA 的基本要素:角色、狀態、屬性,它提供特殊的可訪問性「屬性 Attributes」,可以添加到任何標記中。

TL;DR

本篇文章學習目的:

  • 瞭解何時才需要使用 ARIA
  • 知道角色是一種加在 HTML 上的屬性
  • 知道角色的分類

使用原生語法時,不需用 ARIA 覆蓋原生語義

<input type="checkbox"> <!-- 不用加上 role="checkbox" -->

需要使用 ARIA 的狀況

MDN 的進度條範例說明:

<div id="percent-loaded" role="progressbar" aria-valuenow="75" aria-valuemin="0" aria-valuemax="100" /></div>

這個進度條是使用 <div> 建立的,它不是非常具有描述性。

  • HTML 4 中沒有更多的語義標記可供開發人員使用,因此我們需要包含 ARIA 角色和屬性。 通過向元素添加屬性來指定這些屬性。在這個範例中, role 的值「 progressbar」通知瀏覽器該元素實際上是一個基於 JavaScript 的進度條 Widget。
  • aria-valueminaria-valuemax 屬性指定進度條的最小值和最大值, aria-valuenow 描述其當前狀態。
// 找到 <div> 客製的進度條
var progressBar = document.getElementById("percent-loaded");

// 透過 JS 加上 ARIA 屬性,使輔助工具可以知道它是什麼,並且設好最小值與最大值
progressBar.setAttribute("role", "progressbar");
progressBar.setAttribute("aria-valuemin", 0);
progressBar.setAttribute("aria-valuemax", 100);

// 建立一個準備作為 callback 的 function,當進度一更動,將設定值改成目前進度。
function updateProgress(percentComplete) {
  progressBar.setAttribute("aria-valuenow", percentComplete);
}

角色 Role

(來源:Google Developers

2.1 WAI-ARIA Roles in WAI-ARIA 1.1
A WAI-ARIA role is set on an element using a role attribute, similar to the role attribute defined in Role Attribute.

WAI-ARIA 中定義一系列的角色模型,讓我們可以賦予給元素,充當沒有提供定義結構的 UI Wiget,每個角色有其定位與可以使用的 aria-* 屬性,以讓使用者能夠預期該功能的操作行為。

角色一共分為六類

  1. Abstract Roles 抽象:用於定義通用角色概念,開發者不可使用。
  2. Document Structure Roles 文件結構:描述文件頁面內容的結構,通常不是可互動式的。
  3. Widget Roles 組件功能:
  4. Landmark Roles 標誌:最容易實現的 Role 角色之一,也是為螢幕閱讀器使用者提供顯著直接好處的屬性之一
<!-- 一個頁面中若有重複的導航列 -->
<div role=”navigation” aria-label=”Main menu”> ... </div>
<div role=”navigation” aria-label=”User menu”> ... </div>
  1. Live Region Roles 實時區域:隨時依據狀況更新的角色。
  2. Window Roles 視窗:在應用程式中作為新視窗來展示資訊的角色。

詳細的角色分類列表與其定義請直接參考 5.3 Categorization of Roles

角色分成這麼多類型,還真的都有其目的與走向,看了有點眼花!不過我們也不用全背,這篇文章只是根據官方文件先整理起來的快速查閱表,之後實作會以 3~5 為主,這是我比較想知道的地方!


Reference


上一篇
實踐無障礙網站一定要先知道的 WAI-ARIA 的 5 個重要觀念
下一篇
無障礙網站 WAI-ARIA 的 States and Properties,都是 Attribute 啊!
系列文
實踐無障礙網頁設計(Web Accessibility)30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
Chris
iT邦新手 3 級 ‧ 2019-09-22 19:22:58

哇賽!這也太深入了吧?!厲害!厲害!

Askie Lin iT邦新手 5 級 ‧ 2019-09-27 11:41:05 檢舉

^_______^

1
hannahpun
iT邦新手 3 級 ‧ 2019-12-06 04:09:27

想請教一下 role 一定要使用在 WAI-ARIA 規範好的這些嗎(就是你文章所寫的) 還是也可以自定義呢?

Askie Lin iT邦新手 5 級 ‧ 2019-12-27 22:52:13 檢舉

使用 WAI-ARIA 定義的 Role 唷!
有些標籤本身已具備語義則不需使用(如 <button>),我近期去上無障礙課程,發現文章有漏 ARIA Landmarks Role,已具語義的 HTML5 Semantics Tags 也是需要在標籤上定義「ARIA Landmarks Role」的,作為某些語音報讀軟體的 fallback,在即使不支援語義標籤時依然能清楚標示出區塊。

看這裡:https://www.w3.org/TR/wai-aria-practices/examples/landmarks/index.html

謝謝妳的發問!!妳的文章我拜讀好多,厲害!

0
peace&love
iT邦新手 4 級 ‧ 2021-03-16 15:43:38

您好 公司要我幫產品做無障礙
我遇到很多語音亂碼的情況(聽不懂他在講什麼)
不知道要去哪找相關的解決資料
請問可能會有什麼解決方式呢@@?

我要留言

立即登入留言