跳到主要內容

Alert

Demo 與 Accessibility Tree

Accessibility Tree

觀察對象:live region 容器。

元素目前不在無障礙樹中。

鍵盤操作

按鍵行為
(無)Alert 不接收焦點也沒有自己的鍵盤操作。它出現時不得移動焦點或中斷使用者當下的動作 —— 這正是它與 Alert Dialog 的分界。

ARIA 屬性

屬性值用途
rolealert承載訊息的容器。它隱含 aria-live=assertive 與 aria-atomic=true,會打斷使用者當下的播報 —— 留給真正需要立刻知道的事。
(時機)動態更新role=alert 播報的是內容的變化。頁面載入時就帶著文字的 alert 不會被唸出來;整個容器被換掉時,部分螢幕閱讀器也會當成新節點而不播報。容器要先在 DOM 裡,訊息在同一個節點內更新。
(對照)role=status不急的訊息用 status(隱含 aria-live=polite),它會等使用者當下的播報結束才開口。成功、已儲存這類訊息屬於這一類。
(名稱)無role=alert 的 nameFrom 只有 author —— 名稱不會從內容取得,所以 Accessibility Tree 上的 Name 永遠是空的。這不是缺漏:被播報的是內容的變化本身,不需要先報一個名稱。
aria-hiddentrue紅點是純視覺,訊息的嚴重性已由文字本身表達。

WCAG 對應

  • 狀態訊息要能在不取得焦點的前提下被輔助科技知曉。role=alert 正是為此存在。

  • 警示出現時不得移動焦點,使用者手上的操作不能被搶走。

  • 警示不應自動消失;若採限時關閉,必須保留足夠時間讓人察覺並讀完。

  • 等級 AAA2.2.4 中斷

    警示不能過於頻繁 —— 重複播報對視覺或認知障礙使用者是實質的妨礙。

APG 規則

  • 狀態訊息

    警示元件須具有 alert 角色語意

    包含警示訊息的容器具有 role=alert。

  • 狀態訊息

    警示元件動態出現時,螢幕閱讀器需進行報讀

    警示訊息需於頁面載入後動態顯示或更新,確保螢幕閱讀器能在訊息出現時進行報讀

  • 狀態訊息

    警示元件不會改變鍵盤的聚焦位置

    顯示警示元件時,不得移動鍵盤焦點或中斷使用者操作

  • 時間限制

    警示元件不會在使用者讀取前自動消失

    警示元件應設計成不會自動消失;若採限時關閉,訊息必須保留足夠時間,讓使用者能察覺並完整閱讀。

  • 時間限制

    警示元件不會過度頻繁打斷使用者

    警示元件不會過於頻繁產生,以免重複報讀妨礙視覺或認知障礙使用者操作。