無障礙設計(accessibility,常縮寫 a11y)不是替少數人做的善事,而是整個介面品質的照妖鏡。一個對盲人、鍵盤使用者、色弱者友善的介面,往往對所有人都更清楚、更好用——這叫「路緣石效應」:當初為輪椅切低的人行道路緣,最後是推嬰兒車、拉行李箱、騎腳踏車的每個人都受惠。2026 年隨著歐盟《歐洲無障礙法》(EAA)正式對民間數位產品生效、各國法律訴訟增加,a11y 從「加分項」變成「合規底線」。今天把 WCAG 的四大原則與 ARIA 的正確用法,一次講到能落地。
📖 學
WCAG:無障礙的國際標準與 POUR 四原則
**WCAG(Web Content Accessibility Guidelines)**是 W3C 制定的無障礙國際標準,也是各國法規(美國 ADA/Section 508、歐盟 EAA)背後引用的技術基準。它的核心是四個原則,縮寫 POUR:
可感知(Perceivable):資訊不能只用單一感官傳達。圖片要有替代文字(alt text)讓螢幕報讀器念出、影片要有字幕、色彩不能是傳遞資訊的唯一手段(色弱者看不出「紅色代表錯誤」)。
可操作(Operable):所有功能都能用鍵盤完成,不能只靠滑鼠。要有清楚的鍵盤焦點指示(focus indicator)、不能有會誘發癲癇的閃爍、給使用者足夠時間完成操作。
可理解(Understandable):內容與操作要可預期。表單錯誤要明確說明哪裡錯、怎麼改;導覽與互動行為要一致,不能同一個按鈕這頁一個樣、那頁又一個樣。
穩健(Robust):程式碼要夠標準,能被各種輔助技術(螢幕報讀器、語音控制)正確解讀,且隨技術演進仍可用。
WCAG 還分三個符合等級:A(最低)、AA(業界與法規普遍要求的標準)、AAA(最高、常難全面達成)。實務上「達到 AA」是絕大多數專案的目標,也是多數法規的門檻。
對比度:最常見也最好修的一關
WCAG AA 要求一般文字與背景的對比度至少 4.5:1、大字(約 18pt 以上或粗體 14pt)至少 3:1。這是最常見的失分點——淺灰字配白底看起來「很有質感」,卻讓低視力者、在陽光下看手機的人根本讀不到。這一關幾乎零成本可修(調一下顏色明度),卻極大改善所有人的可讀性,是投報率最高的無障礙工作。搭配前陣子談的 APCA(進階感知對比演算法),可以把「合規底線用 WCAG、可讀性天花板用 APCA」雙層檢驗。
語意化 HTML:無障礙的地基
最容易被忽略、也最重要的一件事:先用對的原生 HTML 標籤,就解決了大半無障礙問題。 用 <button> 而不是套了點擊事件的 <div>、用 <nav>/<main>/<header> 標出頁面地標、用 <label> 綁定表單欄位、標題用 <h1>~<h6> 建立正確層級——原生元素自帶鍵盤操作、焦點行為與螢幕報讀器語意,全都免費。很多開發者跳過這步、用一堆 <div> 拼介面,再用 ARIA 硬補語意,事倍功半又容易出錯。
ARIA:只在原生做不到時才補,別亂用
**ARIA(Accessible Rich Internet Applications)**是一組屬性,用來告訴輔助技術「這個元素是什麼角色、什麼狀態」,例如 role、aria-label、aria-expanded、aria-live。它的存在是為了補原生 HTML 的不足——當你做出一個原生標籤沒有的複雜元件(自訂下拉、分頁標籤、即時通知),才用 ARIA 描述它的角色與狀態。
但這裡有一條鐵律,也是無障礙圈最有名的告誡:「No ARIA is better than bad ARIA」——用錯的 ARIA 比不用還糟。 因為錯誤的 ARIA 會覆蓋掉原生語意,反而騙過螢幕報讀器、讓使用者更困惑。第一守則因此是:能用原生 HTML 就別用 ARIA。 只有在原生真的做不到時,才小心地加上必要的 ARIA,並務必實測。
動態內容與焦點管理
單頁應用(SPA)與 AI 串流介面帶來新挑戰:內容動態變化時,螢幕報讀器不會自動知道。要用 aria-live(如 polite/assertive)宣告即時更新(新訊息、錯誤提示、載入完成),讓報讀器適時念出;打開對話框(modal)時要把焦點移進去、關閉時移回觸發按鈕,並把焦點「困」在對話框內(focus trap),避免鍵盤使用者跑到背景頁面迷路。這些焦點管理細節,是動態介面無障礙的成敗關鍵。
🧠 記
- a11y 是介面品質的照妖鏡:對障礙者友善的設計,靠「路緣石效應」讓所有人受惠。
- 2026 年歐盟 EAA 生效,無障礙從加分項變合規底線。
- WCAG 四原則 POUR:可感知、可操作、可理解、穩健;符合等級 A/AA/AAA,實務目標是 AA。
- 對比度 AA 要求一般文字 4.5:1、大字 3:1,是最常見失分點也最好修、投報率最高。
- 語意化 HTML 是地基:用對 button/nav/label/h1-h6,一半無障礙問題自動解決。
- ARIA 只在原生做不到時才補描述角色與狀態;鐵律「用錯的 ARIA 比不用還糟」。
- 第一守則:能用原生 HTML 就別用 ARIA。
- 動態介面用 aria-live 宣告即時更新,對話框要做焦點移入與 focus trap。
✍️ 實踐
- 拿你的介面做「拔滑鼠測試」:只用鍵盤 Tab/Enter/Esc 走一遍,能否完成所有操作、焦點指示是否清楚可見。
- 用對比度檢查工具掃一次文字與背景,把不到 4.5:1 的淺灰字補到合規——這是今天就能修完的低垂果實。
- 審視程式碼:把套了點擊事件的
<div>換成<button>,把表單欄位用<label>正確綁定。 - 檢查所有有意義的圖片是否有 alt 文字、裝飾性圖片是否用空 alt,別讓報讀器念出無意義內容。
- 盤點你頁面上的 ARIA:刪掉任何原生標籤本來就能表達、卻被 ARIA 重複或覆蓋的用法。
- 用螢幕報讀器(Mac VoiceOver/Windows NVDA)實際聽一次你的關鍵流程,這比任何自動化工具都真實。
🔗 延伸學習
- W3C — WCAG 2 概覽
- MDN — ARIA 基礎與最佳實踐
- W3C — ARIA Authoring Practices Guide (APG)
- WebAIM — Contrast Checker
💬 問 AI
我想幫我的產品做好無障礙(a11y),從最高投報率的地方開始,而不是一次追求完美。
我的情況:
- 產品類型與技術棧:{待填,例如 React 網站/行動 App}
- 目前的合規目標:{待填,例如 WCAG 2 AA/歐盟 EAA}
- 我最沒把握的環節:{待填,例如鍵盤操作/ARIA/對比度}
請幫我:
1. 用 POUR 四原則盤點我的介面最可能踩到的無障礙問題,並依「投報率」排序該先修哪些。
2. 針對我的技術棧,給出「先用語意化 HTML、只在必要時補 ARIA」的具體改法與常見錯誤。
3. 出 2 個問題考我,檢查我是否理解「用錯的 ARIA 比不用還糟」與焦點管理,而不只是看過。