SA 團隊 在自己的網站中使用 SVG 開發已經有一段時間了,根據在不同螢幕閱讀器上的實驗結果,總結了自己的一套經驗。
下面是我根據他們釋出的文章 《7 solutions for creating more accessible SVGs》,對 7 個方案做的扼要羅列,方便大家閱讀。
1、作為圖片使用的 SVG 檔案
如果你的 SVG 是作為 <img>
的 src
引入的,務必為 <img>
新增 role="img"
屬性:
<img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/163671/sa_logo.svg"
role="img" alt="Simply Accessible">
<a href="#">
<img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/163671/sa_logo.svg"
role="img" alt="Simply Accessible">
</a>
複製程式碼
如果不加 role="img"
,有些螢幕閱讀器不會將 <img src="xxx.svg">
認作圖片,只是讀出 alt
值。
2、作為圖示使用的 SVG
SVG 作為圖示使用時,請使用 aria-hidden="true"
對訪問裝置隱藏,新增一個視覺上隱藏(visually-hidden)的兄弟元素作為圖示的文字語義說明。
<a href="#">
<svg class="icon icon-close" viewBox="0 0 32 32" aria-hidden="true">
<use xlink:href="#icon-close"></use>
</svg>
<span class="sr-only">Close</span>
</a>
<svg display="none" version="1.1" viewBox="0 0 32 32">
<defs>
<g id="icon-close">
<path class="path1" d="M31.708 25.707v0l-9.708-9.708 9.708-9.708c0.104-0.104 0.18-0.227 0.229-0.356 0.134-0.355 0.058-0.771-0.229-1.058l-4.586-4.586c-0.286-0.286-0.702-0.361-1.057-0.229-0.131 0.049-0.254 0.125-0.357 0.229l-9.708 9.708-9.708-9.708c-0.105-0.104-0.227-0.18-0.357-0.228-0.356-0.133-0.771-0.057-1.057 0.229l-4.586 4.585c-0.286 0.286-0.361 0.702-0.231 1.058 0.051 0.13 0.125 0.252 0.23 0.356l9.709 9.708-9.708 9.708c-0.105 0.104-0.18 0.228-0.23 0.357-0.132 0.354-0.056 0.771 0.23 1.057l4.586 4.586c0.286 0.286 0.702 0.361 1.057 0.229 0.131-0.050 0.252-0.125 0.357-0.229l9.708-9.708 9.708 9.708c0.104 0.104 0.227 0.18 0.357 0.229 0.355 0.133 0.771 0.057 1.057-0.229l4.586-4.586c0.286-0.286 0.362-0.702 0.229-1.057-0.049-0.129-0.126-0.253-0.229-0.357z"></path>
</g>
</defs>
</svg>
<style>
.sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0,0,0,0);
white-space: nowrap;
border: 0;
}
</style>
複製程式碼
如上,為 <svg>
新增了 aria-hidden="true"
,讓其對訪問裝置隱藏。之後的 .sr-only
就是所謂的視覺隱藏元素——只是視覺上看不見,但會被螢幕閱讀讀到。
3、IE 的 BUG
網頁如果需要相容 IE,那麼在使用 <svg>
的時候,需要顯式新增 focusable="false"
屬性。
<svg focusable="false">...</svg>
複製程式碼
原因是為:在 IE 瀏覽器上關於 SVG 的一個 BUG。大家知道,SVG 預設是不會被聚焦的,但在 IE 中,如果 SVG 包含在像連結、按鈕這樣的可聚焦元素裡時,使用 Tab 是可以被聚焦的。這就導致父元素聚焦後,子元素又被聚焦的情況發生。
4、Safari 10 的 BUG
在 Safari 10 中,如果 <svg>
中包含 <use>
,務必在兩者中間使用空格隔開。
<svg> <use>...</use> </svg>
複製程式碼
否則,使用鍵盤 Tab 訪問到這裡的時候,跳不過去。不夠之後的版本的已經修復了,如果你的網頁需要支援 Safari 10 的話,就需要注意這個。
5、作為圖片使用的 SVG
有時需要將 SVG 檔案作為單獨的圖片使用,那麼跟第二條類似的是,新增一個視覺隱藏元素作為語義說明使用。
<a href="https://simplyaccessible.com">
<svg role="img" focusable="false"> <use xlink:href="#sa_logo"></use> </svg>
<span class="sr-only">Simply Accessible</span>
</a>
複製程式碼
之所以沒有選擇以 <svg role="img" aria-label="Simply Accessible">
的形式新增說明,是因為如果 <svg>
不是在可聚焦元素裡使用的時候,有些螢幕閱讀器不會正確朗讀 aria-label
屬性。
6、支援 IE8- 瀏覽器
在 IE8- 瀏覽器中,<svg>
中的 <desc>
標籤會被顯示出來,因此需要支援此類瀏覽器的話需要隱藏它們。
<!-- 下面語句的作用範圍從 IE5~IE9 -->
<!--[if !IE]> --> <desc>...</desc> <!-- <![endif]-->
複製程式碼
7、色彩對比
設計 SVG 圖示時,一定要考慮到色弱使用者、或在高對比黑色背景主題下(High Contrast theme)使用的使用者。舉一個例子,設計圖示的時候,可以考慮使用實心的背景加上顏色鮮明邊框。
(正文完)
廣告時間(長期有效)
我有一位好朋友開了一間貓舍,在此幫她宣傳一下。現在貓舍裡養的都是布偶貓。如果你也是個愛貓人士並且有需要的話,不妨掃一掃她的【閒魚】二維碼。不買也不要緊,看看也行。
(完)