隱藏及更新內容

隱藏輔助技術中的內容

艾麗絲帕克哈爾
Alice Boxhall
戴夫加什
Dave Gash
米金凱爾尼
Meggin Kearney

Aria-隱藏

另一個微調輔助技術使用者體驗的重要技術,是確保只看到網頁中的相關部分接觸到輔助技術。您可以透過多種方式確保 DOM 的某個部分不會向無障礙 API 公開。

首先,在 DOM 中明確隱藏的項目也不會包含在無障礙樹狀結構中。因此,輔助技術使用者看不到 CSS 樣式為 visibility: hiddendisplay: none 或使用 HTML5 hidden 屬性的所有內容。

但如果元素在視覺上未經過算繪,但未明確隱藏,仍會包含在無障礙功能樹狀結構中。其中一種常見技術是,在絕對位置位於畫面外的元素中加入「僅限螢幕閱讀器的文字」。

.sr-only {
    position: absolute;
    left: -10000px;
    width: 1px;
    height: 1px;
    overflow: hidden;
}

此外,如先前所述,您可以透過 aria-labelaria-labelledbyaria-describedby 屬性,讓螢幕閱讀器僅透過參照其他隱藏元素的文字,提供螢幕閱讀器的文字。

如要進一步瞭解如何建立「僅限螢幕閱讀器」文字,請參閱隱藏文字的技術一文,瞭解 WebAIM 的運作方式。

最後,ARIA 是一種機制,能夠使用 aria-hidden 屬性,從無法隱藏的輔助技術中排除內容。將這項屬性套用至元素後,系統會有效將該屬性「及其所有子系」從無障礙功能樹狀結構中移除。唯一的例外是 aria-labelledbyaria-describedby 屬性參照的元素。

<div class="deck">
    <div class="slide" aria-hidden="true">
    Sales Targets
    </div>
    <div class="slide">
    Quarterly Sales
    </div>
    <div class="slide" aria-hidden="true">
    Action Items
    </div>
</div>

舉例來說,如果您要建立會封鎖存取主頁面的某些強制回應 UI,可以使用 aria-hidden。在此情況下,視障的使用者可能會看到某種半透明重疊,指出網頁的大部分功能目前無法使用,但螢幕閱讀器使用者可能仍可探索網頁的其他部分。在此情況下,由於要先前說明建立鍵盤截斷項目,您必須確認頁面中目前超出範圍的部分也是 aria-hidden

現在,您已瞭解 ARIA 的基本概念、原生 HTML 語意如何運作,以及如何在無障礙樹狀結構上執行相當重大的手術,以及變更單一元素的語意,接著我們就來瞭解如何使用這項功能來傳達具時效性的資訊。

aria-live

aria-live 可讓開發人員將網頁的某個部分標示為「已上線」,因為無論網頁的位置為何,系統都應立即向使用者傳達更新內容,而不是就算剛好瀏覽該部分頁面而已。如果元素有 aria-live 屬性,網頁中及其子系的部分稱為「即時區域」

ARIA 即時建立直播區域。

例如,即時區域可能是因使用者動作而顯示的狀態訊息。如果訊息的重要性足以吸引視障的使用者註意,那麼設定其 aria-live 屬性,將輔助技術使用者的注意力引導到這點非常重要。比較這個一般div

<div class="status">Your message has been sent.</div>

與「即時」對應功能搭配使用

<div class="status" aria-live="polite">Your message has been sent.</div>

aria-live 有三個允許的值:politeassertiveoff

  • aria-live="polite" 會指示輔助技術,在使用者完成目前所做變更時通知使用者。因此建議您在重要卻不緊急的情況下使用,並考慮大部分的 aria-live 使用。
  • aria-live="assertive" 會指示輔助技術中斷現狀,並立即提醒使用者這項變更。這僅適用於重要且緊急的更新,例如「發生伺服器錯誤,且您的變更並未儲存;請重新整理頁面」等狀態訊息,或為了讓輸入欄位受到使用者動作 (例如步驟導覽小工具的按鈕) 直接更新而造成的更新。
  • aria-live="off" 會指示輔助技術暫停 aria-live 的干擾。

以下提供幾項小訣竅,確保線上區域能正常運作。

首先,應在初次載入網頁時設定 aria-live 區域。這並非硬性規定,但如果遇到 aria-live 區域相關問題,就可能是問題所在。

第二,不同的螢幕閱讀器對不同類型的變更做出反應。舉例來說,您可以將子系元素的 hidden 樣式從 true 切換為 false,藉此在部分螢幕閱讀器上觸發快訊。

使用 aria-live 的其他屬性可協助您微調要在即時區域變更時向使用者傳達的內容。

aria-atomic 表示在通訊更新時,是否應將整個區域視為整個區域。舉例來說,如果由日、月和年份組成的日期小工具具有 aria-live=truearia-atomic=true,且使用者使用步進器控制項變更當月的值,系統就會再次讀出日期小工具的完整內容。aria-atomic 的值可以是 truefalse (預設值)。

aria-relevant 代表應向使用者顯示的變更類型。部分選項可以單獨使用,也可以做為權杖清單使用。

  • additions,也就是說,任何新增至使用中區域的元素都很重要。例如,如果將 Span 附加到現有的狀態訊息記錄中,表示會向使用者宣布時距 (假設 aria-atomicfalse)。
  • text,意思是新增至任何子系節點的文字內容都相關。例如,修改自訂文字欄位的 textContent 屬性時,系統會向使用者讀取修改後的文字。
  • 移除:表示必須將任何文字或子系節點的移除,告知使用者。
  • all:表示所有變更都相關。不過,aria-relevant 的預設值是 additions text,表示如果沒有指定 aria-relevant,系統便會在元素中加入任何新元素時,更新使用者,而這正是您最可能想要的內容。

最後,aria-busy 可讓您通知輔助技術,說明應暫時忽略元素變更,例如載入內容。一切都就緒後,aria-busy 應設為 false,以便將讀取工具的作業正規化。