EP53 - 無障礙

更新於 2024/10/30閱讀時間約 23 分鐘
Accessibility 這個觀念,印象中在學習過程有提到
主要能讓視障朋友也能正常讀取網站的資訊,
這篇文章不知道還有提供什麼新資訊呢?~快來看看

網站可及性(也稱為 a11y)指的是創建任何人都能使用的網站的做法,無論是殘障人士、網速緩慢的用戶、使用過時或損壞硬體的人,還是處於不利環境中的人。例如,為視頻添加字幕不僅能幫助聾人和聽力受損的用戶,也能幫助處於嘈雜環境中無法聽見手機的用戶。同樣地,確保文本不會太低對比度,不僅能幫助低視力用戶,也能幫助在強烈陽光下使用手機的用戶。

準備好開始了但不確定從哪裡開始?

查看由World Wide Web聯盟(W3C)提供的《規劃和管理網站可及性指南》。

跳過連結 - Skip link

你應該在每個頁面的頂部添加一個直接鏈接到主要內容區域的連結,這樣用戶可以跳過在多個網頁上重複的內容。

通常這是在 App.vue 的頂部進行,因為這將是所有頁面上的第一個可聚焦元素:

<template>
<ul class="skip-links">
<li>
<a href="#main" ref="skipLink" class="skip-link">跳過到主要內容</a>
</li>
</ul>
</template>

要隱藏這個連結,除非它被聚焦,你可以添加以下樣式:

.skip-link {
white-space: nowrap;
margin: 1em auto;
top: 0;
position: fixed;
left: 50%;
margin-left: -72px;
opacity: 0;
}
.skip-link:focus {
opacity: 1;
background-color: white;
padding: 0.5em;
border: 1px solid black;
}

當用戶更改路由時,將焦點重新放回跳過連結。這可以通過在跳過連結的模板 ref 上調用 focus 來實現(假設使用 vue-router):

<script setup>
import { ref, watch } from 'vue'
import { useRoute } from 'vue-router'

const route = useRoute()
const skipLink = ref()

watch(
() => route.path,
() => {
skipLink.value.focus()
}
)
</script>

閱讀關於跳過到主要內容連結的文件

內容結構 ​- Content Structure

無障礙設計最重要的一部分是確保設計能夠支持無障礙實施。設計應考慮的不僅是色彩對比、字體選擇、文本大小和語言,還有應用中的內容結構。

標題 ​- Headings

用戶可以通過標題導航應用程序。為應用程序的每個部分設置描述性標題,使用戶更容易預測每個部分的內容。關於標題,有一些推薦的無障礙實踐:

  • 按照等級順序嵌套標題:<h1> - <h6>
  • 不要在一個部分內跳過標題
  • 使用實際的標題標籤,而不是僅僅通過樣式設置文本使其看起來像標題

閱讀更多關於標題的信息

範例模板:

<template>
<main role="main" aria-labelledby="main-title">
<h1 id="main-title">主要標題</h1>
<section aria-labelledby="section-title-1">
<h2 id="section-title-1">部分標題</h2>
<h3>部分子標題</h3>
<!-- 內容 -->
</section>
<section aria-labelledby="section-title-2">
<h2 id="section-title-2">部分標題</h2>
<h3>部分子標題</h3>
<!-- 內容 -->
<h3>部分子標題</h3>
<!-- 內容 -->
</section>
</main>
</template>

地標 ​- Landmarks

地標為應用程序中的部分提供編程訪問權限。依賴輔助技術的用戶可以導航到應用程序的每個部分並跳過內容。你可以使用 ARIA 角色來幫助你實現這一點。

raw-image

閱讀更多關於地標的信息

語意表單 - Semantic Forms

在創建表單時,你可以使用以下元素:<form><label><input><textarea><button>

標籤通常放置在表單欄位的上方或左側:

範例模板:

<form action="/dataCollectionLocation" method="post" autocomplete="on">
<div v-for="item in formItems" :key="item.id" class="form-item">
<label :for="item.id">{{ item.label }}: </label>
<input
:type="item.type"
:id="item.id"
:name="item.id"
v-model="item.value"
/>
</div>
<button type="submit">提交</button>
</form>

注意,你可以在表單元素上包含 autocomplete="on",它將應用於表單中的所有輸入欄位。你也可以為每個輸入欄位設置不同的 autocomplete 屬性值

標籤 - Labels

提供標籤來描述所有表單控件的用途;通過 forid 進行鏈接:

範例模板:

<label for="name">姓名: </label>
<input type="text" name="name" id="name" v-model="name" />

如果你在 Chrome 開發者工具中檢查這個元素並打開 Elements 標籤內的 Accessibility 標籤,你會看到輸入框從標籤中獲取其名稱:

raw-image
警告:雖然你可能見過這樣包裹輸入欄位的標籤:
<label>
姓名:
<input type="text" name="name" id="name" v-model="name" />
</label>
但明確設置帶有匹配 id 的標籤更能被輔助技術支持。

aria-label

你也可以使用 aria-label 為輸入欄位提供一個可訪問的名稱。

範例模板:

<label for="name">姓名: </label>
<input
type="text"
name="name"
id="name"
v-model="name"
:aria-label="nameLabel"
/>

可以在 Chrome 開發者工具中檢查這個元素,看看可訪問名稱是如何變化的:

raw-image


aria-labelledby

使用 aria-labelledbyaria-label 類似,但用於屏幕上可見的標籤文本。它與其他元素通過 id 鏈接,你可以鏈接多個 id

範例模板:

<form
class="demo"
action="/dataCollectionLocation"
method="post"
autocomplete="on"
>
<h1 id="billing">賬單</h1>
<div class="form-item">
<label for="name">姓名: </label>
<input
type="text"
name="name"
id="name"
v-model="name"
aria-labelledby="billing name"
/>
</div>
<button type="submit">提交</button>
</form>
raw-image

aria-describedby

aria-describedby 的用法與 aria-labelledby 相似,但提供的是用戶可能需要的附加信息描述。這可以用來描述任何輸入的標準:

範例模板:

<form
class="demo"
action="/dataCollectionLocation"
method="post"
autocomplete="on"
>
<h1 id="billing">賬單</h1>
<div class="form-item">
<label for="name">全名: </label>
<input
type="text"
name="name"
id="name"
v-model="name"
aria-labelledby="billing name"
aria-describedby="nameDescription"
/>
<p id="nameDescription">請提供名字和姓氏。</p>
</div>
<button type="submit">提交</button>
</form>

可以在 Chrome 開發者工具中檢查這個元素,看到使用 aria-labelledbyaria-describedby 獲取的描述。

raw-image


占位符 - Placeholder

避免使用占位符,因為它們可能會讓許多用戶感到困惑。

占位符的問題之一是它們默認不符合顏色對比標準;修正顏色對比會使占位符看起來像是輸入欄位中的預填數據。看下面的例子,你可以看到符合顏色對比標準的姓氏占位符看起來像預填數據:

raw-image

範例模板:

<form
class="demo"
action="/dataCollectionLocation"
method="post"
autocomplete="on"
>
<div v-for="item in formItems" :key="item.id" class="form-item">
<label :for="item.id">{{ item.label }}: </label>
<input
type="text"
:id="item.id"
:name="item.id"
v-model="item.value"
:placeholder="item.placeholder"
/>
</div>
<button type="submit">提交</button>
</form>

CSS:

/* https://www.w3schools.com/howto/howto_css_placeholder.asp */

#lastName::placeholder {
/* Chrome, Firefox, Opera, Safari 10.1+ */
color: black;
opacity: 1; /* Firefox */
}

#lastName:-ms-input-placeholder {
/* Internet Explorer 10-11 */
color: black;
}

#lastName::-ms-input-placeholder {
/* Microsoft Edge */
color: black;
}

最好在輸入欄位之外提供所有用戶填寫表單所需的信息。

說明 - Instructions

在為你的輸入欄位添加說明時,請確保正確鏈接到輸入。你可以提供額外的說明並將多個 id 綁定到 aria-labelledby 中。這允許更靈活的設計。

範例模板:

<fieldset>
<legend>使用 aria-labelledby</legend>
<label id="date-label" for="date">當前日期: </label>
<input
type="date"
name="date"
id="date"
aria-labelledby="date-label date-instructions"
/>
<p id="date-instructions">MM/DD/YYYY</p>
</fieldset>

或者,你可以使用 aria-describedby 將說明附加到輸入:

範例模板:

<fieldset>
<legend>使用 aria-describedby</legend>
<label id="dob" for="dob">出生日期: </label>
<input type="date" name="dob" id="dob" aria-describedby="dob-instructions" />
<p id="dob-instructions">MM/DD/YYYY</p>
</fieldset>

隱藏內容 - Hiding Content

通常,不建議將標籤視覺上隱藏,即使輸入欄位有一個可訪問的名稱。然而,如果輸入欄位的功能可以通過周圍內容理解,我們可以隱藏視覺標籤。

例如,這個搜索欄:

範例模板:

<form role="search">
<label for="search" class="hidden-visually">搜索: </label>
<input type="text" name="search" id="search" v-model="search" />
<button type="submit">搜索</button>
</form>

我們可以這樣做,因為搜索按鈕將幫助視覺用戶識別輸入欄位的用途。

我們可以使用 CSS 視覺上隱藏元素,但保持它們對輔助技術可用:

CSS:

.hidden-visually {
position: absolute;
overflow: hidden;
white-space: nowrap;
margin: 0;
padding: 0;
height: 1px;
width: 1px;
clip: rect(0 0 0 0);
clip-path: inset(100%);
}

aria-hidden="true"

添加 aria-hidden="true" 將從輔助技術中隱藏元素,但對其他用戶仍然可見。不要將它用於可聚焦的元素,只用於裝飾性的、重複的或屏幕外的內容。

範例模板:

<p>這對屏幕閱讀器是可見的。</p>
<p aria-hidden="true">這對屏幕閱讀器是隱藏的。</p>

按鈕 - Buttons

在表單中使用按鈕時,必須設置 type 以防止提交表單。你也可以使用輸入來創建按鈕:

範例模板:

<form action="/dataCollectionLocation" method="post" autocomplete="on">
<!-- 按鈕 -->
<button type="button">取消</button>
<button type="submit">提交</button>

<!-- 輸入按鈕 -->
<input type="button" value="取消" />
<input type="submit" value="提交" />
</form>

功能圖片 - Functional Images​

你可以使用這種技術來創建功能圖片。

  • 輸入欄位 Input fields

這些圖片將作為表單上的提交按鈕使用

範例模板:

<form role="search">
<label for="search" class="hidden-visually">搜索: </label>
<input type="text" name="search" id="search" v-model="search" />
<input
type="image"
class="btnImg"
src="https://img.icons8.com/search"
alt="搜索"
/>
</form>

圖標 Icons

範例模板:

<form role="search">
<label for="searchIcon" class="hidden-visually">搜索: </label>
<input type="text" name="searchIcon" id="searchIcon" v-model="searchIcon" />
<button type="submit">
<i class="fas fa-search" aria-hidden="true"></i>
<span class="hidden-visually">搜索</span>
</button>
</form>

標準 - Standard

World Wide Web 聯盟(W3C)網頁可及性倡議 Web Accessibility Initiative(WAI)為不同的組件制定了網頁可及性標準:

網頁瀏覽器和媒體播放器,包括某些輔助技術方面

著作工具

網頁內容,由開發人員、著作工具和可及性評估工具使用

網頁內容可及性指南 Web Content Accessibility Guidelines(WCAG)

WCAG 2.1WCAG 2.0 的基礎上進行擴展,通過解決網頁的變化來實現新技術。W3C 鼓勵在開發或更新網頁可及性政策時使用 WCAG 的最新版本。

WCAG 2.1 四個主要指導原則 Four Main Guiding Principles(簡稱為 POUR)

  • 可感知
    用戶必須能夠感知所呈現的信息
  • 可操作
    界面表單、控件和導航可操作
  • 可理解
    信息和用戶界面的操作對所有用戶必須是可理解的
  • 穩健
    隨著技術的進步,用戶必須能夠訪問內容

網頁可及性倡議 – 可及的富互聯網應用  Accessible Rich Internet Applications (WAI-ARIA)

W3C 的 WAI-ARIA 提供了如何構建動態內容和高級用戶界面控件的指導。

資源 - Resources

文檔

輔助技術 - Assistive Technologies

屏幕閱讀器

放大工具

測試 - Testing

自動化工具

色彩工具

其他有用工具

用戶 - User

世界衛生組織估計,全球有 15% 的人口存在某種形式的殘疾,其中 2-4% 為嚴重殘疾。這意味著全球約有 10 億人有殘疾,使得殘疾人成為世界上最大的少數群體。

殘疾範圍廣泛,大致可分為四類:

  • 視覺 - 這些用戶可以從屏幕閱讀器、屏幕放大、控制屏幕對比度或盲文顯示器中受益。
  • 聽覺 - 這些用戶可以從字幕、文字記錄或手語視頻中受益。
  • 運動 - 這些用戶可以從多種針對運動障礙的輔助技術中受益:語音識別軟件、眼球追踪、單開關訪問、頭部指示器、吸吮和吹氣開關、超大滾珠鼠標、適應性鍵盤或其他輔助技術。
  • 認知 - 這些用戶可以從補充媒體、內容的結構化組織、清晰簡單的寫作中受益。

請查看 WebAim 提供的以下鏈接,了解用戶的情況:

老實說讀這段很想睡~
相信沒有多少人能認真讀完吧www
心裡是不是想 下次再看看吧www


avatar-img
2會員
71內容數
分享生活趣事~
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
卡關的人生 的其他內容
頁面加載性能可透過PageSpeed Insights、WebPageTest等工具測量,而更新性能則需使用Chrome DevTools、Vue DevTools等進行分析。提升頁面加載性能的技術包括選擇合適架構(SSR或SSG)、(tree-shaking)、(code splitting)等。
在生產部署中,Vue 提供開發環境及生產環境的最佳實踐。開發階段有錯誤警告、驗證等功能,但生產環境須去除開發代碼以提升效能。未使用建構工具時,建議使用 .prod.js 生產版;使用工具如 Vite 或 Vue CLI 時,已預設生產配置,適合進行部署。
Server-Side Rendering (SSR) 是將 Vue.js 組件在伺服器上渲染為 HTML 字串,並直接發送到瀏覽器的一種技術。這樣可以提升頁面顯示速度,尤其在網速慢或設備性能差的情況下。SSR 應用的代碼可在伺服器和客戶端上共享,提高開發效率。
測試對於構建複雜的 Vue 應用至關重要,因為它能防止回歸並鼓勵將應用拆分為可測試的模組。我們介紹了測試的基本術語和推薦的工具,包括單元測試、組件測試和端對端測試。建議越早開始測試,避免隨著時間推移而增加的相依性。單元測試專注於函數和邏輯的正確性,而組件測試則驗證 UI 元素的行為與交互。
狀態管理在 Vue 應用中非常重要,尤其是當多個組件需要共享狀態時。每個 Vue 組件管理自己的響應式狀態,但隨著組件數量增加,簡單的管理方式可能變得複雜。這時,可以使用如 Pinia 的狀態管理庫來簡化這一過程。Pinia 提供了一個更簡單的 API 和更強的類型推斷,並由 Vue 核心團隊維護。
前後端路由的協作是現代應用開發的重要部分。後端路由根據用戶的 URL 發送相應的回應,而前端路由則使得單頁應用(SPA)能在不重新加載整個頁面的情況下更新內容。前端路由會攔截用戶的導航,並動態加載所需的組件。
頁面加載性能可透過PageSpeed Insights、WebPageTest等工具測量,而更新性能則需使用Chrome DevTools、Vue DevTools等進行分析。提升頁面加載性能的技術包括選擇合適架構(SSR或SSG)、(tree-shaking)、(code splitting)等。
在生產部署中,Vue 提供開發環境及生產環境的最佳實踐。開發階段有錯誤警告、驗證等功能,但生產環境須去除開發代碼以提升效能。未使用建構工具時,建議使用 .prod.js 生產版;使用工具如 Vite 或 Vue CLI 時,已預設生產配置,適合進行部署。
Server-Side Rendering (SSR) 是將 Vue.js 組件在伺服器上渲染為 HTML 字串,並直接發送到瀏覽器的一種技術。這樣可以提升頁面顯示速度,尤其在網速慢或設備性能差的情況下。SSR 應用的代碼可在伺服器和客戶端上共享,提高開發效率。
測試對於構建複雜的 Vue 應用至關重要,因為它能防止回歸並鼓勵將應用拆分為可測試的模組。我們介紹了測試的基本術語和推薦的工具,包括單元測試、組件測試和端對端測試。建議越早開始測試,避免隨著時間推移而增加的相依性。單元測試專注於函數和邏輯的正確性,而組件測試則驗證 UI 元素的行為與交互。
狀態管理在 Vue 應用中非常重要,尤其是當多個組件需要共享狀態時。每個 Vue 組件管理自己的響應式狀態,但隨著組件數量增加,簡單的管理方式可能變得複雜。這時,可以使用如 Pinia 的狀態管理庫來簡化這一過程。Pinia 提供了一個更簡單的 API 和更強的類型推斷,並由 Vue 核心團隊維護。
前後端路由的協作是現代應用開發的重要部分。後端路由根據用戶的 URL 發送相應的回應,而前端路由則使得單頁應用(SPA)能在不重新加載整個頁面的情況下更新內容。前端路由會攔截用戶的導航,並動態加載所需的組件。
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
這本書提供了照顧失智症家人的相關知識和實用建議,並提醒照顧者要懂得尋求外援,避免成為家中潛在的第二個病人。
Thumbnail
視障者的日常生活和應對策略。作者藍介洲以幽默風趣的方式分享視障者生活的豐富與自在。他的書籍讓讀者看見即使面對看不見的困難,也能擁有多姿多彩的生活。
Thumbnail
對話交流,對一般人而言易如反掌,在群居的社會架構下,人際關係的維護與對話溝通技巧成為立足社會的必備能力。人工智慧的強勢來襲,更讓溝通能力成為人類不可取代的優勢。然而,特殊孩童在判別語言情緒和社交溝通上面臨極大的困難,甚至迴避人群,沒有勇氣開口說話。特教資源和量能的不足,更容易使這些特殊生的溝通障礙雪
Thumbnail
(00:00) 精神病這件事(11:23) 什麼是自閉症(16:15) 自閉症的規模與經濟衝擊(20:25) 神經多元性(Neurodiversity)
Thumbnail
你是否曾想像過身為一名身心障者,要出門旅遊,會遇到哪些阻礙呢? 在過去,身心障礙者們常因擔心在外會遇到重重難關而打消旅遊的想法。在許多身障團體的多年來的倡議下,政府開始關注身心障礙者的各項權益,除了制定相關法案,交通部觀光局也開始提供國內各大旅遊業者無障礙旅遊補助,挑選合適的
Thumbnail
如何指引視障者。怎麼幫助他們、他們出門的原因和難題
【雙魚之論】英文拷到 G / D 找中文翻譯 〈大眾運輸工具無障礙設施設置辦法〉的法律根據是〈身心障礙者權益保障法〉。 本法關注在關注的是「無障礙」,「身心障礙者」定義在第 5 條 本法所稱身心障礙者,指下列各款身體系統構造或功能,有損傷或不全導致顯著偏離或喪失,影響其活動與參與社會生活,經
Thumbnail
這篇文章講述了青年壯遊計畫對身心障礙族群的忽略,並提出身心障礙者參與計畫的重要性以及培養多元能力。文章呼籲政府應關注這一族群的權益。
Thumbnail
所有的服務,一切的開始,都始於建立關係,特別是一段目的為促進一個從沒想過要改變的人花力氣改變現狀的服務。抗拒障礙身份的人,往往不太容易進入職重服務中,如何從堅決拒絕到願意開啟合作?
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
這本書提供了照顧失智症家人的相關知識和實用建議,並提醒照顧者要懂得尋求外援,避免成為家中潛在的第二個病人。
Thumbnail
視障者的日常生活和應對策略。作者藍介洲以幽默風趣的方式分享視障者生活的豐富與自在。他的書籍讓讀者看見即使面對看不見的困難,也能擁有多姿多彩的生活。
Thumbnail
對話交流,對一般人而言易如反掌,在群居的社會架構下,人際關係的維護與對話溝通技巧成為立足社會的必備能力。人工智慧的強勢來襲,更讓溝通能力成為人類不可取代的優勢。然而,特殊孩童在判別語言情緒和社交溝通上面臨極大的困難,甚至迴避人群,沒有勇氣開口說話。特教資源和量能的不足,更容易使這些特殊生的溝通障礙雪
Thumbnail
(00:00) 精神病這件事(11:23) 什麼是自閉症(16:15) 自閉症的規模與經濟衝擊(20:25) 神經多元性(Neurodiversity)
Thumbnail
你是否曾想像過身為一名身心障者,要出門旅遊,會遇到哪些阻礙呢? 在過去,身心障礙者們常因擔心在外會遇到重重難關而打消旅遊的想法。在許多身障團體的多年來的倡議下,政府開始關注身心障礙者的各項權益,除了制定相關法案,交通部觀光局也開始提供國內各大旅遊業者無障礙旅遊補助,挑選合適的
Thumbnail
如何指引視障者。怎麼幫助他們、他們出門的原因和難題
【雙魚之論】英文拷到 G / D 找中文翻譯 〈大眾運輸工具無障礙設施設置辦法〉的法律根據是〈身心障礙者權益保障法〉。 本法關注在關注的是「無障礙」,「身心障礙者」定義在第 5 條 本法所稱身心障礙者,指下列各款身體系統構造或功能,有損傷或不全導致顯著偏離或喪失,影響其活動與參與社會生活,經
Thumbnail
這篇文章講述了青年壯遊計畫對身心障礙族群的忽略,並提出身心障礙者參與計畫的重要性以及培養多元能力。文章呼籲政府應關注這一族群的權益。
Thumbnail
所有的服務,一切的開始,都始於建立關係,特別是一段目的為促進一個從沒想過要改變的人花力氣改變現狀的服務。抗拒障礙身份的人,往往不太容易進入職重服務中,如何從堅決拒絕到願意開啟合作?