1. 基础
设备像素比
设备像素比是每个 CSS 像素的设备像素数,与:
- 设备的像素密度(每英寸的物理像素数)
- 浏览器的缩放级别因此,更大的像素密度和/或更高的缩放级别会导致更高的设备像素比。
srcset
属性和x
描述符
在<img>
标签上,属性中的x
描述符srcset
用于定义设备像素比。所以在:
<img src="image.jpg" srcset="image-1x.jpg 1x, image-2x.jpg 2x, image-3x.jpg 3x">
- 对于 1 的设备像素比,将使用图像 image-1x.jpg。
- 对于 2 的设备像素比,将使用图像 image-2x.jpg。
- 对于 3 的设备像素比,将使用图像 image-3x.jpg。
- 对于后备,
src
将使用属性 (image.jpg)。
srcset
属性和w
描述符
如果您想在更大或更小的视口上显示不同的图像,则w
描述符 insrcset
和新属性 ( sizes
) 将发挥作用:
<img src="image.jpg" srcset="image-1x.jpg 200w, image-2x.jpg 400w, image-3x.jpg 600w">
这提到第一张图片的宽度是200px
,第二张图片是400px
,第三张图片是600px
。此外,如果用户的屏幕很150 CSS pixels
宽,就描述符而言,这等同于以下内容x
:
<img src="image.jpg" srcset="image-1x.jpg 1.33x, image-2x.jpg 2.67x, image-3x.jpg 4x">
sizes
属性
您想要在不同屏幕尺寸上使用不同尺寸图像(不同高度、宽度)的实际实现是通过使用sizes
属性和属性w
描述符来完成的srcset
。
<img src="image.jpg" sizes="50vw" srcset="image-1x.jpg 200w, image-2x.jpg 400w, image-3x.jpg 600w">
如果浏览器宽度为500 CSS pixels
,则图像将显示为250px
宽(因为50vw
)。现在,这相当于指定:
<img src="image.jpg" srcset="image-1x.jpg 0.8x, image-2x.jpg 1.6x, image-3x.jpg 2.4x">
因此,对于1.5x
显示器,image-2x.jpg
将由浏览器下载,因为它给出了设备像素比(1.6x
最适合1.5x
显示器)。
2. 回答你的问题
您提到您模拟了一个480 像素CSS 宽度的屏幕。
因为您已设置sizes
为100vw
,这相当于指定:
<img src="boat-2400.jpg" srcset="
boat-480.jpg 1x,
boat-900.jpg 1.88x,
boat-1800.jpg 3.75x,
boat-2400.jpg 5x">
您有机会3x
显示,因此浏览器会下载boat-1800.jpg
文件。
问题
奇怪的是,当我在 iOS 上的 Chrome 上测试时,浏览器实际上下载了boat-2400.jpg,这更令人担忧。
这可能是由于您的 iOS 设备的设备像素比较高,可能接近 5。
我在这里错过了什么吗?
我不这么认为。
我想我不需要 size 属性,因为我在所有视图中都将图像设置为 100vw
的值sizes
是100vw
默认值。但是如果你想使用w
描述符并且想要拥有除你的之外100vw
的东西sizes
,你需要sizes
属性。