更新 : 2019-02-21

除了写 srcset sizes 还有一种 x1, x2, x3, x4 的写法.

我们对比一下

假设

pc 希望是 1000w

mobile 希望是 300w

size 的写法是 if device == 300w use 300w, else if device == 1000w use 1000w (这里写的应该是 css media query, 但是我用 js 来表达就好)

游览就会通过匹配 device width 然后自动乘与用户的 retina 去寻找图片.

有时候我们并不需要 responsive 依据 device 的 width

但我们依然想要兼顾 retina

那么我们可以时候 x1, x2 的写法

只写 srcset 就可以了, 不需要写 sizes

srcset= 300w.jpg x1, 600w.jpg x2

无论 device 是 pc 还是 mobile 都只依据 retina 选图.

显然 sizes 还是比较强大的,而且 sizes 的 media query 也可以单独匹配 retina.

再来一个复杂的场景.

比如我们要做一个 image gallery 大图.

我们允许 admin upload 任意的图片.

user 则全屏展现图片.

举例

user device :

pc 1366 x 768  retina 1

pc 1366 x 768  retina 2

mobile 420 * 720 retina 1

mobile 420 * 720 retina 2

mobile 420 * 720 retina 3

mobile 420 * 720 retina 4

5 种 device

而 admin upload 得图片有 3 张

500x500

1500x1500

3000x3000

我们希望用户 device 小得情况下,不要给大图, 也希望用户 device 大得情况下,尽量展现大图.

这个时候得 srcset 我们需要依赖于 admin 图片得大小来写 (动态得,每张图得 srcset 都可能不同写法)

pc 1366 x 768  retina 1

pc 1366 x 768  retina 2

500x500

在 pc 得情况下, 500x500 希望完全展现

mobile 420 * 720 retina 1

手机 retina 1 得情况下, 我们要做小图

500 缩率图到 420.

然后 sizes = if (device width == 420 && retina == 1) use 420w;

我们只把需要压小得图写入 srcset. 其余得都用最大的图

写完小图后最后 sizes 加上

else if (retina == 1) 500w

else if (retina == 2) 500w

else if (retina == 3) 500w

else if (retina == 4) 500w

游览器有一个如果匹配不到就用最大图得概念,所以最后这个我们也可以改成

else 500w

就可以了. 总结就是写 if 所有需要缩率图得情况,然后最后加上 else 最大图.

更新 : 2019-01-01

如果我们不写 srcset 也不写任何 width, img 会依据图的大小来设置 width, retina 1 的情况下是完全 ok 的.

但是呢, 在有 retian 的情况就糟糕了, 因为它不会兼顾 device retina, 图片会变的很大很萌.

它不理会 mata width=device-width 的.

所以我们怎样都需要自己去设置 wdith , 或者使用 srcset. 不能放任不管哦.

从前世上只有一种 device.

屏幕大小都一样, 这时我们图片写 src 就可以了.

后来不同的屏幕大小出现了.

如果我们只是简单的用 css 来缩略大图去小图,这样的话虽然设计过关,但是却浪费了用户的宽带去下载较大的图,这种浪费不好。

后来就有了 <img sizes="mediaquery imageWidth"  srcset="imagesrc imageWidth, imagesrc imageWidth" />

sizes + srcset

sizes 负责用 mediaquery 针对 device width 等来表示使用多少 width 的图片. 这和写 css responsive 是完全同一个概念

srcset 则负责写入所有可以使用的图片,并且写上所有图片的宽.

游览器匹配 sizes 的 mediaquery 后会找到你想要的 image width, 然后依据 device 的 retina 来乘于 image width,  这时在通过这个 width 去寻找真确的 image src

这样就不会造成浪费了.

响应式图片 (responsive image)的更多相关文章

  1. 【读书笔记《Bootstrap 实战》】3.优化站点资源、完成响应式图片、让传送带支持手势

    A.优化站点资源 速度很重要.用户很关心.我们的站点必须加载够快,否则用户就会走人.SEO 也很重要.我们的站点必须加载够快,否者搜索排名就会下降. 明白了这样,我们就来清点一下 [Bootstrap ...

  2. 【Bootstrap】3.优化站点资源、完成响应式图片、让传送带支持手势

    A.优化站点资源 速度很重要.用户很关心.我们的站点必须加载够快,否则用户就会走人.SEO 也很重要.我们的站点必须加载够快,否者搜索排名就会下降. 明白了这样,我们就来清点一下 [Bootstrap ...

  3. CSS 与 HTML5 响应式图片

    什么是响应式图片? 响应式图片是指:用户代理根据输出设备的分辨率不同加载不同类型的图片,不会造成带宽的浪费.同时,在改变输出设备类型或分辨率时,能及时加载对应类型的图片. CSS3 响应式图片 对于很 ...

  4. CSS与HTML5响应式图片

    随着 Retina 屏幕的逐渐普及,网页中对图片的适配要求也越来越高.如何让图片在放大了两倍的 Retina 屏幕显示依然清晰,曾经一度困扰着网页开发者,好在 CSS3 与 HTML5 已经着力在改变 ...

  5. 如何使用 HTML5 的picture元素处理响应式图片

    来自: http://www.w3cplus.com/html5/quick-tip-how-to-use-html5-picture-for-responsive-images.html 图片在响应 ...

  6. web响应式图片设计实现

    .header { cursor: pointer } p { margin: 3px 6px } th { background: lightblue; width: 20% } table { t ...

  7. bootstrap中如何让响应式图片(img-responsive)水平居中

    我们在用bootstrap排版内容的时候,有的时候在内容中需要图片水平居中对齐. 一般情况下,我们的图片都使用了 .img-responsive 类来实现响应式图片.如果需要实现响应式图片水平居中,那 ...

  8. 响应式图片srcset学习

    响应式图片srcset全新释义sizes属性w描述符 先转再看

  9. 继续送假期干货——响应式图片工具smartImg

    中午看<众妙之门>看到一个响应式图片处理工具(点此查看)的介绍,然后就心血来潮想着不妨自己写一个基于JQ的吧,于是就又有了这么一个干货给大家. smartImg 的全部文件可以从我的Git ...

随机推荐

  1. Linux下查看网卡驱动和版本信息

    Linux下查看网卡驱动和版本信息 查看网卡生产厂商和信号 查看基本信息:lspci 查看详细信息:lspci -vvv # 3个小写的v 查看网卡信息:lspci | grep Ethernet 查 ...

  2. rabbitmq install erlang faild

    我安装的时候莫名的出现这2个错误 No Presto metadata available for rabbitmq-erlangwarning: /var/cache/yum/x86_64/7/ra ...

  3. PowerDesigner 学习:十大模型及五大分类

    个人认为PowerDesigner 最大的特点和优势就是1)提供了一整套的解决方案,面向了不同的人员提供不同的模型工具,比如有针对企业架构师的模型,有针对需求分析师的模型,有针对系统分析师和软件架构师 ...

  4. 振兴中华|2013年蓝桥杯A组题解析第三题-fishers

    标题: 振兴中华 小明参加了学校的趣味运动会,其中的一个项目是:跳格子. 地上画着一些格子,每个格子里写一个字,如下所示:(也可参见p1.jpg) 从我做起振 我做起振兴 做起振兴中 起振兴中华 比赛 ...

  5. SCU 4439 Vertex Cover(二分图最小覆盖点)题解

    题意:每一条边至少有一个端点要涂颜色,问最少涂几个点 思路:最小顶点覆盖:用最少的点,让每条边都至少和其中一个点关联,显然是道裸最小顶点覆盖题: 参考:二分图 代码: #include<iost ...

  6. 【做题】Codeforces Round #436 (Div. 2) F. Cities Excursions——图论+dfs

    题意:给你一个有向图,多次询问从一个点到另一个点字典序最小的路径上第k个点. 考虑枚举每一个点作为汇点(记为i),计算出其他所有点到i的字典序最小的路径.(当然,枚举源点也是可行的) 首先,我们建一张 ...

  7. 【htop】Linux CentOS 6.5下安装htop进程管理工具

    一.Htop的使用简介 This is htop, an interactive process viewer for Linux. It is a text-mode application (fo ...

  8. 题解—— 洛谷 p1269 信号放大器(贪心)

    深刻的教训,不要写错读入 #include <cstdio> #include <algorithm> using namespace std; ; ; ,u[MAXM],v[ ...

  9. Graph Convolutional Networks (GCNs) 简介

    Graph Convolutional Networks 2018-01-16  19:35:17 this Tutorial comes from YouTube Video:https://www ...

  10. 深度学习课程笔记(七):模仿学习(imitation learning)

    深度学习课程笔记(七):模仿学习(imitation learning) 2017.12.10 本文所涉及到的 模仿学习,则是从给定的展示中进行学习.机器在这个过程中,也和环境进行交互,但是,并没有显 ...