首页 > 其他分享 >关于前端开发中 img 元素的 srcset 属性

关于前端开发中 img 元素的 srcset 属性

时间:2023-08-14 16:12:44浏览次数:37  
标签:浏览器 img 像素 密度 图像 srcset 前端开发 属性

img 标签的 srcset 属性是一种用于响应式网页设计的属性,它允许开发者为图像提供不同大小和分辨率的版本,以便根据设备的屏幕大小和像素密度自动选择最合适的图像进行显示。通过使用 srcset 属性,可以在不同设备上提供最佳的视觉体验,避免了不必要的图像变形和加载大尺寸图像的性能问题。

srcset 属性的语法和使用方法:

srcset 属性接受一组逗号分隔的描述符(descriptor)和图像路径。每个描述符由图像的宽度、像素密度等信息组成。这些描述符用于指定不同版本的图像,浏览器将根据这些信息来选择合适的图像进行加载。

一个基本的 srcset 属性的语法如下:

<img src="default-image.jpg" srcset="image1.jpg 1x, image2.jpg 2x, image3.jpg 3x">

在上面的例子中,srcset 属性包含了三个不同版本的图像,分别对应不同的像素密度。描述符中的数字表示像素密度的倍数。例如,2x 表示两倍像素密度。

浏览器会根据设备的像素密度选择合适的图像进行加载,例如在像素密度为2x的设备上,会选择加载 image2.jpg

srcset 属性的工作原理:

  1. 浏览器检查设备像素密度: 当页面加载时,浏览器会检查设备的像素密度,通常用DPR(Device Pixel Ratio)来表示。例如,一个标准的Retina显示屏DPR为2,意味着它的像素密度是普通屏幕的2倍。

  2. 浏览器根据描述符选择图像: 浏览器使用 srcset 属性中的描述符,根据设备的像素密度选择最合适的图像。它会尝试找到最接近或略高于当前设备DPR的描述符。

  3. 图像加载: 一旦浏览器选择了最合适的图像,它将加载该图像进行显示。

举例说明:

假设有一个网站,其中包含一个产品的缩略图。该网站在不同设备上都要提供良好的用户体验。以下是一个使用 srcset 属性的例子:

<img src="thumbnail.jpg" 
     srcset="thumbnail-1x.jpg 1x, 
             thumbnail-2x.jpg 2x, 
             thumbnail-3x.jpg 3x"
     alt="Product Thumbnail">

在这个例子中,srcset 属性指定了三个不同版本的缩略图,分别对应不同的像素密度。当页面在不同设备上加载时,浏览器会根据设备的像素密度选择适当的图像。

  • 如果设备的像素密度为1x,浏览器将选择加载 thumbnail-1x.jpg
  • 如果设备的像素密度为2x,浏览器将选择加载 thumbnail-2x.jpg
  • 如果设备的像素密度为3x,浏览器将选择加载 thumbnail-3x.jpg

这样,无论用户在哪种类型的设备上访问网站,都可以得到合适的图像版本,从而保证了最佳的视觉体验和性能。

再看另一个例子:

srcset 属性的基本用法是这样的:

<img srcset="example-small.jpg 600w, example-medium.jpg 900w, example-large.jpg 1200w" 
     src="example.jpg" 
     alt="示例图片" />

在这个例子中,srcset 属性有三个值,每个值包括一个图片 URL 和一个宽度描述符(w)。这意味着 example-small.jpg 的宽度为 600px,example-medium.jpg 的宽度为 900px,example-large.jpg 的宽度为 1200px。

浏览器会根据设备的分辨率和当前 viewport 的大小来选择最合适的图片。例如,如果设备的分辨率为 2x,浏览器视口宽度为 800px,那么浏览器将选择 example-medium.jpg,因为 900px 是最接近 800px * 2 的值。

src 属性是一个后备(fallback)选项,用于那些不支持 srcset 属性的旧浏览器。

除了宽度描述符,srcset 还支持像素密度描述符,表示每个 CSS 像素对应的物理像素数。这对于高分辨率(高 DPI 或 Retina)的设备非常有用。例如:

<img srcset="example-standard.jpg 1x, example-highres.jpg 2x" 
     src="example-standard.jpg" 
     alt="示例图片" />

在这个例子中,如果设备的像素密度为 2x(也就是说每个 CSS 像素对应 2 个物理像素),浏览器将选择 example-highres.jpg。否则,它将选择 example-standard.jpg

srcset 属性通常与 sizes 属性一起使用,以进一步指导浏览器如何选择合适的图片。例如:

<img srcset="example-small.jpg 600w, example-medium.jpg 900w, example-large.jpg 1200w" 
     sizes="(max-width: 600px) 100vw, (max-width: 900px) 50vw, 33vw" 
     src="example.jpg" 
     alt="示例图片" />

在这个例子中,sizes 属性指定了三个媒体条件和相应的槽位宽度。这意味着,如果 viewport 的宽度最大为 600px,图片的宽度将是 viewport 的 100%;如果 viewport 的宽度最大为 900px,图片的宽度将是 viewport 的 50%;否则,图片的宽度将是 viewport 的 33%。

总结:

srcset 属性是在响应式网页设计中优化图像显示的重要工具。它允许开发者为不同的像素密度提供不同尺寸的图像,以适应各种设备。通过使用 srcset 属性,可以避免图像变形和性能问题,提供更好的用户体验。在前端开发中,合理使用 srcset 属性可以使网站在各种设备上都呈现出最佳的视觉效果。

标签:浏览器,img,像素,密度,图像,srcset,前端开发,属性
From: https://www.cnblogs.com/sap-jerry/p/17628925.html

相关文章

  • 前端开发工程师需要掌握哪些算法?
    一个程序员一生中可能会邂逅各种各样的算法,但总有那么几种,是作为一个程序员一定会遇见且大概率需要掌握的算法。作为一名前端开发工程师,今天就通过这个话题和文章来聊聊前端开发工程师需要掌握的算法有哪些呢。......
  • 处理img 变形的问题
    图片被挤压变形了给img添加 object-fit:cover;之后 ......
  • 前端开发用到的工具及框架
    前端开发必备软件(工具)  分类  名称                    下载地址                备注 浏览器调试chromehttps://pc.qq.com/detail/1/detail_2661.html谷歌浏览器调试工具。代码编辑器WebSto......
  • 对于img跟其他标签总是有点间距的问题——将img改成display:block
    问题在学习前端的时候,设置其他元素跟img的间距,结果F12发现有一点间距在给img添加display:block后虽然还是有点,但基本大差不差,顺利解决......
  • IOS Safari、微信小程序 img或者其他标签元素出现黑边、黑线阴影
    这个问题最开始出现在小程序上,然后在社区找到一个一样得案例案例:https://developers.weixin.qq.com/community/develop/doc/000608420706f0d8f65f4e8c95b800一开始以为是小程序的BUG,后来认真看文字才发现在IOS的Safari浏览器里就已经存在,ios的BUG了...,并且复现的......
  • Node.js 与前端开发实战
    0x1Node.js的应用场景前端工程化打包工具:webpack、vite、esbuild、parce代码压缩:uglifyjs语法转换:babeljs,typescript难以替代Web服务端应用学习曲线平缓,开发效率较高运行效率接近常见的编程语言社区生态丰富及工具链成熟(npm)与前端结合的场景会有优势(SSR)竞......
  • 【Python&目标识别】Labelimg标记深度学习(yolo)样本
    ​    人工智能、ai、深度学习已经火了很长一段时间了,但是还有很多小伙伴没有接触到这个行业,但大家应该多多少少听过,网上有些兼职就是拿电脑拉拉框、数据标注啥的,其实这就是在标记样本,供计算机去学习。所以今天跟大家分享下如何使用Labelimg去自己标记深度学习样本。......
  • img 充满并不失真
    CSS中的img属性常常用于网页中的图片展示。有时候我们希望图片充满整个容器,但是又不希望图片失真。我们可以使用CSS的一些技巧来实现这个效果。img{width:100%;height:auto;object-fit:cover;}上面的代码使用了三个属性:width、height和object-fit。首先,我们将图片的......
  • 阿里 - 前端开发规范
    前端JS项目开发规范编程规约(一)命名规范1.1.1项目命名全部采用小写方式,以中划线分隔正例:mall-management-system反例:mall_management-system/mallManagementSystem1.1.2目录命名全部采用小写方式,以中划线分隔,有复数结构时,要采用复数命名法,缩写不用复数正例:scr......
  • 什么是前端开发领域的 visual degradation
    VisualDegradation在前端开发领域中,通常被理解为一种策略,这种策略允许网站或网络应用在不同的浏览器、设备或网络条件下以不同的视觉质量呈现,而不会丧失核心功能。这种策略可以确保所有用户,无论他们的设备或网络条件如何,都能够访问和使用网站或网络应用的主要功能。这并不意味......