HTML5 响应式图片

现在上网设备越来越多,各种设备的屏幕千差万别,如果只用一张图片去涵盖所有的设备,一是可能会造成某些设备上显示效果不佳,比如使用了一张低清晰度的图,而网页运行在一个高清大屏里;二是可能会浪费带宽,比如使用了一张超大图,而网页运行在小屏幕手机里。在很多情况下我们希望浏览器能根据具体的运行环境去选择最合适的图片来加载,这便是响应式图片。

一睹为快,可以克隆示例项目到本地运行查看

基于设备像素比(DPR)加载图片

设备像素比是指物理像素和逻辑像素(或CSS像素、设备独立像素)之间的比率,比如三个物理像素对应一个逻辑像素,那么设备像素比就是3:1。

这里写图片描述

不同的设备有不同的设备像素比。比如IPhone 6的DPR是2.0,Galaxy S5的DPR是3.0。设备像素比越高,显示效果就越高清,相应的对图片的分辨率要求也就更高。因此就出现了一个需求:希望高DPR的设备下载高清图,这样就不会出现模糊,低DPR的设备下载低清图,这样更节省带宽

<img>标签的srcset属性并使用x描述符可以实现这个功能:

<img src="pic.jpg" srcset="pic-hd.jpg 2x,pic-sd.jpg 3x">

上面的代码可以根据DPR的值来加载图片,pic-hd.jpg 2x表示当DPR=2,加载pic-hd.jpg,以此类推。

基于视口宽度加载图片

视口(viewport)就是浏览器窗口,在不同设备下,视口大小往往不同。这样就有一个问题,一张图片可能在大屏上显示正常,而在小屏幕上很能只显示到一块很小的区域里面,所以在小屏幕里面根本没必要加载这么大尺寸的图。

这里写图片描述

<img>标签的srcset属性并使用w描述符,再结合sizes属性就可以实现根据视口的宽度进行加载图片:

<img src="pic-small.jpg" srcset="pic-small.jpg 200w,pic-medium.jpg 300w,pic-large.jpg 400w"       sizes="(min-width: 800px) 400px,(min-width: 500px) 270px,100px" >

上面的代码可以根据视口的宽度来加载图片,pic-small.jpg 200w表示图像的宽度为200px,w是图像宽度描述符,你可以当成是px来看。sizes属性表示的是图片显示区域的预期尺寸,(min-width: 800px) 400px 表示当视口大于800px时,图片显示区域的预期宽度是400px。

当浏览器打开网页时,它会根据屏幕大小算出图片显示区域的预期大小(通过sizes属性里的媒体查询),然后再根据图片显示区域的预期宽度选择合适图片进行加载。

其实这里影响浏览器选择的因素不止图片显示区域宽度一个,网络、DPR都会影响浏览器选择。所以,不用去猜浏览器会怎么选择,你只要在srcset中提供不同尺寸的图片,在sizes中提供不同视口下的图片显示区域大小的信息,剩下的事就不要管了,具体图片的选择,就交给浏览器去做吧。

注意:媒体查询条件最好从大到小按顺序写,如上面例子中,按800px>500px>0这样的顺序写,否则一些浏览器会忽略中间的媒体查询。

基于艺术设计加载图片

有时候我们希望根据视口的大小显示不同的图片,比如,在小屏幕中只显示主体部分的图片,而在大屏幕中,则可以显示其它没那么紧要的部分。

这里写图片描述

使用<picture>标签加<source>标签可以实现这个功能:

<picture><source media="(min-width:800px)" srcset="pic-large.jpg"><source media="(min-width:500px)" srcset="pic-medium.jpg"><img src="pic-small.jpg">
</picture>

看起来和”基于视口宽度加载图片”的形式很像,不过这里浏览器会严格按照媒体查询的执行结果来选择加载哪个图片,不考虑网络、DPR等因素。

基于浏览器对图片格式的支持情况加载图片

不同的图片格式具有不同的特点,比如webp格式,具有很高的压缩比,但是浏览器支持情况还不太好,所以我们希望能够基于浏览器对图片格式的支持情况来选择加载合适的图片。

使用带有type属性的<source>标签可以实现这个功能:

<picture><source srcset="hello.webp" type="image/webp"><source srcset="hello.jxr" type="image/vnd.ms-photo"><img src="hello.jpg" alt="" width="100" height="150">
</picture>

浏览器会从一个带有type属性的<source>标签开始检查,如果浏览器支持webp格式,就加载webp格式图片,否则检查浏览器是否支持jxr格式,如果支持,就使用jxr格式,否则,使用默认的jpg格式。

参考链接

  1. HTML5标准文档之嵌入内容 文章的主要内容参考至这里
  2. img srcset attribute 结合标准文档综合看
  3. MDN img docs

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/429894.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python股票网格交易法详解_干货 | 浅谈网格交易法

原标题&#xff1a;干货 | 浅谈网格交易法网格交易法的基本原理就是把行情的所有日间上下的波动全部囊括&#xff0c;它不会放过任何一次的行情上下波动。不管市场价格如何上下波动&#xff0c;不外3种形态&#xff1a;上涨&#xff0c;盘整&#xff0c;下跌。由于不同的操作方…

SVN代码回滚命令之---svn up ./ -r 版本号---OK

一、改动还没被提交的情况&#xff08;未commit&#xff09; 这种情况下&#xff0c;见有的人的做法是删除work copy中文件&#xff0c;然后重新update&#xff0c;恩&#xff0c;这种做法达到了目的&#xff0c;但不优雅&#xff0c;因为这种事没必要麻烦服务端。 其实一个命令…

threejs坐标转换

屏幕坐标转three.js坐标 将屏幕坐标转变成threejs空间坐标&#xff1a; function transToThreeCoord(x,y){let mouse new THREE.Vector3();mouse.x (x/window.innerWidth)*2 -1;mouse.y -(y/window.innerHeight)*2 1;return mouse; }注意&#xff1a;在实际使用中&#x…

每天一个linux命令(24):Linux文件类型与扩展名

Linux文件类型和Linux文件的文件名所代表的意义是两个不同的概念。我们通过一般应用程序而创建的比如file.txt、file.tar.gz &#xff0c;这些文件虽然要用不同的程序来打开&#xff0c;但放在Linux文件类型中衡量的话&#xff0c;大多是常规文件&#xff08;也被称为普通文件&…

android socket 发送byte_如何正确地创建和销毁网络通讯程序中的Socket类的对象实例...

软件项目实训及课程设计指导——如何正确地创建和销毁软件应用系统中网络通讯中的Socket类的对象实例1、基于TCP/IP协议的Socket通信相关的基础知识(1)TCP/IP(Transmission Control Protocol传输控制协议/Internet Protocol网间协议)TCP/IP是目前Internet网络中的主要协议&…

H5 使用微信开放标签跳转小程序

微信开放标签是微信公众平台面向网页开发者提供的扩展标签集合&#xff0c;可以在网页上提供跳转小程序、打开 App 等能力。本文梳理使用微信开放标签跳转小程序的过程&#xff0c;以备日后查阅。 参考链接 1. 开放标签说明文档 准备已认证的服务号 开放标签只能绑定已认证…

【网络流24题】No.7 试题库问题 (最大流,二分图多重匹配)

【题意】 假设一个试题库中有 n 道试题。 每道试题都标明了所属类别。 同一道题可能有多个类别属性。现要从题库中抽取 m 道题组成试卷。并要求试卷包含指定类型的试题。 试设计一个满足要求的组卷算法。 输入文件示例input.txt3 153 3 42 1 21 31 31 31 33 1 2 32 2 32 1 31 2…

css3 transform matrix 深入理解

矩阵可以用来表示图形的变换。css3定义了matrix和matrix3d方法&#xff0c;用来表示2维和3维的变换。下文将分析这两个接口的使用方法&#xff0c;并且用下文的思路&#xff0c;实现了一个简单的用js控制css3变换的jquery插件css3js &#xff0c; 变换矩阵和净变换矩阵 matri…

php给留言分配id_简单实现PHP留言板功能

本文实例为大家分享了PHP留言板功能的具体实现代码&#xff0c;供大家参考&#xff0c;具体内容如下HTML代码PHP留言本留言者: {$vo.nickname}|邮箱: {$vo.email}时间: {$vo.replytime}内容: {$vo.content}{$vo.id}楼留言重置function clearDefaultText(){var nickname docume…

所有选择器

*            $("*")          所有元素 #id            $("#lastname")       id"lastname" 的元素 .class           $(".intro")…

随机数公式生成一个负数和正数之间的数_java产生从负数到正数范围的随机数方法...

第四步 完整代码至于调用方法嘛&#xff1a;写个test测试下&#xff1b;(这个方法不好代码看起来很乱&#xff0c;你也可以实例化&#xff0c;然后另写一个test调用)复制代码注意包名需要改成代码所在的包名&#xff0c;我的包名是求平均数package 求平均数;import java.util.A…

sklearn、theano、TensorFlow 以及 theras 的理解

sklearn ⇒ 机器学习算法和模型&#xff1b;theras theanoTensorFlow1. 理解模型以及函数&#xff0c;参数返回值的实际意义 一定要注意模型的构造函数&#xff0c;接收的参数列表&#xff0c;以及该模型本身所要解决的问题&#xff0c;因为在一些实现较好的框架或者库中&#…

参数等效模型可以用于_干货分享电池单体产热特性及热模型标定分析(2)

上篇已讲解了电池单体产热特性及电池模型相关理论&#xff0c;相较之下等效电路模型无需对电池内部的电化学反应有着深入的分析&#xff0c;是通过电路来描述电池的开路电压、内阻等&#xff0c;以实现对电池外特性的表征。本篇将继续讨论此问题&#xff0c;用Matlab和Amesim模…

loadrunner学习记录一

一、什么是性能测试&#xff1f; 使用自动化测试工具对产品按一定的性能指标进行测试&#xff0c;解决性能瓶颈&#xff0c;给用户最好的体验。 二、性能测试的目的&#xff1f; 目的是验证软件系统是否能够达到用户提出的性能指标&#xff0c;同时发现软件系统中存在的性能瓶颈…

检测同心圆_(二)光线如何被眼睛检测到?

在第一篇文章中&#xff08;链接&#xff1a;&#xff08;一&#xff09;视觉系统的全貌&#xff09;&#xff0c;我们已经了解了视觉信息被大脑处理的全过程。现在&#xff0c;我们把目光投向一切的起点——眼睛。实际上&#xff0c;人们提起“视觉”&#xff0c;首先想到的几…

matlab计算斜方差_计算一幅图像的信噪比

本文摘自本人的毕业设计《数字图像滤波算法研究》2019, Chang’an University, Xi’an, China.本文适用于原始图像&#xff08;即不含噪声的图像&#xff09;存在的情况下。使用待计算SNR图像&#xff08;记为A&#xff09;与原始图像&#xff08;记为B&#xff09;做相减运算&…

数据库DBA(3年以内需求)

1、DBA工作&#xff1a;日常维护&#xff0c;备份及恢复&#xff0c;系统安装&#xff0c;补丁应用&#xff0c;健康检查及优化&#xff0c;故障处理; 2、精通sql语句、视图存储过程、函数的编写、触发器; 3、精通data guard/RAC,能顺利配置和管理data guard; 4、精通mysql Mas…

ext get id js_【翻译】Ext JS最新技巧——2015-8-11

Seth Lemmons&#xff1a;使用棒极了的Awesome FontExt JS 6附带了一个新的海卫一主题&#xff0c;可以使用Font Awesome字体作为背景图像的图标。不过&#xff0c;你知道如何通过“iconCls”和“glyph”来使用哪些相同的图标(以及更多来自于广泛的Font Awesome库)吗?使用海卫…

【转载】linux进程及进程控制

Linux进程控制 程序是一组可执行的静态指令集&#xff0c;而进程(process)是一个执行中的程序实例。利用分时技术&#xff0c;在Linux操作系统上同时可以运行多个进程。分时技术的基本原理是把CPU的运行时间划分成一个个规定长度的时间片&#xff0c;让每个进程在一个时间片内运…

区分大小屏幕_VESA持续推动DisplayHDR认证计划,你的屏幕属于何种等级吗?

美国视频电子标准协会(VESA)今年可说是动作频频&#xff0c;年初先发布了专为OLED与其他自发光显示器所制订的DisplayHDR True Black高动态范围标准&#xff0c;下半年则更新DisplayHDR兼容测试规范至1.1版&#xff0c;并发布新的DisplayHDR 1400性能分级&#xff0c;至于年中所…