跳到主要內容

Dialog

Demo 與 Accessibility Tree

Accessibility Tree

觀察對象:開啟中的對話框。 下列是操作之後會量到的值。

Role
dialog
Status
(無狀態)
Name
刪除這筆紀錄?
Description
刪除後無法復原,確定要繼續嗎?

刪除這筆紀錄?

刪除後無法復原,確定要繼續嗎?

鍵盤操作

按鍵行為
Enter / Space在觸發按鈕上開啟對話框。
Tab在對話框內的可聚焦元素之間循環,不會跑到背景內容。
Shift + Tab反向循環,同樣被限制在對話框內。
Esc關閉對話框,焦點回到原本的觸發元素。

ARIA 屬性

屬性值用途
roledialog由 <dialog> 元素隱含提供,不需另外書寫。
aria-modaltrue由 showModal() 隱含提供,告訴輔助科技背景內容暫時不可用。
aria-labelledby標題元素的 id讓對話框的 accessible name 取自可見標題,兩者不會不一致。
aria-describedby說明元素的 id讓說明文字跟著名稱一起播報;少了它,那句警告只有往下瀏覽才讀得到。只適用於簡短說明 —— 若內容是需要逐項導覽的清單、表格或多段文字,不能用它一次關聯。
aria-label關閉關閉鈕內只有圖示,需要文字名稱才有可用的按鈕標籤。
aria-hiddentrue頂部橘色裝飾條與關閉鈕圖示都是純視覺,不應進入無障礙樹。
(結構)元素位置操作對話框所需的所有元素都必須是 role=dialog 的子階層。放在對話框外的按鈕,輔助科技使用者到不了。
(結構)背景遮蔽開啟時背景內容必須在視覺上被遮蔽或淡化,並且無法操作。這裡由 ::backdrop 的半透明深綠與模糊達成,不可操作則由 showModal() 保證。
(舊式)aria-hidden=true在不支援 <dialog> 的環境改用舊式做法時,要在每個背景層元素上各自設定 aria-hidden=true,而且對話框本身絕不能落在任何 aria-hidden=true 元素的子階層裡 —— 否則整個對話框從無障礙樹上消失。

WCAG 對應

  • 標題以 aria-labelledby 與對話框關聯,而不是只在視覺上靠近。

  • 等級 A2.1.1 鍵盤

    開啟、操作、關閉全程可用鍵盤完成,不依賴滑鼠點擊遮罩。

  • 焦點雖然被限制在對話框內,但 Esc 一定能離開,不構成陷阱。

  • 開啟時焦點進入對話框,關閉時回到觸發它的按鈕。

  • 對話框內每個可聚焦元素都有橘色 focus ring。

  • role=dialog、accessible name、aria-modal 皆由平台或明寫屬性提供。

APG 規則

  • 元件語意

    對話框容器具有 dialog 角色

    對話框的容器須設定 role=dialog。

  • 頁面結構

    操作對話框所需的元素須位於 role=dialog 之內

    操作對話框所需的所有元素,都須是 role=dialog 元素的子階層元素。

  • 元件語意

    對話框須設定 aria-modal=true

    對話框的容器須設定 aria-modal=true。

  • 焦點管理

    對話框開啟時須阻止操作背景內容

    對話框開啟時,應用程式須防止使用者操作對話框外的內容。

  • 焦點管理

    對話框開啟時須在視覺上遮蔽背景內容

    對話框開啟時,對話框外的背景內容在視覺上須被遮蔽或淡化。

  • 元件語意

    對話框須具有無障礙名稱

    對話框須以 aria-labelledby 關聯可見標題,或提供 aria-label 作為無障礙名稱。

  • 元件語意選做

    僅在說明簡短時才使用 aria-describedby

    對話框若設定 aria-describedby,該屬性須指向說明用途或訊息的內容;若該內容是需要逐項導覽的清單、表格或多段文字,則不得使用 aria-describedby 一次關聯。

  • 元件語意選做

    舊式 aria-hidden 須隱藏停用的背景但不得隱藏對話框

    若使用舊式 aria-hidden 對輔助科技隱藏停用的背景內容,須在每個包含該背景層的元素上設定 aria-hidden=true,且對話框元素不得位於任何 aria-hidden=true 元素的子階層中。

  • 焦點管理

    開啟對話框時焦點須移至內部適當位置

    對話框開啟時,焦點須移至框內符合內容與任務的位置:內容較長或結構複雜時,移至內容起始的靜態元素;任務不可逆時,移至影響最小的操作;單純提供資訊或繼續流程時,移至最可能使用的控制元件。

  • 焦點管理

    Tab 焦點只會在對話框中循環

    按下 Tab 鍵時,焦點僅能在對話框內移至下一個可透過 Tab 鍵到達的元素;若焦點位於最後一個元素時,則須移回第一個元素。

  • 焦點管理

    Shift+Tab 焦點只會在對話框中循環

    按下 Shift+Tab 鍵時,焦點僅能在對話框內移至上一個可透過 Tab 鍵到達的元素;若焦點位於第一個元素時,則須移至最後一個元素。

  • 焦點管理選做

    對話框不得使用正數 tabindex

    對話框不得以大於 0 的 tabindex 值控制其 Tab 順序。

  • 鍵盤操作

    Esc 鍵可關閉對話框

    按下 Esc 鍵須關閉對話框。

  • 焦點管理

    關閉對話框後焦點須回到合理位置

    關閉對話框後,焦點須回到原觸發元素;若該元素已不存在,或流程另有更合理的位置,則移至能提供合理流程的其他元素。

  • 鍵盤操作選做

    對話框須提供可見且可透過 Tab 到達的關閉按鈕

    對話框的 Tab 鍵順序中,須包含可見的關閉按鈕,例如關閉或取消。