【问题标题】:How does the browser determine which srcset image to load when no sizes attribute is present?当没有 size 属性时,浏览器如何确定要加载哪个 srcset 图像?
【发布时间】:2021-10-30 20:44:08
【问题描述】:

我的网站上有一张以各种尺寸显示的图片:

  • 该网站具有响应性,并且明显的图像大小通常是浏览器的大小,但在浏览器非常宽的情况下会有一些例外。因此,图片的宽度可以在 200 到 1000 像素之间变化。
  • 我们希望图像在高分辨率设备 (Retina) 上以原始分辨率显示。

所以,我们的图像以三种分辨率呈现,我们称它们为 i1.pngi2.pngi3.png

我想做的就是这样:

<img src="i1.png" srcset="i1.png 420w, i2.png 840w, i3.png 1260w" />

在我看来,浏览器应该有足够的信息来确定它需要哪个图像。

  • 在标准分辨率设备(无视网膜屏幕)上,它只取&lt;img /&gt; 元素的宽度,然后加载宽度大于或等于元素宽度的图像。例如。如果图片元素是 600px 宽,那么它将加载 i2.png
  • 在 Retina 设备上,它只会将&lt;img /&gt; 元素的宽度乘以设备像素比。例如。在“2x”设备上,它会为 600px 的图像加载 i3.png,因为 2 x 600 = 1200,所以它需要宽度为 1260px 的图像。

看起来浏览器确实做了类似的事情,但在某些情况下它会加载840px 图像,即使420px 图像就足够了。

浏览器使用哪些因素来确定要加载的图片大小?

  • 是否使用 CSS 规则来确定图像的表观宽度?
  • 还是忽略 CSS,只查看 &lt;img /&gt; 上的 widthheight 属性(如果存在)?
  • 如果 CSS 的某些部分尚未加载怎么办?

关键点:我不想使用sizes 属性,因为我需要对设备像素比率和浏览器窗口宽度的所有可能组合进行媒体查询。这应该没有必要,因为正如我所说,浏览器应该有足够的信息。

我查看了关于该主题的Mozilla Docs,但他们说如果省略了sizes,那么我们需要在srcset 属性中使用2x 描述符(而不是420w 描述符)。这对我的场景没用:目标是让浏览器找出要加载的图像,不仅基于设备像素比,还基于响应能力。

【问题讨论】:

    标签: html css image web


    【解决方案1】:

    似乎浏览器不尊重任何 CSS 来决定加载哪个图像。毕竟,在图像开始加载时,并不清楚哪些 CSS 文件已经加载。

    相反,它会将每个图像视为已拉伸到整个页面宽度。如果屏幕是非视网膜且 600 像素宽,它将加载下一个更大的图像尺寸(上例中为 840 像素),而不管图像在屏幕上占据的实际尺寸。

    对于视网膜屏幕,它只是将所需的图像宽度乘以设备像素比。

    【讨论】:

      猜你喜欢
      • 2017-02-06
      • 2019-03-15
      • 1970-01-01
      • 1970-01-01
      • 2014-12-21
      • 1970-01-01
      • 2011-08-21
      • 2014-10-24
      • 1970-01-01
      相关资源
      最近更新 更多