前言

关于图片img的响应属性srcset,和sizes及picture,很久之前看过,但是因为浏览器兼容原因,一直没有在项目中使用,但是最近发现,这几个属性兼容性还可以了,可以去caniuse中看一下,基本可以在项目中使用了。今天,简单介绍一下这几个属性。

srcset 和 sizes 属性

srcset 是一个包含一个或多个源图的源图容器,不同源图用逗号分隔,每一个源图由下面两部分组成:

1、图片 URL

2、 x (像素比描述)或 w (图片像素宽度描述)描述符(与图片 URL 相隔一个空格), w 描述符的加载策略是通过 sizes

属性里的声明来计算选择的

上述第2点如果没有给出,则是默认的 1x 。

以下情况是不正确的:

在同一个 srcset 里的不同图片出现有的用 x 描述符有的用 w 描述符

同一个图片既使用了 x 描述符也使用了 w 描述符

对于不正确的情况,不同的浏览器使用不同的处理方法。

sizes 写法与 srcset 差不多,也是用逗号分隔的一个或多个 string ,每个 string 由下面两部分组成:

1、媒体查询。最后一个 string 不能有这个,作为 fallback

2、图片 size (大小)信息。需要注意的是这里不能使用 % 来描述图片大小,如果要用百分比来表示,要使用类似于 vw (100vw =

100%设备宽度(viewport))这样的单位来描述,其它的像是 px 、 em 等可以正常使用。

sizes 里给出的不同媒体查询选择图片大小的建议只对 w 描述符起作用,也就是说,如果 srcset 里用的是 x 描述符或根本没有定义 srcset ,这个 sizes 是没有意义的。

x 描述符

srcset=“

https://www.haorooms.com/images/2500 5x,

https://www.haorooms.com/images/1500 3x,

https://www.haorooms.com/images/1000 2x,

https://www.haorooms.com/images/500 1x

"

src="https://www.haorooms.com/images/500"

/>

上面代码的意思就是:5像素比(现在很多安卓手机比如小米、华为的所谓高清2k屏就是5像素比以上的)的设备使用2500x2500像素的图片,3像素比的设备使用1500x1500像素的图片,2像素比的设备使用1000x1000像素的图片,1像素比(普通的笔记本电脑显示屏就是1像素比的)的设备使用500x500像素比的图片。

对于不支持 srcset 的浏览器,显示 src 的图片(这个图片是500x500像素、RGB 颜色 abc 的)。

而对于 srcset 里没有给出像素比的设备,不同浏览器的选择策略不同。比如例子中没有给出1.5像素比的设备要使用哪张图,浏览器可以选择2像素比的也可以选择1像素比的(当然也可以选择5像素比或者使用 src 的图片,但是这显然不是一个好的选择)。

w 描述符和 sizes

w 描述符可以简单理解为描述源图的像素大小(无关宽度还是高度,大部分情况下可以理解为宽度)。

srcset=“

https://www.haorooms.com/images/2000 2000w,

https://www.haorooms.com/images/1500 1500w,

https://www.haorooms.com/images/1000 1000w,

https://www.haorooms.com/images/500 500w

"

sizes=“

(max-width: 500px) 500px,

(max-width: 1000px) 1000px,

(max-width: 1500px) 1500px,

2000px

"

src="https://www.haorooms.com/images/500/haorooms"

/>

上述例子的意思是:对于 viewport 在 500px 及以下的使用 500w 的图片,以此类推,最后一个是前面的媒体查询都不符合的情况下使用 2000w 的图片。

这里如果没有相对应的 w 描述,一般选择第一个大于它的。如上述例子中如果有一个媒体查询是 700px 的,一般加载 1000w 对应的源图。(这里之所以用“一般”这个词,是因为文档里没有规定是这样的,而根据参考和我的尝试——mac Safari 10.0.1、windows Chrome 55.0、android Chrome 55.0、windows Firefox 50.1选择加载第一个大于它的,Microsoft Edge 38选择加载的是 500w ,可能是第一个小于它的也可能是最接近的——我认为一般是选择加载第一个大于它的。)

下面说一个使用百分比的例子:

srcset=“

https://www.haorooms.com/images/2000 2000w,

https://www.haorooms.com/images/1500 1500w,

https://www.haorooms.com/images/1000 1000w,

https://www.haorooms.com/images/500 500w

"

sizes=“

(max-width: 500px) 100vw,

(max-width: 1000px) 80vw,

(max-width: 1500px) 50vw,

2000px

"

src="https://www.haorooms.com/images/500/haorooms"

/>

这里图片的选择就是: viewport 宽度乘以1或0.8或0.5得到的像素来选择不同的 w 。比如 viewport 为 800px ,对应 size 80vw ,就是 800*0.8=640 像素,应该加载一个 640w 的源图,但是没有找到 640w ,这时候一般选择第一个大于 640w 的,也就是 1000w 。

对于没有给出 sizes 的,一般是按照 100vw 来选择加载图片。当然这里也是没有规定的、看浏览器的选择的。

picture 元素

picture 元素内部的 source 与 img 的关系像是相片与相框的关系,相框带有一个底图,我很有多不同尺寸(风格)相片,我试图找到第一个合适尺寸(合适风格)的相片放到相框里,如果没有找到就不放相片而用相框本身的底图,当然如果没有相框那就不能挂到墙上去,而 picture 告诉你这个相框只能在这些图片里找合适的。

picture 支持尺寸(媒体查询)和格式选择。

下面是尺寸选择的例子:

html picture属性,html5图片 srcset、sizes 属性和 picture 元素相关推荐

  1. html5表单新增验证属性,HTML5表单增强属性

    email 此类型要求输入格式正确的email地址,否则浏览器是不允许提交的,并会有一个错误信息提示.此类型在Opera中必须指定name值,否则无效果. url 要求输入格式正确的URL地址,Ope ...

  2. 响应式图片的实现(含picture标签、srcset属性、sizes属性的使用方法,设备像素比详解)

    什么是响应式图片? 响应式图片即针对不同的设备分辨率和尺寸,显示对应的最佳分辨率的图片. 具体表现为: 高分辨率的屏幕,显示高分辨率图像(确保高清屏上,图片依然足够清晰) 低分辨率的屏幕,显示低分辨率 ...

  3. 前端src显示服务器图片,响应式图像之srcset和sizes属性

    再一次提到响应式图像,司空见惯了,有点腻了,如果你看完下面的内容,我觉得你会对响应式图像处理会有新的认知.这篇文章我也是无意在进步博客上看到的,认真的看了几遍,有些东西讲的很不错,所以想分享下. 开发 ...

  4. 响应式图像_如何为响应图像使用HTML5“图片”,“ srcset”和“大小”

    响应式图像 <picture>是HTML5元素,旨在为我们提供更多的功能和性能更好的响应图像功能. Picture标签不会加载单个图像并尝试调整其大小以适合所有可能的视口尺寸和布局,而是加 ...

  5. CSS3的srcset size属性1x 2x 3x

    responsive-images-youre-just-changing-resolutions-use-srcset 翻译原文: https://css-tricks.com/responsive ...

  6. html5常用的属性标签,HTML5常用标签及其属性设置

    一.Html5的基本结构 网页的内容 二.head标签内常用标签 1.meta标签:设置元数据信息(metadata),用来描述HTML文档的信息,为网页提供用户不可见的信息.常用属性: ⑴chars ...

  7. html5中有哪些新属性,整理HTML5中表单的常用属性及新属性

    HTML5 新的表单属性HTML5 的 和 标签添加了几个新属性.新属性: autocomplete novalidate 新属性: autocomplete autofocus form forma ...

  8. html5 video 播放状态,10分钟了解HTML5的Video标签属性、方法和事件

    标签的属性 src :视频的属性 poster:视频封面,没有播放时显示的图片 preload:预加载 autoplay:自动播放 loop:循环播放 controls:浏览器自带的控制条 width ...

  9. html5不支持的属性,HTML5 常用语法一览(列举不支持的属性)

    HTML头部标记 标记 描述 HTML5标准 定义页面中所有链接的基准URL 设定显示在浏览器左上方的标题内容 表明该文档是一个可用于检索的网关脚本 不支持 文档本身的元信息,例如查询关键词,有效期等 ...

最新文章

  1. 如何在 bash 中使用键值字典
  2. 关于数据库优化1——关于count(1),count(*),和count(列名)的区别,和关于表中字段顺序的问题...
  3. 6-1 数组元素的区间删除
  4. 单元测试编写_为什么要编写单元测试-测试技巧8
  5. Pythonic---------详细讲解
  6. 用JSONObject解析和处理json数据
  7. 关于各种无法解析的外部符号问题的相应解决方案【转】
  8. php防止sql注入的方法
  9. java:数据结构面试题
  10. 小管家进销存_管家婆物联宝微订货V2.3发版公告
  11. oracle select into from 用法,数据库插入数据之select into from与insert into select区别详解...
  12. 零基础学习云计算需要准备什么?
  13. 抖音设备注册生成device_id与install_id hook分析记录
  14. 2022超火的微信小说小程序源码-自带安装教程
  15. 73个word使用终极技巧
  16. html5 replace,js replace函数用法详解
  17. 指纹辨识传感器解决方案
  18. latex 插图位置跑在文档最后的解决方法
  19. 六、python操作mysql篇(黑马程序猿-python学习记录)
  20. 2023最新小额现金贷系统源码+可打包成APP/内附安装教程

热门文章

  1. YESLAB老余——网络自动化系列(2)
  2. 技术人员必须具备的四种能力|关于技术对话与思考
  3. Lighting Network(闪电网络)大白话解析
  4. RSA加密原理与RSA公钥加密系统、数字签名
  5. K8S系列(四)Deployment 详解
  6. 虚幻引擎(7)-持枪射击
  7. 使xmp, pre, plaintext的内容自动换行
  8. python缩写词函数_第6章函数-6 缩写词
  9. 2021年考计算机考研三战,2021工作两年后零基础二战三跨410上岸哈工计算机初试经验分享...
  10. 辛弃疾《丑奴儿·书博山道中壁》赏析 (转载自网络)