什麼是 ARIA?輔助科技能理解互動元件的關鍵語意
ARIA 是一組角色、狀態與屬性,用來讓輔助科技理解複雜或自訂的互動元件。了解什麼時候該用 ARIA、什麼時候應優先使用原生 HTML。
重點摘要
- No ARIA is better than Bad ARIA。
- 這是 W3C APG 的重要提醒:錯誤的 ARIA 會誤導輔助科技,可能比沒有 ARIA 更糟。
- ARIA 是 Accessible Rich Internet Applications 的縮寫,常寫成 WAI-ARIA。
- ARIA 可以補充角色、狀態與屬性,讓螢幕讀取器等輔助科技理解自訂元件。
- ARIA 不是萬用修補工具;能使用原生 HTML 時,通常應優先使用原生 HTML。
ARIA 是什麼?
ARIA 是 W3C WAI 發展的一組技術規格,用來補足複雜網頁應用程式中的語意資訊。當開發者用 div、span 或 JavaScript 建立自訂元件時,瀏覽器和輔助科技不一定知道它是按鈕、分頁、對話框或即時訊息區域。
ARIA 可以透過 role、aria-expanded、aria-controls、aria-live、aria-label 等屬性,提供輔助科技更多語意與狀態資訊。
先用原生 HTML,再考慮 ARIA
ARIA 最重要的實務原則是:能用原生 HTML 就不要先用 ARIA。原生 button、input、select、dialog、a 等元素通常已經內建鍵盤操作、角色與狀態,瀏覽器和輔助科技也比較能正確理解。
如果用 div 加上 role="button",你仍然需要自己補鍵盤操作、焦點管理、disabled 狀態、名稱與互動回饋。這些細節漏掉任何一項,都可能造成新的無障礙問題。
ARIA 常見用途
ARIA 適合用在原生 HTML 無法完整表達的複雜互動,例如分頁、可展開區塊、對話框、選單、即時狀態更新與自訂元件狀態。
- role:告訴輔助科技元件扮演什麼角色。
- aria-label / aria-labelledby:提供可被讀出的名稱。
- aria-expanded:表示內容目前是否展開。
- aria-controls:描述控制項和被控制內容的關係。
- aria-live:讓動態更新能被輔助科技通知。
- aria-describedby:補充說明或錯誤訊息。
ARIA 用錯會更糟
ARIA 只改變輔助科技接收到的語意,不會自動讓元件變得可操作。加上 role="button" 不會自動支援 Enter 或 Space;加上 aria-expanded 也不會自動展開內容。
錯誤的 ARIA 可能讓螢幕讀取器使用者聽到不正確的角色、狀態或名稱,反而比沒有 ARIA 更難理解。因此,ARIA 應該搭配實際互動、鍵盤操作與螢幕讀取器測試一起驗證。
ARIA 檢查清單
檢查 ARIA 時,不只看屬性有沒有加上去,也要確認它是否和實際互動狀態一致。
- 是否能改用原生 HTML?
- 元件是否有正確的可及名稱?
- role 是否符合實際互動模式?
- aria-expanded、aria-selected、aria-current 等狀態是否即時更新?
- 鍵盤操作是否符合使用者預期?
- 焦點是否被正確管理?
- 螢幕讀取器是否能理解名稱、角色、狀態與說明?
常見問題
ARIA 可以修好所有無障礙問題嗎?
不行。ARIA 主要提供語意與狀態資訊,不會自動補上鍵盤操作、焦點管理、視覺提示或內容品質。
什麼時候不該用 ARIA?
當原生 HTML 元素已經能提供正確語意與互動時,通常不應先用 ARIA 取代它。錯誤或多餘的 ARIA 可能讓輔助科技接收到混亂資訊。
ARIA 和螢幕讀取器有什麼關係?
ARIA 會影響螢幕讀取器取得的名稱、角色、狀態與說明。這能幫助使用者理解自訂元件,但前提是 ARIA 必須和實際互動一致。