iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 10
4

迷思:無障礙和 JS 只能擇一?

JavaScript isn’t the enemy of accessibility. - A11Y with lindsey

作為 Web 工程師,我們對於無障礙之於 JavaScript 很容易有一個誤解——「無障礙很麻煩,而且跟 JavaScript 是衝突的,因為螢幕閱讀器針對網頁直接忽略 JavaScript,這兩者貌似只能擇一?」

由於這種誤解,我們常會認為根本沒有必要讓 JavaScript 網頁變得更可訪問(現在這個時代哪個網頁沒有使用 JavaScript 啦,太少了QQ)。

(圖片來源:WebAIM

根據 WebAIM 在 2014 年 1 月進行的一項調查,竟有高達 97.6% 的螢幕閱讀器使用者支持 JavaScript,絕大多數無法使用 JavaScript 的使用者,用的瀏覽器是 Firefox(可能啟用了 NoScript 附加組件)或者在 Linux 上使用 Lynx。


沒有 JS 哪些東西還可以繼續進行?

一個備援機制・Fallback

為那 2%~3% 螢幕閱讀器無法支援 JS 的使用者想想,我們現有能做的有哪些?

讓表單可以送出 [MDN]

根據 WCAG: H32 技術建議<form> 元素的屬性雖都是可選的,但還是建議一定要設置 actionmethod ,表單元素也記得加上 name 屬性(對應後端需求的欄位名稱),表單就仍可繼續它的任務。

  • action 屬性定義了表單數據傳輸到哪(伺服器、填寫一個網址)。

  • method 屬性定義了發送的 HTTP 方法(它可以是 GET 或 POST)。

註:記得為每個欄位加上 <label>for="id" 指向你的欄位,或採用上面的做法,把欄位直接包起來。

<noscript> [W3C]

我們可以來看看各大網站都怎麼使用它呢?

(圖片來源:envatotuts+,Facebook 2015 年 12 月 11 日)

這個標籤的用意是,當客戶端不支援或是禁用 JavaScript, <noscript> 標籤中的內容會顯示在畫面上。它是 HTML5 新增的元素。

要注意的是:

  • 寫在 <head> 中,元素裡面只能包含 <link><style><meta>
  • 寫在 <head> 外,
    • 需要是透明的內容模型,有點抽象,請參考 MDN
    • 無法巢狀,也就是說元素中不能再有 <noscript> 子代。

我們在標籤中,可以使用文字告知使用者,請他打開 JavaScript 的選項,或是提供相關超連結作適當的指引。

<noscript>
  <!-- 相關超連結作適當的指引 -->
  <a href="https://askiebaby.github.io">相關連結</a>
</noscript>
<p>Askie' Coding Life</p>

探討 SPA 以前

SPA 是什麼?

只有一個 index.html 檔案,但是用起來卻像一個 App。- Huli

跟後端溝通後得到資料,不用導向到新頁面,而是透過 JavaScript 直接更新畫面上的內容。

想看故事理解 SPA 那就來看胡立的這篇文章

SPA 的內容變更讓人出乎意料

來看使用螢幕閱讀器的使用者覺得最困擾的問題:

(圖片來源:WebAIM

可以在問卷調查上看到的結果是,除了圖像辨識不清與語義不清很困擾之外,第二困擾的項目 Unexpected screen changes 非預期的內容變更,指的就是當 SPA 更新網站畫面時,失去焦點的關係。

焦點策略 Focus Strategy

在 Google Developers 複習什麼是焦點 focus這邊是 Google 在 Udacity 針對焦點管理的教學影片。裡有很多觀念可以學習,主要是課程的 Quiz 有提供 Repo (lesson2-focus/03-managing-focus)去做練習,裡面也有成功的 Sample Code。

主要就是兩個重點:

  • 每個頁面需要一個 <h1> 標籤,而每個區塊也需要一個標題。
  • 讓頁面更新時,透過 JavaScript 將焦點移至 <h1> ,讓使用者知道已經更新畫面。

其他文章有看到的重點

  • 表單驗證:填寫格式錯誤時,需要有提示訊息,並且將焦點放在訊息上。
  • Lazy loading:延遲加載常應用於圖片,一種可以顯著改善初始頁面加載的做法,可以看看 Medium 就是這樣的做法。我們可以使用 aria-live 標示。

前端框架的無障礙相關資源

Vue

  • [社群] Vue A11Y:一個 Vue 的社群,他們大部分的專案都是為了讓 Vue 開發者更容易開發出無障礙的網站。

React

Angular

Flutter


Reference


上一篇
無障礙網站之 CSS 注意事項
下一篇
以設計層面來思考無障礙網站
系列文
實踐無障礙網頁設計(Web Accessibility)30

1 則留言

0
yachen
iT邦新手 5 級 ‧ 2019-09-25 21:35:34

/images/emoticon/emoticon31.gif

敲碗是怎樣,哈哈哈哈哈!

我要留言

立即登入留言