# 建立無障礙網頁 ![關於無障礙設計](../../../../translated_images/webdev101-a11y.8ef3025c858d897a403a1a42c0897c76e11b724d9a8a0c0578dd4316f7507622.mo.png) > [Tomomi Imura](https://twitter.com/girlie_mac) 的手繪筆記 ## 課前測驗 [課前測驗](https://ff-quizzes.netlify.app/web/) > 網路的力量在於它的普遍性。無論是否有殘疾,每個人都能使用是其重要的方面。 > > \- Sir Timothy Berners-Lee,W3C主任及萬維網的發明者 以下可能會讓你感到驚訝:當你建立無障礙網站時,你不僅僅是在幫助有殘疾的人——你其實是在讓網路對所有人都更友好! 你是否注意到街角的斜坡?它們最初是為輪椅設計的,但現在它們也幫助了推嬰兒車的人、使用手推車的送貨員、拖著行李箱的旅客以及騎自行車的人。無障礙網頁設計的運作方式正是如此——幫助某一群體的解決方案往往最終能惠及所有人。是不是很酷? 在這堂課中,我們將探討如何創建真正適合所有人使用的網站,無論他們如何瀏覽網頁。你將學到已經內建於網頁標準中的實用技術,親自操作測試工具,並了解無障礙設計如何使你的網站對所有用戶更友好。 在課程結束時,你將有信心將無障礙設計自然地融入你的開發工作流程中。準備好探索如何通過深思熟慮的設計選擇來讓全球數十億用戶都能使用網路了嗎?讓我們開始吧! > 你可以在 [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 graph TD A[Start Testing] --> B{Keyboard Navigation} B --> C[Tab through all interactive elements] C --> D{Screen Reader Testing} D --> E[Test with NVDA/VoiceOver] E --> F{Zoom Testing} F --> G[Zoom to 200% and test functionality] G --> H{Color/Contrast Check} H --> I[Verify all text meets contrast ratios] I --> J{Focus Management} J --> K[Ensure focus indicators are visible] K --> L[Testing Complete] ``` **逐步測試清單:** 1. **鍵盤導航**:僅使用 Tab、Shift+Tab、Enter、Space 和方向鍵 2. **螢幕閱讀器測試**:啟用 NVDA、VoiceOver 或 Narrator,並閉上眼睛導航 3. **縮放測試**:測試 200% 和 400% 的縮放級別 4. **顏色對比驗證**:檢查所有文本和 UI 元件 5. **焦點指示器測試**:確保所有互動元素都有明顯的焦點狀態 ✅ **從 Lighthouse 開始**:打開瀏覽器的開發工具,運行 Lighthouse 無障礙性審核,然後使用結果來指導你的手動測試重點。 ### 縮放和放大工具 你是否曾經在手機上放大文字,或者在陽光明媚的戶外眯著眼睛看筆記本螢幕?許多用戶每天都依賴放大工具來使內容可讀。這包括低視力者、老年人,以及任何曾嘗試在戶外閱讀網站的人。 現代的縮放技術已經超越了僅僅放大內容的功能。了解這些工具的工作原理將幫助你創建在任何放大級別下都能保持功能和吸引力的響應式設計。 **現代瀏覽器的縮放功能:** - **頁面縮放**:按比例縮放所有內容(文本、圖片、佈局)——這是首選方法 - **僅文字縮放**:在保持原始佈局的同時增加字體大小 - **捏合縮放**:移動設備支持的臨時放大手勢 - **瀏覽器支持**:所有現代瀏覽器支持最高 500% 的縮放而不影響功能 **專用放大軟體:** - **Windows**: [Magnifier](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**: [Zoom](https://www.apple.com/accessibility/mac/vision/)(內建且功能強大) > ⚠️ **設計考量**:WCAG 要求內容在縮放至 200% 時仍保持功能性。在此級別,水平滾動應該最小化,所有互動元素應保持可訪問性。 ✅ **測試你的響應式設計**:將瀏覽器縮放至 200% 和 400%。你的佈局是否能優雅地適應?你是否仍然能夠在不過度滾動的情況下訪問所有功能? ## 現代無障礙性測試工具 現在你已經了解人們如何使用輔助技術來導航網路,讓我們來探索幫助你建立和測試無障礙網站的工具。 可以這樣想:自動化工具非常擅長捕捉明顯的問題(例如缺少替代文字),而手動測試則幫助你確保網站在真實世界中使用起來感覺良好。兩者結合,能讓你有信心確保網站適合所有人使用。 ### 顏色對比測試 有個好消息:顏色對比是最常見的無障礙性問題之一,但也是最容易解決的問題。良好的對比度對所有人都有益——從視力受損的用戶到試圖在海灘上閱讀手機的人。 **WCAG 對比度要求:** | 文本類型 | WCAG AA(最低要求) | WCAG AAA(增強要求) | |----------|---------------------|-----------------------| | **普通文本**(小於 18pt) | 對比度比率 4.5:1 | 對比度比率 7:1 | | **大文本**(18pt+ 或 14pt+ 粗體) | 對比度比率 3:1 | 對比度比率 4.5:1 | | **UI 元件**(按鈕、表單邊框) | 對比度比率 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/) - 尋找無障礙顏色調色板 ✅ **建立更好的顏色調色板**:從你的品牌顏色開始,使用對比度檢查工具創建無障礙的變體。將這些記錄為你的設計系統的無障礙顏色標記。 ### 全面無障礙性審核 最有效的無障礙性測試結合了多種方法。沒有單一工具能捕捉所有問題,因此建立包含多種方法的測試例行程序可以確保全面覆蓋。 **基於瀏覽器的測試(內建於開發工具中):** - **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/) - 微軟的全面測試套件 **命令行和 CI/CD 集成:** - [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% 的無障礙性問題——手動測試仍然是必不可少的! ## 從一開始就建立無障礙性 成功的無障礙性設計的關鍵是從第一天起就將其融入基礎中。我知道你可能會想「我可以稍後再添加無障礙性」,但這就像試圖在房子建好後再加一個坡道。可能嗎?是的。容易嗎?不太可能。 把無障礙性想像成設計房子——在初始建築計劃中包含輪椅無障礙性要比後期改造容易得多。 ### POUR 原則:你的無障礙性基礎 《網頁內容無障礙指導方針》(WCAG)基於四個基本原則,簡稱為 POUR。別擔心——這些並不是枯燥的學術概念!它們實際上是為了讓內容適合所有人使用的實用指南。 一旦你掌握了 POUR,做出無障礙性設計決策就會變得更加直觀。這就像擁有一個指導你設計選擇的心智清單。讓我們來分解一下: **🔍 可感知性(Perceivable)**:信息必須以用戶能通過其可用感官感知的方式呈現 - 為非文本內容(圖片、影片、音頻)提供文本替代 - 確保所有文本和 UI 元件具有足夠的顏色對比度 - 為多媒體內容提供字幕和文字記錄 - 設計內容在放大至 200% 時仍保持功能性 - 使用多種感官特徵(不僅僅是顏色)來傳達信息 **🎮 可操作性(Operable)**:所有界面元件必須能通過可用的輸入方式操作 - 確保所有功能可通過鍵盤導航訪問 - 為用戶提供足夠的時間閱讀和與內容互動 - 避免可能引發癲癇或前庭障礙的內容 - 通過清晰的結構和地標幫助用戶高效導航 - 確保互動元素具有足夠的目標大小(至少 44px) **📖 可理解性(Understandable)**:信息和界面操作必須清晰易懂 - 使用清晰、簡單的語言,適合你的受眾 - 確保內容以可預測、一致的方式顯示和操作 - 為用戶輸入提供清晰的指示和錯誤信息 - 幫助用戶理解並糾正表單中的錯誤 - 使用邏輯的閱讀順序和信息層次結構組織內容 **💪 穩健性(Robust)**:內容必須能可靠地在不同技術和輔助設備上運作 - 使用有效的語義 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就像是一個組織良好的圖書館,擁有清晰的分類和有用的標誌,而不是一本書隨意散落的倉庫。兩個地方都有相同的書,但你更願意在哪裡找到你需要的東西?答案顯而易見! **可訪問頁面結構的基石:** ```html

Your Site Name

Article Title

Published on

First Section

Content that relates to this section...

Second Section

More related content...

``` **為什麼語義HTML能改變可訪問性:** | 語義元素 | 目的 | 屏幕閱讀器的好處 | |----------|------|------------------| | `
` | 頁面或部分的標題 | 「橫幅地標」- 快速導航到頂部 | | `