Tāi-pō͘-hūn ê bāng-ia̍h ū it-tēng ê pí-lē ū kāng-khoán ê lōe-iông, í chi̍t ê sin-bûn bāng-chām ê sin-bûn bûn-chiong kú-lē, siōng téng-koân ē ū chi̍t ê banner, ū chit ê bāng-chām ê logo, kui chām ê tō-lám lia̍t. Chin-chiàⁿ ê lōe-iông sī sin-bûn ê lōe-iông.大部分的網頁都存在著一定比例的重複內容,以一個新聞網站新聞文章為例,一開始會有一個橫幅,有該網頁的Logo、全域的導覽列等。真正的內容則是新聞內容。Chit khoán pâi-pán ê hêng-sek tiāⁿ-tiāⁿ ē khòaⁿ--tio̍h, tùi it-poaⁿ ê sú-iōng-chiá mā chin koàn-sì--ah.這樣的排版型式很常見,對一般使用者來說也不構成問題。M̄-koh nā-sī bāng-chām oân-choân bô chò tiâu-chéng, ē chō-sêng khí-pôaⁿ kah êng-bō͘ pò-tha̍k khì ê sú-iōng-chiá ê bô hong-piān.但如果網站沒有做出任何調整,會對鍵盤及螢幕閱讀器使用者不太方便。
Khí-pôaⁿ sú-iōng-chiá siūⁿ-beh tiám bāng-ia̍h lāi e mn̍gh-kiāⁿ kan-na ē-sái it-tit chhi̍h Tab khí, thâu-chêng ū kúi ê khai-koan, liân-kiat chit khoán thang hō͘-tōng ê mn̍gh-kiāⁿ, tio̍h-ài chhi̍h kúi ē.鍵盤使用者要點選網頁內容的方法只有不斷地按下Tab鍵,前面有幾個按鈕或連結等可互動元件,就得按幾下。Nā-sī chit phiⁿ sin-bûn lōe-iông lāi ū chi̍t ê khí-pôaⁿ sú-iōng-chiá siūⁿ-beh tiám khui ê liân-kiat, chit ê sin-bûn bāng-chām tī tō-lám lia̍t khǹg gō͘-cha̍p ê liân-kiat (phì-lū in kā só͘-ū ê hashtag lóng khǹg--li̍p-khì), ná án-ne khí-pôaⁿ sú-iōng-chiá tio̍h-ài keng-kè chia gō͘-cha̍p ê liân-kiat, chiah ē kàu i ê bo̍k-tek.如果該篇新聞內容有一個鍵盤使用者想開啟的連結,而該新聞網站的導覽列有五十個連結(例如該網路放上了所有的hashtag連結),那麼鍵盤使用者就得把這五十個連結都路過一遍,才能到達他的目的地。
Che á koh sī chi̍t phiⁿ sin-bûn--niā, phì-lû ū chi̍t ê chêng-hêng, lí ū cha̍p phiⁿ chit ê bāng-chām ê sin-bûn ài tha̍k, ná án-ne ta̍k ê sin-bûn ê ia̍h-bīn lóng ài keng-kè gō͘-cha̍p ê liân-kiat chiah ē kàu lí ê bo̍k-tek, chit chióng sú-iōng-chiá thé-giām sī chin bái.但今天這還只是一篇新聞,試想一下,你有十篇該網站的新聞要讀,那麼每一個新聞頁面都得重新經過五十個連結才能到達你要的地方,這樣的使用者體驗非常的糟糕。Êng-bō͘ pò-tha̍k khì ê sú-iōng-chiá ū khó-lêng kah khí-pôaⁿ sú-iōng-chiá kāng-khoán ê thé-giām, in-ūi in tī mn̍gh-kiāⁿ chi-kan sóa-ūi ē hong-sek khah kâng.螢幕閱讀器使用者也有可能跟鍵盤使用者有一樣的體驗,因為他們在元件中移動的方式比較相似。Kah khí-pôaⁿ sú-iōng-chiá bô kâng ē sī, êng-bō͘ pò-tha̍k khì ē-sái soán-te̍k beh soán-chhú ê bo̍k-piau ê lūi-hêng. Phì-lû chit-má kan-na tī piau-tê, liân-kiat, khai-koan che kúi ê bô kâng lūi-hêng ê mn̍gh-kiāⁿ sóa-ūi.跟鍵盤使用者較不一樣的是,螢幕閱讀器可以指定選取目標的類型。例如現在只在標題、連結、按鈕等不同類型的元件中移動。
Kah khí-pôaⁿ sú-iōng-chiá pí--khiaih, kan-na ē-sái iōng Tab khí tī thang hō͘-tōng ē mn̍gh-kiāⁿ sóa-ūi, êng-bō͘ pò-tha̍k khì ê sú-iōng-chiá á-sī ū ki-hōe siám-khui siōng bái ē chêng-hêng, tio̍h sī ài keng-kè gō͘-cha̍p ê bô siong-kan ê mn̍gh-kiāⁿ chiah ē kàu bo̍k-tek.相較鍵盤使用者,只能使用Tab在可互動的元件中移動,螢幕閱讀器使用者還是有機會避開最糟情況,也就是要跳過五十個不相關的元件才能到達目的地。Chi̍t ê siōng kín ê kái-koat hong-hoat tio̍h sī tī bāng-ia̍h ê thâu ka chi̍t ê "thiàu kàu chú-iàu lōe-iông" ê liân-kiat.一個最快速的解決方法便是在網頁最開頭加上「跳至主要內容」的連結。Chi̍t ê hong-hoat ē-sái chò kàu WCAG tùi Bypass block ê iau-kiû.這個方法可以地達到WCAG (Web Content Accessibility Guidelines)對於Bypass blocks的要求。Si̍t-chè ê chò-hoat chit phiⁿ bûn-chiong tio̍h bô chò soat-bêng--ah, thui-chiàn tha̍k chit phiⁿ bûn chiong A Deep Dive on Skipping to Content.而實際的做法本文就不做講解,推薦閱讀這篇文章《A Deep Dive on Skipping to Content》。
Minifkux sui-liân ū thê-kiong chi̍t-kóa khí-pôaⁿ ê khoài-so̍k-khí, ē-tàng ti̍t-chiap thiàu kah chú-iàu lōe-iông, m̄-koh m̄ sī ta̍k ê ia̍h-bīn lóng ē-sái án-ne chhau-chok, tùi sin ê sú-iōng-chiá lâi kóng, in mā bô it-tēng ē chai-iáⁿ ū khoài-so̍k-khí.而Miniflux雖然有提供一些鍵盤快捷鍵,在一些頁面能直接跳至主要內容,但並非所有頁面都能如此操作,對新使用者來說,也不一定知道有這些快捷鍵。A koh ū thiàu khì chú-iàu lōe-iông chit ê hong-sek sǹg-sī chia̍p iōng ê chò-hoat, mā ū siá tī WCAG ê Techniques lāi, ē-sái siat-sióng ū chi̍t pō͘-hūn ê sú-iōng-chiá ē chhì-khòaⁿ-māi khoàⁿ bāng-chām kám ū thiàu khì chú-iàu lōe-iông ê liân-kiat, tio̍h ē-sái hō͘ sú-iōng-chiá ê chhau-chok koh khah hong-piān.再來是跳至主要內容這個作法算是一個比較常見,也被列在WCAG的Techniques中,可以預想會有一部份的使用者會嘗試尋找網站是否有提供跳至主要內容的連結,就能讓使用者的操作更為方便。Nā-sī í-āu sú-iōng-chiá ū kì-tiâu Miniflux ê khoài-so̍k-khí, siūⁿ-beh kái iōng khoài-so̍k-khí mā bô éng-hióng.若往後使用者有熟記了Miniflux的快捷鍵,想改用快捷鍵也不會有什麼影響。
HTML details kah summary tī phông-kó ê chok-gia̍p hē-thóng, iOS kah macOS, sú-iōng êng-bō͘ pò-tha̍k khì ē tú-tio̍h nn̄g ê būn-tôe.HTML details與summary在蘋果的作業系統——iOS與macOS——使用螢幕閱讀器會遇到兩個問題。Thâu-chi̍t ê sī summary bōe hō͘ tòng-chò sī khai-koan, êng-bō͘ pò-tha̍k khì sú-iōng-chiá soán-te̍k iōng khai-koan iû-lám ê sî-chūn, chit ê thang thián-khui ê soán-toaⁿ ê khai-koan tio̍h ē hō͘ thiàu--kè.首先是summary並不會被視為是一個按鈕,當螢幕閱讀器使用者切換至以按鈕進行瀏覽時,這個可展開選單的按鈕會被忽略。Koh lâi sī soán-toaⁿ ū thián-khui bô ê chōng-thài mā bōe hō͘ pò--choaih.再來是選單是開啟還是關閉狀態也不會被報讀出來。Chit ê būn-tôe tī lī-khòng-it-sam nî tio̍h hőng pò--chhoaih--ah, m̄-koh kàu chit-chām koh á-bōe kái-koat.而這個問題在2013年就被回報了,但過了十年這個問題依然存在。Siong-kan ê kái-koat pān-hoat ē-sái chham-khó chit phiⁿ bûn-chiong The details and summary elements, ah-sī khòaⁿ phông-kó tó chi̍t kang sim-chêng hó beh lâi kái-koat.相關解決辦法可以參考這篇文章《The details and summary elements》,或是看蘋果哪天心情好想修這個問題。
Pió-toaⁿ表單
Pió-toaⁿ sǹg-sī chhú-lí a11y ê sî-chūn chin mâ-hoân ê mn̍gh-kiāⁿ, in-ūi bô kâng ê êng-bō͘ pò-tha̍k khì, tùi-thāi i ê hong-sek mā bô kâng.表單算是在處理a11y時偏麻煩的一個元件,因為在不同的螢幕閱讀器下,對待它的方式差異也很大。Phì-lû pió-toaⁿ leh tēng-gī siōng sǹg-sī tōe-piau, m̄-koh m̄ sī múi chi̍t ê êng-bō͘ pò-tha̍k khì lóng ē kā i tòng-chò sī tōe-piau.例如,表單在定義上是地標,但不是所有的螢幕閱讀器都將它視為地標。Koh lâi sī su-li̍p lân-ūi, ū ê êng-bō͘ pò-tha̍k khì ê pò placeholder, ū ê bōe.再來是輸入欄位,有些螢幕閱讀器會報讀出placeholder,有些不會。
Nā-sī ū ê bāng-chām ê siat-kè sī iōng placeholder tāi-thè lân-ūi ê phiau-chhiam (HTMl label) án-ne chin ū khó-lêng êng-bō͘ pò-tha̍k khì ē lóng bōe chhut-siaⁿ, sú-iōng-chiá ē m̄ chai chit ê lân-ūi sī beh chhòng--siáⁿ--ê.如果有些網站的設計是用placeholder取代欄位標籤(HTML label)那很可能螢幕閱讀器會一陣沉默,使用者會完全沒有頭緒這個欄位要做什麼。Khah ún-tēng ê chò-hoat, it-tēng á-sī ū bêng-khak ê lân-ūi piau-chhiam, placeholder chò chham-khó, phì-lû lân-ūi piau-chhiam sī sìⁿ-miâ, placeholder sī Ông Sió-phàng.比較穩定的做法,一定還是有明確的欄位標籤,placeholder作參考,例如:欄位標籤為姓名,placeholder為王小胖。Án-ne tio̍h sǹg-sī placeholder bô pò--chhoaih, sú-iōng-chiá á-koh ē chai-iáⁿ chit ê lân-ūi sī ài su-li̍p siáⁿ.這樣就算placeholder被忽略,使用者依然能知道這毎欄位要輸入什麼。
M̄-koh nā-sī ū piau-chhiam tio̍h sī bōe-tàng chhut-hiān tī ōe-bīn ê chêng-hêng, chit ê sî-chūn tio̍h ē-sái iōng aria-label lâi kā su-li̍p lân ka-siōng soat-bêng, tio̍h ē-sái hō͘ ōe-bīn pó-chhî bô piau-chhiam m̄-kò êng-bō͘ pò-tha̍k khì á-sī ē-sái pò chhut lân-ūi piau-chhiam.但如果有標籤就是不能出現在畫面上的情況,這個時候我們可以使用aria-label來幫輸入欄加上說明,就能讓畫面沒有標籤但螢幕閱讀器能報讀出欄位標籤。Si̍t-chò ê hong-hoat ē-sái chham-khó chi̍t phiⁿ bûn-chiong Using aria-label to provide an invisible label where a visible label cannot be used, che mā sī góa tī Miniflux sú-iōng ê hong-sek.實作的方法可以參考這篇文章《Using aria-label to provide an invisible label where a visible label cannot be used》,這也是我在Miniflux上採取的作法。
Bûn-chiong (HTML article) mā sǹg sī chi̍t ê khah te̍k-sû ê mn̍gh-kiāⁿ, i tī tēng-gī siōng bô sǹg sī tōe-piau, m̄-koh Android ê êng-bō͘ pò-tha̍k khì ē kā i tòng-chò sī tōe-piau, iOS ê êng-bō͘ pò-tha̍k khì ē-sái soán-te̍k iû-lám ia̍h-bīn lāi ê bûn-chiuⁿ.文章(HTML article)也算是一個比較特別的元件,它在定義上不算地標,但在Android的螢幕閱讀器TalkBack會將它視為地標,而iOS的螢幕閱讀器則能選擇搜尋頁面中的文章。Kóng khí-lâi bûn-chiong sǹg-sī chi̍t ê ū khah chōe chhiú-toāⁿ hō͘ êng-bō͘ pò-tha̍k khì sú-iōng-chiá lī-iōng ê mn̍gh-kiāⁿ,所以說文章算是一個有比較多手段能被螢幕閱讀器使用者利用的一個元件。Ài án-ná kái-chìn êng-bō͘ pò-tha̍k khì sú-iōng-chiá tī iû-lám bûn-chiong ê thé-giām, ē-sái thàu-kè kā i siat-tēng piau-chhiam kah soat-bêng lâi chò.而要如何改進螢幕閱讀器使用者在瀏覽文章的體驗,可以透過幫它設置標籤跟說明來做到。
Phì-lû chi̍t ê blog ê bûn-chiong lia̍t-pió ia̍h-bīn, ū cha̍p phiⁿ bûn-chiong.舉例來說,一個部落格的文章列表頁面,列出了十篇文章。Ta̍k phiⁿ bûn-chiong lóng pau-koat piau-tê, kán-tan ê tiah-iàu, hoat-pò͘ sî-kan, chok-chiá.每篇文章的內容包含了標題、簡短的內容摘要、發佈時間、作者。Lán sī án-ná phòaⁿ-toàn beh tha̍k chit phiⁿ bûn-chiong--bô.我們是怎麼判斷我們想不想讀一篇文章。Lán khó-lêng ē seng khòaⁿ piau-tê, ū hèng-chhù chiah khòaⁿ tiah-iàu, hia̍p-chō͘ phòaⁿ-toàn lōe-iông kám-sī lán beh tha̍k ê. Koh khòaⁿ-māi chok-chiá sī siáng, hoat-pò͘ li̍t-kî kám-sī chòe-kūn--ê, bô-tek-khak chit phiⁿ bûn-chiong ū sî-hāu-sèng.我們可能先看標題,有興趣的話看一下摘要,協助判斷內容是不是真的是我想讀的。可能再看一下作者是誰,發表的日期是不是最近的,也許這個文章是有時效性的。Nā-sī khak-līn che sī lán ū hèng-chhù ê lōe-iông, lán tio̍h ē tiám bûn-chiong ê liân-kiat.如果確認是我們有興趣的內容,我們就會點擊文章的連結。Bô kâng êng-bō͘ pò-tha̍k khì tī focus kah bûn-chiong téng ê sî, ē ū bô kâng ê hêng-ûi, phì-lû iOS ê VoiceOver ê pò chhut bûn-chiong lāi ê thâu-chi̍t ê mn̍gh-kiāⁿ; Android ê TalkBack ē tāi-khài-á pò chhut lāi-té ū siáⁿ, ū chi̍t ê chheng-toaⁿ, liân-kiat án-ne.不同的螢幕閱讀器在聚焦到文章上會有不同的行為,例如iOS的VoiceOver會唸出文章中的第一個元件;Android的TalkBack會概略的說明裡面有什麼元件,有一個清單、連結等。
Ū-tang-chūn chia ê hêng-ûi tú-hó ē tek tio̍h bōe-bái ê sú-iōng-chiá thé-giām, phì-lû bûn-chiong lāi ê thâu-chi̍t ê mn̍gh-kiāⁿ tú-hó sī bûn-chiong piau-tê, iOS ê VoiceOver tio̍h ē kā piau-tê pò--chhoaih.有時候這些行為剛好會得到良好的使用者體驗,例如文章中的第一個元件湊巧是文章標題,那麼iOS的VoiceOver就會把標題唸出來。Che mā tú-hó sī lán leh phòaⁿ-toàn che kám-sī lán siūⁿ-beh tha̍k ê bûn-chiong ê chi̍t ê chin tiōng-iàu ê i-kù.而這剛好也是我們在判斷是否要讀一篇文章時,很重要的一個依據。M̄-kò m̄ sī ta̍k kái HTML lóng tú-hó sī chit ê kiat-kò͘, chit ê sî-chūn, lán tio̍h ē-sái thàu-kè siat-tēng bûn-chiong ê piau-chhiam (aria-label) kah soat-bêng (aria-describedby) hō͘ bô kâng ê êng-bō͘ pò-tha̍k khì ē-sái ū khah kâng ê hêng-ûi.但並不是每次HTML都能湊巧是這個結構,這個時候,我們就能透過設定文章的標籤(aria-label)及說明(aria-describedby),來讓不同螢幕閱讀器有較一致的行為。Siông-sòe ê chò-hoat ē-sái chham-khó Using aria-label to provide labels for objects kah Using the aria-describedby property to provide a descriptive label for user interface controls.詳細的做法可以參考《Using aria-label to provide labels for objects》及《Using the aria-describedby property to provide a descriptive label for user interface controls》
Lán ē-sái kā bûn-chiong piau-chhiam siat-tēng chò bûn-chiong ê piau-tê, soat-bêng siat-tēng chò bûn-chiong tiah-iàu, chok-chiá, i-chiàu bāng-chām lōe-iông lâi koat-tēng tó kúi hāng chu-sìn ē-sái pang-chō͘ sú-iōng-chiá phòaⁿ-toàn chit phiⁿ bûn-chiong kám-sī sú-iōng-chiá ū hèng-chhù--ê.我們可以將文章標籤設定為文章標題,說明設定為文章的摘要、作者等,依照網站內容去決定哪些資訊能幫助使用者判斷該文章是否是使用者有興趣的。Nā-sī kui-ê blog éng-oán kan-na ū chi̍t ê chok-chiá, án-ne kā bûn-chiong chok-chiá siat-tēng li̍p bûn-chiong soat-bêng tio̍h ke chò--ah.如果說整個部落格永遠都只會有一個作者發文,那麼把文章作者列入文章說明就會比較多餘了。
Êng-bō͘ pò-tha̍k khì hú-chō͘ soat-bêng螢幕閱讀器輔助說明
Ū-tang-chūn, chi̍t-kóa bûn-lī sìn-sit ē in-ūi khǹg ê só͘-chāi, ē-tàng thê-kiong phòaⁿ-toàn chia ê bûn-lī beh piáu-ta̍t ê ì-sù.有的時候,一些文字訊息會因為擺放的位置,可以提供判斷該文字所要傳達的意思。Phì-lû chi̍t ê sò͘-lī gō͘, khǹg tī piáⁿ ê piⁿ--á, lán ē-sái ha̍p-lí thui-lūn, i ū khó-lêng sī leh kóng chit-má ū gō͘ phìⁿ piáⁿ.例如:一個數字五,擺放在餅乾的旁邊,我們可以合理的判斷,也許它是在說明現在有五片餅乾。M̄-koh lán nā-sī óng téng-koân khòaⁿ, ē khòaⁿ tio̍h chi̍t ê piau-tê, téng-koân siá "chit-má ê khò͘-chûn liōng", lán tio̍h ē-tàng chai-iáⁿ lán tú-chiah ê thui-lūn sī chèng-khak--ê.但我們如果再往上看,會看到一個標題,上面寫著「目前庫存」,那麼就更能證實我們剛剛的猜測是正確的。
Che lóng sī in-ūi lán ū sī-kak ē-tàng hú-chō͘ phòaⁿ-toàn, m̄-koh nā-sī kin-á-li̍t sī chi̍t ê êng-bō͘ pò-tha̍k khì sú-iōng-chiá, i kin-á-li̍t kan-na thiaⁿ tio̍h êng-bō͘ pò-tha̍k khì kóng chi̍t ê lī "gō͘", tùi sú-iōng-chiá lâi kóng, èng-kai sī ū chin chōe gî-būn, chit ê gō͘ sī siáⁿ ì-sù.這些都是建立在我們有視覺進行輔助判斷的前提下,但假設今天是螢幕閱讀器使用者,他今天只聽到螢幕閱讀器說了一個「五」,對使用者來說,應該是會相當的困惑,這個五是什麼意思。Tong-liân êng-bō͘ pò-tha̍k khì ê sú-iōng-chiá ē-sái óng thâu-chêng, āu-piah sóa-ūi, khì lí-kái kui-ê ì-sù, nā-sī hó-ūn, i ē-sái chhē tio̍h ē-tàng hú-chō͘ i phòaⁿ-toàn chit ê sò͘-lī ê ì-sù ê chu-sìn.當然螢幕閱讀器使用者可以會往前或往後移動,去理解上下文,幸運的話,他能找到能輔助他判斷這個數字的意思的資訊。M̄-kò nā-sī bāng-chām in-ūi khó-lū tio̍h sī-kak thêng-hiān, m̄ hi-bāng bāng-ia̍h téng hián-sī chia ê chu-sìn ē-sái án-ná chò.但如果今天一個網站因為視覺呈現的考量,在網頁上不希望顯示這些資訊的話可以怎麼做。Chit ê sî-chūn lán ē-sái thàu-kè CSS hō͘ hú-chō͘ chu-sìn tī ōe-bīn siau-sit, m̄-kò m̄ sī kā i chhàng--khiaih, siông-sòe ê soat-bêng ē-sái chham-khó chit phiⁿ bûn-chiuⁿ CSS in Action: Invisible Content Just for Screen Reader Users.這個時候我們可以透過CSS讓輔助資訊在畫面中消失,但不去隱藏它,詳細說明可以參考這篇文章《CSS in Action: Invisible Content Just for Screen Reader Users》
Ká-sú ōe-bīn kan-na ē-sái chhut-hiān "piáⁿ: gō͘" chit kúi ê lī, bô-tiāⁿ-tio̍h êng-bō͘ ê téng-koân ū tah chi̍t tiuⁿ chóa, téng-koân siá "chit-má ê khò͘-chûn liōng", só͘-í siat-kè su boaih hō͘ bāng-ia̍h koh hián-sī kî-thaⁿ ê lī.假設今天畫面只允許出現「餅乾:五」這幾個字,也許在顯示器的上方有貼了一張紙,寫著「目前庫存」,所以設計師不允許在網頁中再顯示其它字了。Chit-má êng-bō͘ pò-tha̍k khì ē pò "piáⁿ (tùn-teⁿ) gō͘"目前螢幕閱讀器會報讀為:「餅乾(停頓)五。」Ē-sái chhì-khòaⁿ-māi kā bûn-lī kái chò piáⁿ:<span class="sr-only">chit-má ê khò͘-chûn liōng</span>gō͘, tio̍h sī kā hú-chō͘ chu-sìn ùi ōe-bīn téng chhàng--kiaih.可以嘗試的做法便是將文字改為 餅乾:<span class="sr-only">目前庫存為</span>五 也就是將輔助資訊從畫中隱藏。Chit-má êng-bō͘ pò-tha̍k khì ē pò "piáⁿ (tùn-teⁿ) chit-má ê khò͘-chûn liōng gō͘"現在螢幕閱讀器會報讀為:「餅乾(停頓)目前庫存為五」,但畫只會顯示「餅乾:五。」