# 建立無障礙網頁 ![All About Accessibility](../../../../translated_images/zh-HK/webdev101-a11y.8ef3025c858d897a.webp) > 筆記作者:[Tomomi Imura](https://twitter.com/girlie_mac) ```mermaid journey title 你的無障礙學習歷程 section 基礎 了解用戶: 5: You 測試工具: 4: You POUR 原則: 5: You section 建立技能 語義 HTML: 4: You 視覺設計: 5: You ARIA 技術: 4: You section 精通實踐 鍵盤導航: 5: You 表單無障礙: 4: You 實地測試: 5: You ``` ## 講座前小測驗 [講座前小測驗](https://ff-quizzes.netlify.app/web/) > 網際網路的力量在於其普及性。無論有無障礙,人人均可使用是必須的面向。 > > \- Sir Timothy Berners-Lee,W3C 主任及萬維網發明人 這裡有件事可能會讓你驚訝:當你建立無障礙網站時,你不僅是在幫助有障礙的人——你其實是在為每個人打造更好的網絡! 有沒有注意過街角的人行道斜坡?它們最初是為輪椅設計,但現在也幫助推嬰兒車的人、送貨員使用手推車、旅行者拖著行李,以及騎單車的朋友。這正是無障礙網頁設計的運作方式——幫助單一群體的解決方案往往會惠及所有人。很酷吧? 本課程將探討如何創建真正適合每個人使用的網站,無論他們如何瀏覽網頁。你將學習已內建於網頁標準的實用技術,動手使用測試工具,並了解無障礙如何提升全體使用者的使用體驗。 課程結束時,你將有信心將無障礙作為開發工作流程的自然部分。準備好探索用心設計如何讓數十億用戶暢遊網絡?我們開始吧! ```mermaid mindmap root((網頁無障礙)) Users Screen readers[螢幕閱讀器] Keyboard navigation[鍵盤導航] Voice control[語音控制] Magnification[放大功能] Technologies HTML semantics[HTML 語義] ARIA attributes[ARIA 屬性] CSS focus indicators[CSS 聚焦指示器] Keyboard events[鍵盤事件] Benefits Wider audience[更廣泛的受眾] Better SEO[更佳的搜尋引擎優化] Legal compliance[符合法律規範] Universal design[通用設計] Testing Automated tools[自動化工具] Manual testing[手動測試] User feedback[使用者回饋] Real assistive tech[真實輔助技術] ``` > 你可以在 [Microsoft Learn](https://docs.microsoft.com/learn/modules/web-development-101/accessibility/?WT.mc_id=academic-77807-sagibbon) 參加這堂課! ## 認識輔助技術 在開始寫程式碼之前,讓我們先了解不同能力者如何實際體驗網絡。這不只是理論——理解現實世界的導航模式會讓你成為更棒的開發者! 輔助技術是非常驚人的工具,幫助有障礙的人以你可能沒想到的方式互動網站。掌握這些技術的運作,打造無障礙網頁經驗會變得直覺好用。就像學會用別人的眼睛看自己的程式碼。 ### 螢幕閱讀器 [螢幕閱讀器](https://en.wikipedia.org/wiki/Screen_reader) 是相當先進的技術,能將數位文字轉換成語音或點字輸出。雖然主要為視障者使用,它們對患有閱讀障礙(例如閱讀困難症)的人也非常有幫助。 我喜歡將螢幕閱讀器想像成一位非常聰明的敘述者在朗讀書本。它以邏輯順序朗讀內容,並宣告「按鈕」或「連結」等互動元素,提供鍵盤快捷鍵協助用戶快速跳轉頁面。不過重點是——螢幕閱讀器只有在我們正確構建網站的結構和內容意義時,才有辦法發揮神奇功效。這就是你作為開發者的重要角色! **跨平台熱門螢幕閱讀器:** - **Windows**: [NVDA](https://www.nvaccess.org/about-nvda/)(免費且最流行)、[JAWS](https://webaim.org/articles/jaws/)、[Narrator](https://support.microsoft.com/windows/complete-guide-to-narrator-e4397a0d-ef4f-b386-d8ae-c172f109bdb1/?WT.mc_id=academic-77807-sagibbon)(內建) - **macOS/iOS**: [VoiceOver](https://support.apple.com/guide/voiceover/welcome/10)(內建且功能強大) - **Android**: [TalkBack](https://support.google.com/accessibility/android/answer/6283677)(內建) - **Linux**: [Orca](https://wiki.gnome.org/Projects/Orca)(免費及開源) **螢幕閱讀器瀏覽網頁內容的方式:** 螢幕閱讀器提供多種導航方法,使經驗豐富的使用者能有效率地瀏覽: - **連續閱讀**:從上到下朗讀內容,像閱讀書本 - **地標導覽**:跳轉頁面區塊(標頭、導航、主內容、頁尾) - **標題導航**:跳轉標題,了解頁面結構 - **連結清單**:產生所有連結的列表以快速存取 - **表單控制**:直接在輸入欄位與按鈕之間導航 > 💡 **讓我驚豔的事實**:68% 螢幕閱讀器使用者主要透過標題導航([WebAIM 調查](https://webaim.org/projects/screenreadersurvey9/#finding))。這意味著你的標題結構就像地圖——當你做好它,就真的是在幫助用戶更快找到內容! ### 建立你的測試工作流程 好消息是——有效的無障礙測試並不一定讓人感到複雜!你會想要結合自動化工具(它們很棒地捕捉明顯問題)和部分親身操作的測試。我整理出一套系統化方法,能檢測最多問題又不會耗盡你的一整天: **必要的手動測試流程:** ```mermaid flowchart TD A[🚀 開始測試] --> B{⌨️ 鍵盤導航} B --> C[用Tab鍵瀏覽所有互動元素] C --> D{🎧 螢幕閱讀器測試} D --> E[使用 NVDA/VoiceOver 測試] E --> F{🔍 縮放測試} F --> G[縮放至200%並測試功能] G --> H{🎨 顏色/對比檢查} H --> I[確認所有文字符合對比度] I --> J{👁️ 焦點管理} J --> K[確保焦點指示器可見] K --> L[✅ 測試完成] style A fill:#e3f2fd style L fill:#e8f5e8 style B fill:#fff3e0 style D fill:#f3e5f5 style F fill:#e0f2f1 style H fill:#fce4ec style J fill:#e8eaf6 ``` **逐步測試檢查清單:** 1. **鍵盤導航**:只用 Tab、Shift+Tab、Enter、空白鍵、方向鍵 2. **螢幕閱讀器測試**:啟用 NVDA、VoiceOver 或 Narrator,閉眼導航 3. **縮放測試**:在 200% 與 400% 縮放比例下操作 4. **色彩對比驗證**:檢查所有文字和 UI 元件 5. **焦點指示器測試**:確保所有互動元素有可見焦點狀態 ✅ **從 Lighthouse 開始**:開啟瀏覽器 DevTools,執行 Lighthouse 無障礙稽核,利用結果來指引手動測試的重點。 ### 縮放與放大工具 你知道的,有時手機上的文字太小,你會用雙指捏合手勢放大,或者陽光刺眼時找角度看筆電螢幕?很多人每天必須依賴放大工具來讓內容可讀。這包括視力不足者、老年人,以及任何嘗試在戶外看網站的人。 現代縮放技術不再只是放大文字,而是幫助你製作在任何放大比例下都能操作且美觀的響應式設計。 **現代瀏覽器的縮放功能:** - **頁面縮放**:比例放大所有內容(文字、圖片、版面)-這是首選方法 - **僅文字放大**:放大字體大小但維持原始版面 - **捏合縮放**:手機上的臨時放大手勢 - **瀏覽器支援**:所有現代瀏覽器支援最高 500% 縮放且功能不破壞 **專用放大軟體:** - **Windows**: [放大鏡](https://support.microsoft.com/windows/use-magnifier-to-make-things-on-the-screen-easier-to-see-414948ba-8b1c-d3bd-8615-0e5e32204198)(內建)、[ZoomText](https://www.freedomscientific.com/training/zoomtext/getting-started/) - **macOS/iOS**: [放大器](https://www.apple.com/accessibility/mac/vision/)(內建進階功能) > ⚠️ **設計考量**:WCAG 要求內容在縮放至 200% 時仍保持功能。此時橫向捲動應盡量減少,所有互動元素都應可操作。 ✅ **測試你的響應式設計**:將瀏覽器縮放至 200% 與 400%。你的版面能優雅調整嗎?是否仍可在不過度捲動下使用全部功能? ## 現代無障礙測試工具 既然你已了解使用輔助技術的使用者如何導航網絡,接下來讓我們探索幫助你建立和測試無障礙網站的工具。 想像這樣:自動化工具擅長抓明顯的問題(例如缺 ALT 文字),而實際動手測試則確保網站在真實情境中使用起來良好。兩者結合,讓你有信心網站適合所有人。 ### 色彩對比測試 好消息:色彩對比是最常見的無障礙問題之一,同時也是最容易改善的。良好的對比對每個人都有益——從視障者到在海邊看手機的人。 **WCAG 對比要求:** | 文字類型 | WCAG AA(最低標準) | WCAG AAA(強化標準) | |-----------|-------------------|---------------------| | **一般文字**(小於 18pt) | 4.5:1 對比比例 | 7:1 對比比例 | | **大字體文字**(18pt+ 或 14pt+ 粗體) | 3:1 對比比例 | 4.5:1 對比比例 | | **介面元件**(按鈕、表單邊框) | 3:1 對比比例 | 3:1 對比比例 | **必要測試工具:** - [Colour Contrast Analyser](https://www.tpgi.com/color-contrast-checker/) - 桌面應用程式,帶色彩選取器 - [WebAIM Contrast Checker](https://webaim.org/resources/contrastchecker/) - 網頁版,立即反饋 - [Stark](https://www.getstark.co/) - Figma、Sketch、Adobe XD 設計插件 - [Accessible Colors](https://accessible-colors.com/) - 找適合無障礙的配色組合 ✅ **打造更佳色彩調色盤**:以你的品牌色為起點,使用對比檢查器創建無障礙變體。將這些紀錄為你的設計系統無障礙色彩代碼。 ### 全面無障礙稽核 最有效的無障礙測試結合多種方式。沒有單一工具能抓出所有問題,建立有多種方法的測試流程才能全面覆蓋。 **瀏覽器內建測試(DevTools):** - **Chrome/Edge**:Lighthouse 無障礙稽核 + 無障礙面板 - **Firefox**:無障礙檢視器,含詳細樹狀圖 - **Safari**:Web Inspector 中的稽核分頁,帶 VoiceOver 模擬 **專業測試擴充套件:** - [axe DevTools](https://www.deque.com/axe/devtools/) - 業界標準的自動化測試工具 - [WAVE](https://wave.webaim.org/extension/) - 視覺化反饋與錯誤標示 - [Accessibility Insights](https://accessibilityinsights.io/) - 微軟全方位測試套件 **命令列及持續整合測試:** - [axe-core](https://github.com/dequelabs/axe-core) - JavaScript 自動測試函式庫 - [Pa11y](https://pa11y.org/) - 命令列無障礙測試工具 - [Lighthouse CI](https://github.com/GoogleChrome/lighthouse-ci) - 自動化無障礙評分 > 🎯 **測試目標**:目標在 Lighthouse 無障礙評分達 95+ 作為基本線。請記得,自動工具只能偵測約 30-40% 的問題——手動測試仍不可少! ### 🧠 **測試能力檢測:準備找問題了嗎?** **來看看你對無障礙測試的感覺:** - 現在你覺得哪種測試方法最容易入手? - 你能想像使用全鍵盤操作一天嗎? - 你個人線上遇過哪一種無障礙障礙? ```mermaid pie title "透過不同方法發現的無障礙問題" "自動化工具" : 35 "手動測試" : 40 "用戶反饋" : 25 ``` > **信心提升**:專業無障礙測試人員正是使用這套組合。你正在學習業界標準做法! ## 從根基打造無障礙 無障礙成功的關鍵是從一開始就把它建進基礎。我知道你可能會想「我要晚點再加無障礙功能」,但那就像房子建好才打算裝斜坡一樣。可能嗎?可以。但簡單嗎?不見得。 想像無障礙是房屋規劃——在設計階段就納入輪椅通行,比事後改裝容易得多。 ### POUR 原則:你的無障礙基礎 網頁內容無障礙指南(WCAG)圍繞著四項基本原則,簡稱 POUR。別擔心,它們並非枯燥學術理論!實際上是實用指導,幫助你製作符合每個人需求的內容。 熟悉 POUR 後,無障礙相關決策會更直覺。就像腦海裡有份核對單指引你的設計選擇。讓我們詳解: ```mermaid flowchart LR A[🔍 可感知的
用戶能感知嗎?] --> B[🎮 可操作的
用戶能使用嗎?] B --> C[📖 可理解的
用戶能明白嗎?] C --> D[💪 強健的
在任何地方都能運作嗎?] A1[替代文字
字幕
對比度] --> A B1[鍵盤操作
無癲癇發作
時間限制] --> B C1[清晰語言
可預測
錯誤幫助] --> C D1[有效代碼
相容性
面向未來] --> D style A fill:#e1f5fe style B fill:#e8f5e8 style C fill:#fff3e0 style D fill:#f3e5f5 ``` **🔍 Perceivable(感知性)**:資訊必須以使用者可感知的方式呈現 - 為非文字內容(圖片、影片、音訊)提供文字替代 - 確保所有文字及 UI 元件具足夠色彩對比 - 為多媒體提供字幕及文字稿 - 設計內容在放大至 200% 時仍可正常使用 - 利用多種感官特徵(不僅是顏色)傳達資訊 **🎮 Operable(可操作性)**:所有介面元件必須能以可用的輸入方式操作 - 使所有功能皆可用鍵盤操作 - 提供使用者足夠時間閱讀及互動 - 避免會引發癲癇或前庭系統問題的內容 - 以清晰結構及地標標示協助有效導航 - 確保互動元素目標大小足夠(最低 44px) **📖 Understandable(可理解性)**:資訊及界面操作須清晰易懂 - 使用清楚簡單且適合受眾的語言 - 保持內容顯示和操作方式可預測且一致 - 提供明確的操作指示及錯誤訊息 - 協助使用者理解並修正表單錯誤 - 以合邏輯的閱讀順序及資訊層級組織內容 **💪 Robust(穩健性)**:內容必須能在不同技術及輔助設備上可靠運作 - **以有效的語意 HTML 作為基礎** - **確保與現在及未來輔助技術相容** - **遵循網頁標準及優良標記實務** - **在不同瀏覽器、裝置及輔助工具上測試** - **結構化內容,讓它在不支援進階功能時仍能漸進降級** ### 🎯 **POUR 原則檢查:牢記於心** **對基礎的快速反思:** - 你能想出一個未符合每個 POUR 原則的網站功能嗎? - 哪個原則對你作為開發者來說最自然? - 這些原則如何改善設計,讓所有人受益,而不僅是殘障用戶? ```mermaid quadrantChart title POUR 原則影響矩陣 x-axis 低努力 --> 高努力 y-axis 低影響 --> 高影響 quadrant-1 快速贏得 quadrant-2 主要項目 quadrant-3 之後考慮 quadrant-4 策略重點 Alt Text: [0.2, 0.9] Color Contrast: [0.3, 0.8] Semantic HTML: [0.4, 0.9] Keyboard Nav: [0.6, 0.8] ARIA Complex: [0.8, 0.7] Screen Reader Testing: [0.7, 0.6] ``` > **記住**:從高影響、低成本的改進開始。語義化 HTML 和替代文字能帶來最高的無障礙提升,同時成本最低! ## 建立無障礙的視覺設計 良好的視覺設計和無障礙是並行不悖的。當你以無障礙為設計考量時,通常會發現這些限制促使你找到更簡潔、更優雅的解決方案,惠及所有使用者。 讓我們探討如何創造對所有人都合適的視覺吸引設計,不管他們的視覺能力如何,或在什麼條件下閱覽你的內容。 ### 顏色與視覺無障礙策略 顏色在溝通上非常有力,但絕不應該是傳遞重要資訊的唯一方式。超越顏色的設計創造更健全且包容的體驗,適用於更多情境。 **針對色覺差異設計:** 約有 8% 的男性與 0.5% 的女性有某種程度的色覺差異(常稱「色盲」)。最常見的類型是: - **綠色盲(Deuteranopia)**:難以分辨紅色與綠色 - **紅色盲(Protanopia)**:紅色看起來較暗 - **藍黃色盲(Tritanopia)**:難以分辨藍與黃(較少見) **包容性顏色策略:** ```css /* ❌ Bad: Using only color to indicate status */ .error { color: red; } .success { color: green; } /* ✅ Good: Color plus icons and context */ .error { color: #d32f2f; border-left: 4px solid #d32f2f; } .error::before { content: "⚠️"; margin-right: 8px; } .success { color: #2e7d32; border-left: 4px solid #2e7d32; } .success::before { content: "✅"; margin-right: 8px; } ``` **超越基礎對比要求:** - 用色盲模擬器測試你的色彩選擇 - 在顏色編碼旁使用圖案、紋理或形狀 - 確保互動狀態在無顏色情況下依然可辨識 - 考慮設計在高對比模式下的呈現 ✅ **測試你的色彩無障礙**:使用像 [Coblis](https://www.color-blindness.com/coblis-color-blindness-simulator/) 等工具,檢視你的網站在不同色覺用戶眼中的樣子。 ### 焦點指示器與互動設計 焦點指示器就像數位光標—它告訴鍵盤使用者目前聚焦在頁面上的位置。設計良好的焦點指示器使互動明確且可預期,提升每個人的體驗。 **現代焦點指示器最佳實踐:** ```css /* Enhanced focus styles that work across browsers */ button:focus-visible { outline: 2px solid #0066cc; outline-offset: 2px; box-shadow: 0 0 0 4px rgba(0, 102, 204, 0.25); } /* Remove focus outline for mouse users, preserve for keyboard users */ button:focus:not(:focus-visible) { outline: none; } /* Focus-within for complex components */ .card:focus-within { box-shadow: 0 0 0 3px rgba(74, 144, 164, 0.5); border-color: #4A90A4; } /* Ensure focus indicators meet contrast requirements */ .custom-focus:focus-visible { outline: 3px solid #ffffff; outline-offset: 2px; box-shadow: 0 0 0 6px #000000; } ``` **焦點指示器基本要求:** - **可見性**:與周圍元素對比度至少達 3:1 - **寬度**:元素周圍厚度至少 2px - **持續性**:直到焦點移動至其他位置都應保持可見 - **區別性**:須在視覺上與其他 UI 狀態明顯區隔 > 💡 **設計秘訣**:優秀的焦點指示器通常結合輪廓線、盒子陰影及顏色變化,確保在各種背景和情境均清晰可見。 ✅ **審核焦點指示器**:透過 Tab 鍵瀏覽你的網站,注意哪些元素有明確焦點指示?有沒有難以看清或完全沒有的? ### 語義化 HTML:無障礙的基礎 語義化 HTML 就像是為輔助技術提供網站的 GPS。當你使用適合用途的 HTML 元素時,等於是為螢幕朗讀器、鍵盤及其他工具提供詳細導航路線,協助用戶有效瀏覽。 我喜歡這個比喻:語義化 HTML 的差別就像整齊分類並有清楚標示的圖書館,與書籍雜亂無章散落的倉庫。兩處的書籍數量相同,但你會願意在哪裡找書?就是這個道理! ```mermaid flowchart TD A[🏠 HTML 文件] --> B[📰 頁首] A --> C[🧭 導航] A --> D[📄 主要內容] A --> E[📋 頁尾] B --> B1[h1: 網站名稱
標誌與品牌] C --> C1[ul: 導航列表
主要連結] D --> D1[article: 內容
section: 子部分] D --> D2[aside: 側欄
相關內容] E --> E1[nav: 頁尾連結
版權資訊] D1 --> D1a[h1: 頁面標題
h2: 主要部分
h3: 子部分] style A fill:#e3f2fd style B fill:#e8f5e8 style C fill:#fff3e0 style D fill:#f3e5f5 style E fill:#e0f2f1 ``` **無障礙頁面結構的構件:** ```html

Your Site Name

Article Title

Published on

First Section

Content that relates to this section...

Second Section

More related content...

``` **語義化 HTML 如何改造無障礙體驗:** | 語義元素 | 用途 | 螢幕朗讀器受益 | |-------------------|--------------|--------------------------------| | `
` | 頁面或區塊標頭 | 「橫幅地標」—快速導覽頁首 | | `