在这篇文章中讨论的新特性 —
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>