DOM 順序很重要

預設 DOM 順序的重要性

Dave Gash
Dave Gash
Meggin Kearney
Meggin Kearney

使用原生元素是瞭解焦點行為的好方法,因為系統會根據元素在 DOM 中的位置,自動將焦點插入分頁順序。

舉例來說,您可能有三個按鈕元素,一個依序在 DOM 中。按下 Tab 即可將焦點移至每個按鈕。請嘗試點選下方的程式碼區塊,移動焦點導覽起點,再按下 Tab 鍵,透過按鈕移動焦點。

<button>I Should</button>
<button>Be Focused</button>
<button>Last!</button>

但請務必注意,使用 CSS 時, DOM 可能會以一個順序存在,但在畫面上顯示的順序不同。舉例來說,如果您使用 float 等 CSS 屬性將一個按鈕移至右側,按鈕會以不同的順序顯示在畫面上。不過,由於 DOM 中的順序保持不變,因此分頁順序也會相同。當使用者在頁面中切換分頁時,按鈕會以非直覺的順序獲得焦點。請嘗試點選下方的程式碼區塊,移動焦點導覽起點,然後按下 Tab 以透過按鈕移動焦點。

<button style="float: right">I Should</button>
<button>Be Focused</button>
<button>Last!</button>

使用 CSS 變更螢幕上元素的視覺位置時,請務必小心操作。這可能會導致分頁順序四處移動,看似隨機且混淆使用者,依賴鍵盤。因此,Web AIM 檢查清單指出的讀取和導覽順序 (由程式碼順序決定) 應有邏輯和符合直覺的 1.3.2 節

原則上,建議您盡量頻繁切換網頁,以免不小心打錯分頁順序。這個習慣比較好 不需要花費太多心力

畫面外內容

如果您目前沒有顯示的內容,但內容仍須放在 DOM 中 (例如回應式側邊導覽),該怎麼辦?如果這類元素在畫面關閉時進入焦點,看起來可能會像焦點消失,並在使用者分頁重複出現時,顯然是不想要的效果。在理想情況下,我們應避免面板在螢幕外時取得焦點,並只允許在使用者與其互動時聚焦。

畫面外滑入式面板可能會搶走焦點。

您有時可能需要多處理一些偵測工作,才能找出焦點已移至何處。您可以使用控制台中的 document.activeElement 確認目前聚焦的元素。

找出目前聚焦的畫面元素後,可以將其設為 display: nonevisibility: hidden,然後將其設為 display: blockvisibility: visible,然後再向使用者顯示。

滑入式面板設為不顯示。
設為顯示區塊的滑入式面板。

一般來說,我們建議開發人員在每次發布前,先透過分頁瀏覽網站,確認分頁順序不會消失或跳出邏輯順序。如果答案為是,請務必使用 display: nonevisibility: hidden 正確隱藏螢幕外內容,或是在 DOM 中重新排列元素的實際位置,讓元素按照邏輯順序排列。