跳到主要內容

Toast

Demo 與 Accessibility Tree

Accessibility Tree

觀察對象:live region 容器。

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

鍵盤操作

按鍵行為
(無)Toast 出現時不移動焦點、不中斷使用者當下的動作。這是它與 Dialog 的根本分界。
Tab可以走到關閉鈕,但那是一段很長的路 —— 焦點還在你剛才操作的地方。正因如此,Toast 裡不該放重要的動作。

ARIA 屬性

屬性值用途
rolestatus承載訊息的容器。隱含 aria-live=polite 與 aria-atomic=true,會等使用者當下的播報結束才開口 —— 這正是「不強制中斷」的技術實現。
(時機)動態更新role=status 播報的是內容的變化。容器要先在 DOM 裡,訊息在同一個節點內更新;整個容器被換掉時,部分螢幕閱讀器會當成新節點而不播報。
(名稱)無status 的 nameFrom 只有 author,名稱不從內容取得,所以 Accessibility Tree 上的 Name 永遠是空的。這不是缺漏。
aria-label關閉通知關閉鈕只有圖示,需要文字名稱才有可用的按鈕標籤。
(對照)role=alert需要立刻知道的事用 alert(隱含 assertive),它會插話但仍不搶焦點;非處理不可的事用 role=dialog,它把焦點拉過去鎖住。Toast 的定位是三者中最輕的一層:不插話、不搶焦點。
(位置)避開邊角低視能或使用螢幕放大鏡的人視野受限在畫面中央,躲在右上角或右下角的通知他們根本看不到 —— 不是沒注意到,是不在視野裡。
aria-hiddentrue關閉鈕的圖示是純視覺,名稱已由 aria-label 提供。

WCAG 對應

  • 讓使用者知道內容中的重要變化,而不必中斷手上的工作。訊息出現時網頁不跳轉、不刷新,鍵盤焦點留在原地 —— 這三件事同時成立才算數。

  • 自動消失是時間限制。使用者必須能關閉、調整或延長它,才有足夠時間讀完。

  • 等級 AAA2.2.4 中斷

    通知不能過於頻繁 —— 連續跳出的 Toast 對視覺或認知障礙使用者是實質的妨礙。

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

  • 關閉鈕有橘色 focus ring。

APG 規則

APG 沒有這個 pattern,所以沒有對應的規則編號。這一頁的依據是 WCAG 成功準則與 live region 的既有實務,見上方的 WCAG 對應。