讀過前篇文章,對 WAI-ARIA 已經有基本認知,就可以來認識 ARIA 的基本要素:角色、狀態、屬性,它提供特殊的可訪問性「屬性 Attributes」,可以添加到任何標記中。
本篇文章學習目的:
<input type="checkbox"> <!-- 不用加上 role="checkbox" -->
以 MDN 的進度條範例說明:
<div id="percent-loaded" role="progressbar" aria-valuenow="75" aria-valuemin="0" aria-valuemax="100" /></div>
這個進度條是使用 <div>
建立的,它不是非常具有描述性。
role
的值「 progressbar」通知瀏覽器該元素實際上是一個基於 JavaScript 的進度條 Widget。aria-valuemin
和 aria-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);
}
(來源: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-*
屬性,以讓使用者能夠預期該功能的操作行為。
角色一共分為六類
<!-- 一個頁面中若有重複的導航列 -->
<div role=”navigation” aria-label=”Main menu”> ... </div>
<div role=”navigation” aria-label=”User menu”> ... </div>
詳細的角色分類列表與其定義請直接參考 5.3 Categorization of Roles 。
角色分成這麼多類型,還真的都有其目的與走向,看了有點眼花!不過我們也不用全背,這篇文章只是根據官方文件先整理起來的快速查閱表,之後實作會以 3~5 為主,這是我比較想知道的地方!
想請教一下 role 一定要使用在 WAI-ARIA 規範好的這些嗎(就是你文章所寫的) 還是也可以自定義呢?
使用 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
謝謝妳的發問!!妳的文章我拜讀好多,厲害!
您好 公司要我幫產品做無障礙
我遇到很多語音亂碼的情況(聽不懂他在講什麼)
不知道要去哪找相關的解決資料
請問可能會有什麼解決方式呢@@?