成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

現代圖片性能優化及體驗優化指南 - 圖片資源的容錯及可訪問性處理

開發 前端
對圖片的性能優化及體驗優化在今天就顯得尤為重要。本文,就將從各個方面闡述,在各種新特性滿頭飛的今天,我們可以如何盡可能的對我們的圖片資源,進行性能優化及體驗優化。

本文是系列第五篇,終章。系列文章:

  1. 現代圖片性能優化及體驗優化指南 - 圖片類型及 Picture 標簽的使用[1]
  2. 現代圖片性能優化及體驗優化指南 - 響應式圖片方案[2]
  3. 現代圖片性能優化及體驗優化指南 - # 縮放精細化展示及避免布局偏移、拉伸[3]
  4. 現代圖片性能優化及體驗優化指南 - 懶加載及異步圖像解碼方案[4]

圖片資源,在我們的業務中可謂是占據了非常大頭的一環,尤其是其對帶寬的消耗是十分巨大的。

對圖片的性能優化及體驗優化在今天就顯得尤為重要。本文,就將從各個方面闡述,在各種新特性滿頭飛的今天,我們可以如何盡可能的對我們的圖片資源,進行性能優化及體驗優化。

圖片資源的容錯及可訪問性處理

OK,最后一個章節,我們簡單聊一聊圖片資源的容錯及可訪問性處理。

圖片的可訪問性處理

可訪問性(A11Y),在我們的網站中,屬于非常重要的一環,但是大部分同學都容易忽視它。

在一些重交互、重邏輯的網站中,我們需要考慮用戶的使用習慣、使用場景,從高可訪問性的角度考慮,譬如假設用戶沒有鼠標,僅僅使用鍵盤,能否順暢的使用我們的網站?

非常重要的一點是,提高可訪問性也能讓普通用戶更容易理解 Web 內容。

基于 Usability & Web Accessibility - image[5]

對于圖像信息,我們需要大致遵循如下可訪問性原則:

  • 所有有意義的 img 元素必須有 alt 屬性
  • 提供替代 alt 屬性的其他方式
  • 使用輔助技術隱藏裝飾圖像

第一點非常好理解,所有的有意義的圖片元素都必須要提供 alt 屬性。

第二點比較有意思,在 A11Y 中,其實有一套 WAI-ARIA 標準[6]。WAI-ARIA 是一個為殘疾人士等提供無障礙訪問動態、可交互Web內容的技術規范。

簡單來說,它提供了一些屬性,增強標簽的語義及行為:

  • 可以使用 tabindex 屬性控制元素是否可以聚焦,以及它是否/在何處參與順序鍵盤導航
  • 可以使用 role 屬性,來標識元素的語義及作用,譬如使用 <div id="saveChanges" tabindex="0" role="button">Save</div>來模擬一個按鈕
  • 還有大量的 aria-* 屬性,表示元素的屬性或狀態,幫助我們進一步地識別以及實現元素的語義化,優化無障礙體驗

上述第二點,提供替代 alt 屬性的其他方式 的含義就是使用 WAR-ARIA 規范提供的諸如 aria-label 和 aria-labelledby 屬性為圖像提供可訪問的名稱。

當存在這些屬性時,輔助技術(屏幕閱讀器)將忽略圖像的 alt 屬性并讀取 ARIA 標簽。

而第三點,使用輔助技術隱藏裝飾圖像,又是什么意思呢?

上面第一點 所有有意義的 img 元素必須有 alt 屬性,反過來說,頁面上也會存在無意義的裝飾性的圖片,這些圖片內容對輔助技術(屏幕閱讀器)而言,其實是可以忽略的。

對于沒有任何功能或信息內容的裝飾圖像,可以通過多種方式對屏幕閱讀器隱藏:

  • 使用空的 alt 屬性
  • 使用 ARIA 屬性 role="presentation" 標明圖片元素是裝飾可忽略圖片
  • 使用 CSS background 的方式呈現這些圖片

alt 不要與 title 混淆

OK,下面來講一些有意思的細節內容。

有一個非常基礎的知識,簡單過一下,也就是圖片元素中,alt 與 title 的差異:

  • 圖片中的 alt 屬性是在圖片不能正常顯示時出現的文本提示。
  • 圖片中的 title 屬性是在鼠標在移動到元素上的文本提示。

正確使用 alt 屬性

對于使用屏幕閱讀器的用戶而言,圖片是無法正常展示或者被的瀏覽的,基于此,我們需要利用好 alt 屬性,或者是上述的aria-label 和 aria-labelledby 屬性。

那么,這些屬性內的內容應該填充什么呢?我們需要基于圖片的功能加以區分:

  • 信息性圖像[7]:以圖形方式表示概念和信息的圖像,通常是圖片、照片和插圖。alt 替代文本應該至少是一個簡短的描述,傳達圖像所呈現的基本信息。
  • 裝飾性圖像[8]:當圖像的唯一目的是為頁面添加視覺裝飾,而不是傳達對理解頁面很重要的信息時,如上述所言,使用空的 alt,譬如 alt=""
  • 功能圖像[9]:用作鏈接或按鈕的圖像的替代文本應該描述鏈接或按鈕的功能,而不是視覺圖像。此類圖像的示例是表示打印功能的打印機圖標或提交表單的按鈕。
  • 文本圖像[10]:可讀文本有時會出現在圖像中。如果圖片不是徽標,請避免圖片中出現文字。但是,如果使用文本圖像,替代文本應包含與圖像中相同的詞。
  • 圖形和圖表等復雜圖像:為了傳達數據或詳細信息,提供與圖像中提供的數據或信息等效的完整文本作為替代文本。[11]
  • 圖像組[12]:如果多張圖像傳達一條信息,則一張圖像的替代文本應傳達整組信息。
  • 圖像映射[13]:包含多個可點擊區域的圖像的替代文本應該為鏈接集提供整體上下文。此外,每個可單獨點擊的區域都應該有替代文本來描述鏈接的目的或目的地。

其實 alt 的學問是非常之多的,如果我們的頁面能做到這一點,那真的算是從根上開始思考,開始優化用戶體驗。

img 元素與 background 元素的取舍

OK,那么,講到這里,還有一個有意思的點就很自然的應該被提及。

那就是我們應該什么時候使用 <img> 元素,什么時候使用 background 內嵌圖片?

我們可以從性能及功能兩個方面進行考慮:

類型

img

backgroud-image

圖層位置

前景

背景

默認初始尺寸

不定

固定

是否會產生回流重繪

不會

圖片加載失敗

可以觸發元素的 onerror 事件,展示 alt 屬性

無法有效設置異常處理場景

使用場景

Logo、產品圖片、廣告圖片

裝飾性無語義內容等

其實性能上并不是核心考慮的點,因為上文我們也講到了在今天可以大規模使用是 loading="lazy" 屬性,圖片可以進行原生支持的懶加載。

我們在考慮選取 <img> 還是 backgroud-image 的時候,更多的還是從圖片功能上進行考慮。一般來說,作為修飾的且無語義的裝飾性圖片選擇使用 background-image,而比較重要的與網頁內容相關的就使用 <img> 標簽。

由于有語義的圖片使用 <img> 展示,它的一個好處在于,當圖片加載失敗的時候,可以觸發元素的 onerror 事件,我們可以有效的利用這一點,對圖片進行異常處理。

圖片的異常處理

當圖片鏈接掛了,加載失敗了,我們比較好的處理方式應該是怎么樣呢?

處理的方式有很多種。在張鑫旭老師的這篇文章中 -- 圖片加載失敗后CSS樣式處理最佳實踐[14] 有一個不錯的實踐。

核心思路為:

  1. 利用圖片加載失敗,觸發 <img> 元素的 onerror 事件,給加載失敗的 <img> 元素新增一個樣式類。
  2. 利用新增的樣式類,配合 <img> 元素的偽元素,在展示默認兜底圖的同時,還能一起展示 <img> 元素的 alt 信息。

<img src="test.png" alt="Alt Info" onerror="this.classList.add('error');">
img.error {
position: relative;
display: inline-block;
}

img.error::before {
content: "";
/** 定位代碼 **/
background: url(error-default.png);
}

img.error::after {
content: attr(alt);
/** 定位代碼 **/
}

我們利用偽元素 before ,加載默認錯誤兜底圖,利用偽元素 after,展示圖片的 alt 信息:

圖片

OK,到此,完整的對圖片的處理就算完成了,這也比較好的闡述了為什么,對有語義,有 alt 信息的圖片,我們應該使用 <img> 元素來實現。這是因為,我們可以在錯誤發生的時候,比較好的對圖片進行兜底展示,讓用戶直觀的能夠看到 alt 內容。

完整的 Demo 你可以戳這里看看:

CodePen Demo -- 圖片處理[15]

當然,上述方案存在兩個小問題:

  1. 對于每一個 <img> 元素,我們都需要寫一段 notallow="this.classList.add('error');" 代碼,有點重復。因此,這個工作也可以交給 JavaScript 全局性的完成,并且,我們可能需要判斷 alt 的值是否為空,在為空時,使用默認圖片 alt 兜底文案。
  2. 早年間,<img> 等替換元素是沒有偽元素的,后面 Chrome/Firefox 瀏覽器逐漸支持了當,<img> 的 src 拉取失敗時,支持 <img> 元素的偽元素展示,這才有了上述的方案,但是,目前 Safari 仍不支持這個特性,所以,在 Safari 下,我們可能得到如下的結果:

圖片

效果仍然還是 OK 的,只是沒有了兜底圖的展示,在實際使用過程中,需要知道這一點。

總結一下

本章節,對圖片資源的容錯及可訪問性處理進行了闡述。核心內容在于:

  1. 對于圖像信息,我們需要大致遵循如下可訪問性原則:
  • 所有有意義的 img 元素必須有 alt 屬性
  • 提供替代 alt 屬性的其他方式
  • 使用輔助技術隱藏裝飾圖像
  1. 正確使用 alt 屬性,了解不同場景下 alt 應該填充什么內容
  2. img 元素與 background 元素的取舍
  3. 圖片異常處理的最佳實踐

至此,整個現代圖片性能優化及體驗優化指南[16]到此就圓滿結束,整個系列的文章囊括了非常多的新的規范及特性,需要大家在實踐中根據實際情況靈活選取使用。

同時,我們也應該能看到,前端技術僅僅在這一小個領域,都在不斷的迭代創新。雖然很難,還是需要不斷充實自己跟上新的潮流。共勉。

最后

OK,本文到此結束,希望本文對你有所幫助 :)

參考資料

[1]現代圖片性能優化及體驗優化指南 - 圖片類型及 Picture 標簽的使用: ??https://juejin.cn/post/7198182873366888509。??

[2]現代圖片性能優化及體驗優化指南 - 響應式圖片方案: ??https://juejin.cn/post/7202266382841495611。??

[3]現代圖片性能優化及體驗優化指南 - # 縮放精細化展示及避免布局偏移、拉伸: ??https://juejin.cn/post/7203012367180185661。??

[4]現代圖片性能優化及體驗優化指南 - 懶加載及異步圖像解碼方案: ??https://juejin.cn/post/7204860462240170040。??

[5]Usability & Web Accessibility - image: ??https://usability.yale.edu/web-accessibility/articles/images。??

[6]WAI-ARIA 標準: ??https://www.w3.org/TR/wai-aria-1.1/。??

[7]信息性圖像: ??https://www.w3.org/WAI/tutorials/images/informative/。??

[8]裝飾性圖像: ??https://www.w3.org/WAI/tutorials/images/decorative/。??

[9]功能圖像: ??https://www.w3.org/WAI/tutorials/images/functional/。??

[10]文本圖像: ??https://www.w3.org/WAI/tutorials/images/textual/。??

[11]復雜圖像:為了傳達數據或詳細信息,提供與圖像中提供的數據或信息等效的完整文本作為替代文本。: ??https://www.w3.org/WAI/tutorials/images/complex/。??

[12]圖像組: ??https://www.w3.org/WAI/tutorials/images/groups/。??

[13]圖像映射: ??https://www.w3.org/WAI/tutorials/images/imagemap/。??

[14]圖片加載失敗后CSS樣式處理最佳實踐: ??https://www.zhangxinxu.com/wordpress/2020/10/css-style-image-load-fail/。??

[15]CodePen Demo -- 圖片處理: ??https://codepen.io/Chokcoco/pen/WNGgNqv?editors=1100。??

[16]現代圖片性能優化及體驗優化指南: ??https://github.com/chokcoco/cococss/issues/36#top。??

[17]Github -- iCSS: ??https://github.com/chokcoco/iCSS。??

責任編輯:姜華 來源: iCSS前端趣聞
相關推薦

2014-12-10 10:12:02

Web

2012-04-25 16:46:25

ASO圖片視頻

2018-05-16 07:41:29

圖片代碼資源

2021-07-05 14:55:28

前端優化圖片

2019-08-14 15:40:05

Web圖片優化前端

2018-01-01 20:56:43

AndroidUIAPI

2019-12-23 10:20:12

Web圖片優化前端

2011-06-14 10:43:44

索引

2014-06-05 10:22:06

Tomcat 7

2024-11-04 16:04:06

2011-06-22 17:11:18

SEO

2019-03-06 10:25:30

Web圖片優化命令

2010-06-04 10:48:15

Hadoop性能

2013-12-16 17:35:14

2019-11-01 14:00:58

前端性能優化代碼

2020-03-27 15:40:10

MySQL索引數據庫

2011-06-24 16:44:43

網站優化

2011-07-21 16:40:28

網站優化

2023-11-06 07:45:42

單據圖片處理

2013-11-21 11:03:29

Nginx性能優化
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久999国产精品 中文字幕在线精品 | 亚洲高清在线观看 | 成人精品一区二区 | 亚洲精品久久久一区二区三区 | 久久久久国产一区二区三区 | 欧美在线视频免费 | 色在线看| 国产精品久久久久久久毛片 | 成人精品一区二区三区 | 中文字幕在线观看成人 | 久久久精品综合 | 中文字幕久久精品 | 日本精品一区二区三区视频 | 日韩欧美久久 | 日韩欧美在 | 黄色片在线免费看 | 日韩国产中文字幕 | 久久久久久看片 | 亚洲欧美日韩国产综合 | 欧洲精品视频一区 | 日韩成人在线视频 | 久久久久成人精品 | 亚洲国产一区视频 | 自拍偷拍精品 | 午夜在线观看免费 | 国产精品a久久久久 | 久久久久久久久久性 | 91精品久久久久久久久中文字幕 | 我想看一级黄色毛片 | 精品一区二区在线观看 | 日韩三级在线 | 在线视频亚洲 | 国产网站在线播放 | 国产一区二区精华 | 蜜桃精品噜噜噜成人av | 国产一区二区不卡 | 成人免费观看男女羞羞视频 | 日韩一区欧美一区 | 一级毛片视频 | 亚洲三级免费看 | 亚洲欧美综合精品久久成人 |