博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
响应式图片 (responsive image)
阅读量:6951 次
发布时间:2019-06-27

本文共 2111 字,大约阅读时间需要 7 分钟。

更新 : 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 

这样就不会造成浪费了. 

 

转载于:https://www.cnblogs.com/keatkeat/p/8409422.html

你可能感兴趣的文章
【对讲机的那点事】物联卡与手机SIM卡的区别!
查看>>
【对讲机的那点事】公网对讲机初次办理物联网卡应注意哪些问题?
查看>>
移动APP持续交付系列之云构建价值分析
查看>>
最后的 Windows XP,也将在 4 月 9 日退役
查看>>
一条命令永久更改linux主机名(centos7)
查看>>
list set array map 排序问题
查看>>
阿里云发布首届POLARDB数据库性能大赛 推动云原生数据库发展
查看>>
web8
查看>>
14.源码阅读(启动一个没有在AndroidManifest中注册的Activity)
查看>>
只需6步,从头开始编写机器学习算法
查看>>
操作系统复习题-第四章 存储器管理
查看>>
这样的多维分析功能才完整
查看>>
VirtualBox安装RHEL6.5/CentOS7.0
查看>>
RequireJS进阶
查看>>
Strategy for Python Challenge(03)
查看>>
JS函数式编程读书笔记 - 2
查看>>
Yii2系列教程:安装及Hello World
查看>>
带权轮询算法
查看>>
细谈证书与Provisioning Profile
查看>>
bboss平台子系统配置及系统登录以及其它常用配置介绍
查看>>