在這篇文章中討論的新特性 —
srcset/sizes/<picture>
— 都已經被新版本的現代瀏覽器和移動瀏覽器所支 持(包括Edge,而不是IE)。
<img srcset="elva-fairy-320w.jpg 320w, elva-fairy-480w.jpg 480w, elva-fairy-800w.jpg 800w" sizes="(max-width: 320px) 280px, (max-width: 480px) 440px, 800px" // 默認 src="elva-fairy-800w.jpg" alt="Elva dressed as a fairy">
須要說明的幾點以下:css
srcset
語法: "圖片路徑 物理像素, 圖片路徑 物理像素, ....."size
: "媒體查詢 css像素"src
: 當瀏覽器不支持上面的屬性的時候,默認加載這裏加載的流程以下:java
在不少pc端上,1px=1w
web
<img srcset="elva-fairy-320w.jpg, elva-fairy-480w.jpg 1.5x, elva-fairy-640w.jpg 2x" src="elva-fairy-640w.jpg" alt="Elva dressed as a fairy"> img { width: 320px; }
通常狀況下當咱們給img
設置固定的寬的時候,爲了在不一樣的dpr
設備上顯示相同的大小,能夠配合x
來,例如1.5x
表明dpr爲1.5的設備瀏覽器
<picture> <source media="(max-width: 799px)" srcset="elva-480w-close-portrait.jpg"> <source media="(min-width: 800px)" srcset="elva-800w.jpg"> <img src="elva-800w.jpg" alt="Chris standing up holding his daughter Elva"> </picture>
須要說明的幾點:svg
srcset
、sizes
屬性img
元素,以備瀏覽器不支持的時候使用css
和javaScript
來完成圖片替換由於你不能先加載好 <img>
元素後, 再用 JavaScript
檢測視圖的寬度,若是以爲大小不合適,就動態地加載小的圖片替換已經加載好的圖片,這樣的話, 原始的圖像已經被加載了, 而後你也加載了小的圖像, 這樣的作法對於響應式圖像的理念來講,是很糟糕的。網站
svg
位圖由以像素爲單位的寬和高表示,若是位圖顯示的尺寸大於原始尺寸,一張較小的位圖看來會有顆粒感(然而矢量圖不會這樣)ui
可是它不適用於全部的圖片,在某種程度上是這樣的——它們不管是文件大小仍是比例都合適,不管在哪裏你都應該儘量的使用它們。code
雖然在簡單圖形、圖案、界面元素等方面較好,但若是是有大量的細節的照片,建立矢量圖像會變得很是複雜。加載會消耗更多的帶寬。xml
有不少使人激動的新圖像格式(例如WebP
和JPEG-2000
)能夠在有高質量的同時有較低的文件大小。然而,瀏覽器對其的支持良莠不齊。圖片
爲了兼容老舊瀏覽器,咱們能夠在<source>
標籤當中指定MIME
類型,使用type
屬性,並在srcset
當中指定相應格式的圖片
<picture> <source type="image/svg+xml" srcset="pyramid.svg"> <source type="image/webp" srcset="pyramid.webp"> <img src="pyramid.png" alt="regular pyramid built from four equilateral triangles"> </picture>