CSS Podcast - 018: Focus
在網頁上,您點選連結,讓使用者略過網站的導覽頁面,直接前往主要內容。這類連結通常稱為跳轉連結或錨點連結。 當使用者透過鍵盤 (使用 Tab 和 Enter 鍵) 啟用該連結時,主要內容容器會出現焦點環。為什麼會這樣?
這是因為 <main>
具有 tabindex="-1"
屬性值。
也就是說,可以透過程式輔助方式聚焦
因為 #main-content
而指定 <main>
瀏覽器網址列中的 id
相符,而該字串會接收程式輔助焦點。
在這些情況下,您可能會想移除焦點樣式,但謹慎且妥善地處理焦點,有助於打造良好且易於存取的使用者體驗。這也是讓互動內容更有趣的好方法。
為什麼「焦點」很重要?
身為網頁開發人員,您有責任讓網站對所有人皆可存取且無障礙。使用 CSS 建立無障礙焦點狀態是這項責任的一部分。
焦點樣式可協助使用鍵盤或切換控制項等裝置的使用者瀏覽及與網站互動。如果元素獲得焦點,但沒有視覺提示,使用者可能會忘記焦點所在位置。這可能會產生瀏覽問題,並導致不必要的行為。 指出追蹤的連結有誤
元素取得焦點的方式
某些元素會自動取得焦點,這些元素會接受互動和輸入,例如 <a>
、<button>
、<input>
和 <select>
。簡單來說,就是所有表單元素、按鈕和連結。一般來說,你可使用 Tab 鍵瀏覽網站的可聚焦元素,按 Shift 鍵和 Shift + Tab 鍵前往下一頁。
此外,還有一個名為 tabindex
的 HTML 屬性可讓您變更 Tabing 索引,也就是
依焦點排列元素的順序。每當有人按下 Tab 鍵
或焦點隨著網址雜湊變更或 JavaScript 事件變動
如果 HTML 元素上的 tabindex
設為 0
,
可以透過 Tab 鍵接收焦點,並遵循全域分頁索引
根據文件來源順序定義
如果您將 tabindex
設為 -1
,則只能透過程式設計接收焦點,也就是只有在 JavaScript 事件發生或雜湊發生變更 (與網址中的元素 id
相符) 時才會接收焦點。如果您將 tabindex
設為大於 0
的任何值,系統就會將其從全域分頁索引中移除,該索引由文件來源順序定義。現在分頁順序會定義為 tabindex
的值,
因此,舉例來說,含有 tabindex="1"
的元素會先聚焦在含有 tabindex="2"
的元素之前。
焦點樣式
元素獲得焦點時,預設的瀏覽器行為是顯示焦點環。 這個聚焦環會因瀏覽器和作業系統而異。
您可以在 CSS 中變更這項行為,使用您在虛擬類別課程中學到的 :focus
、:focus-within
和 :focus-visible
虛擬類別。請務必設定採用「對比」元素預設樣式的焦點樣式。
舉例來說,常見的做法是使用 outline
屬性。
a:focus {
outline: 2px solid slateblue;
}
outline
屬性可能會顯示得太靠近連結文字,但 outline-offset
屬性可解決這個問題,因為它會新增額外的視覺 padding
,而不會影響元素填入的幾何大小。outline-offset
的正數值會將外框推向外側,負值則會將外框拉向內側。
目前在部分瀏覽器中,如果元素上設有 border-radius
且使用 outline
,兩者就不會相符,輪廓會出現尖銳的角落。因此
建議您使用模糊處理半徑較小的 box-shadow
,因為 box-shadow
會裁剪成這個形狀,
為 border-radius
,
但這個樣式不會顯示在 Windows 高對比模式中。
這是因為 Windows 高對比模式不會套用陰影
而且大多會忽略背景圖片,以偏好使用者的偏好設定。
摘要說明
建立與元素預設狀態形成對比的聚焦狀態相當重要。預設的瀏覽器樣式已為您完成這項作業,但如果您要變更這項行為,請注意下列事項:
- 請勿在可接收鍵盤焦點的元素上使用
outline: none
。 - 請勿使用
box-shadow
取代outline
樣式。它們不會顯示在 Windows 高對比模式中 - 只有在必要的情況下,才需要在 HTML 元素上為
tabindex
設定正值。 - 確保聚焦狀態與預設狀態非常清楚。
隨堂測驗
測驗您對「專注」的瞭解
以下何者是可自動聚焦的元素?
<input>
<button>
<a>
<output>
<p>
<select>
下列哪些輸入裝置可以設定焦點?