# 建立無障礙網頁 ![關於無障礙設計](../../../../translated_images/webdev101-a11y.8ef3025c858d897a403a1a42c0897c76e11b724d9a8a0c0578dd4316f7507622.mo.png) > Sketchnote 作者:[Tomomi Imura](https://twitter.com/girlie_mac) ```mermaid journey title Your Accessibility Learning Adventure section Foundation Understanding Users: 5: You Testing Tools: 4: You POUR Principles: 5: You section Build Skills Semantic HTML: 4: You Visual Design: 5: You ARIA Techniques: 4: You section Master Practice Keyboard Navigation: 5: You Form Accessibility: 4: You Real-world Testing: 5: You ``` ## 課前測驗 [課前測驗](https://ff-quizzes.netlify.app/web/) > 網路的力量在於其普遍性。無論是否有障礙,人人都能使用是其核心。 > > \- Sir Timothy Berners-Lee,W3C 主任及全球資訊網的發明者 以下可能會讓你感到驚訝:當你建立無障礙網站時,不僅僅是在幫助有障礙的人,實際上你是在讓網路對所有人都更友好! 你是否注意過街角的斜坡?它們最初是為輪椅設計的,但現在也幫助了推嬰兒車的人、使用手推車的送貨員、拖著行李的旅客,甚至是騎自行車的人。無障礙網頁設計的運作方式正是如此——為某一群體設計的解決方案往往能惠及所有人。是不是很棒? 在這節課中,我們將探討如何建立真正適合所有人使用的網站,無論他們如何瀏覽網頁。你將學到已經內建於網頁標準中的實用技術,親自操作測試工具,並了解無障礙設計如何讓你的網站對所有使用者更友好。 在課程結束時,你將有信心將無障礙設計自然地融入你的開發流程。準備好探索如何通過周到的設計選擇讓全球數十億用戶都能使用網路了嗎?讓我們開始吧! ```mermaid mindmap root((Web Accessibility)) Users Screen readers Keyboard navigation Voice control Magnification Technologies HTML semantics ARIA attributes CSS focus indicators 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[🚀 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] 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、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% 的無障礙問題——手動測試仍然是必不可少的! ### 🧠 **測試技能檢查:準備好找出問題了嗎?** **來看看你對無障礙測試的感受:** - 哪種測試方法目前對你來說最容易上手? - 你能想像用僅鍵盤導航一整天嗎? - 你個人在線上遇到過哪些無障礙障礙? ```mermaid pie title "Accessibility Issues Caught by Different Methods" "Automated Tools" : 35 "Manual Testing" : 40 "User Feedback" : 25 ``` > **信心提升**:專業的無障礙測試人員使用的正是這些方法的組合。你正在學習業界標準的實踐! ## 從基礎開始建立無障礙性 無障礙設計成功的關鍵是從第一天就將其融入基礎中。我知道你可能會想「我可以稍後再添加無障礙性」,但這就像試圖在房子建好後再加一個坡道。可能嗎?是的。容易嗎?不太可能。 把無障礙性想像成設計房子——在最初的建築計劃中包含輪椅無障礙設計要比後期改造容易得多。 ### POUR 原則:你的無障礙性基礎 《網頁內容無障礙指導方針》(WCAG)基於四個基本原則,簡稱為 POUR。別擔心——這些並不是枯燥的學術概念!它們實際上是讓內容適合所有人使用的實用指南。 一旦你掌握了 POUR,做出無障礙設計的決定就會變得更加直觀。這就像有了一個指導你設計選擇的心智清單。讓我們來拆解一下: ```mermaid flowchart LR A[🔍 PERCEIVABLE
Can users sense it?] --> B[🎮 OPERABLE
Can users use it?] B --> C[📖 UNDERSTANDABLE
Can users get it?] C --> D[💪 ROBUST
Does it work everywhere?] A1[Alt text
Captions
Contrast] --> A B1[Keyboard access
No seizures
Time limits] --> B C1[Clear language
Predictable
Error help] --> C D1[Valid code
Compatible
Future-proof] --> 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 Principles Impact Matrix x-axis Low Effort --> High Effort y-axis Low Impact --> High Impact quadrant-1 Quick Wins quadrant-2 Major Projects quadrant-3 Consider Later quadrant-4 Strategic Focus 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 Document] --> B[📰 header] A --> C[🧭 nav] A --> D[📄 main] A --> E[📋 footer] B --> B1[h1: Site Name
Logo & branding] C --> C1[ul: Navigation
Primary links] D --> D1[article: Content
section: Subsections] D --> D2[aside: Sidebar
Related content] E --> E1[nav: Footer links
Copyright info] D1 --> D1a[h1: Page title
h2: Major sections
h3: Subsections] 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 如何改變無障礙性:** | 語義元素 | 目的 | 屏幕閱讀器的好處 | |----------|------|------------------| | `
` | 頁面或部分的標題 | 「橫幅地標」- 快速導航到頂部 | | `