sizes属性配合srcset,让浏览器根据图片在不同屏幕下的实际布局宽度选择最合适的图像版本。srcset提供多张不同分辨率的图片,sizes则通过媒体查询指定每种条件下图片的渲染宽度,如“(max-width: 600px) 100vw”表示小屏下占满视口。浏览器先匹配sizes中的条件,计算出所需宽度,再结合设备像素密度从srcset中选出最优图片,避免过度加载或模糊显示。它解决了仅靠srcset时浏览器无法判断布局尺寸的问题,提升性能与用户体验。sizes常用于响应式布局,支持vw、px等单位,需注意顺序、默认值及复杂布局中的手动计算。结合picture元素时,可先由picture按条件选择不同图片源(如WebP或裁剪图),再在每个source内用sizes和srcset进行精细分辨率控制,实现艺术方向与性能优化的双重目标。

sizes
srcset
srcset
srcset
sizes
要搞清楚
sizes
srcset
srcset
w
image-small.jpg 480w, image-medium.jpg 800w, image-large.jpg 1200w
这时候,
sizes
<img srcset="image-small.jpg 480w,
image-medium.jpg 800w,
image-large.jpg 1200w"
sizes="(max-width: 600px) 100vw,
(max-width: 1200px) 50vw,
800px"
src="image-fallback.jpg"
alt="A descriptive alt text">我们来剖析一下这个
sizes
(max-width: 600px) 100vw
(max-width: 1200px) 50vw
800px
浏览器在解析这段代码时,会执行以下步骤:
sizes
100vw
50vw
srcset
srcset
image-medium.jpg 800w
这个过程是自动且高效的。作为开发者,我们需要做的是准确地告诉浏览器图片在不同布局下的“真实”尺寸预期,而不是猜测用户的设备分辨率。这听起来有点像在玩一个谜题,但一旦你掌握了布局和媒体查询的逻辑,它就变得非常直观。
sizes
很多时候,我们初次接触响应式图片,会觉得
srcset
w
sizes
一种是“过度加载”:在小屏幕设备上,图片可能只占据很小一部分宽度,但浏览器却因为不知道这个布局信息,下载了为大屏幕准备的高分辨率图片。这白白浪费了用户的流量,拖慢了页面加载速度,尤其是在移动网络环境下,用户体验会大打折扣。
另一种是“加载不足”:在大屏幕或者高DPR设备上,如果浏览器选择了分辨率过低的图片,图片就会显得模糊不清,影响视觉效果。
sizes
srcset
sizes
编写高效且准确的
sizes
从最窄或最宽的媒体查询开始:通常,我会建议从
max-width
min-width
sizes
sizes="(max-width: 600px) 100vw, (max-width: 900px) 75vw, 50vw"
这里,
100vw
75vw
50vw
理解vw
px
vw
33.3vw
px
sizes="(min-width: 1200px) 800px, 100vw"
考虑CSS布局的影响:这是最容易出错的地方。如果你的图片在一个复杂的CSS Grid、Flexbox布局中,或者有边距、内边距,那么它的实际渲染宽度可能不是简单的
100vw
50vw
20px
calc(50vw - 40px)
sizes
calc()
vw
px
960px
sizes="(min-width: 1200px) 320px, 100vw"
不要忘记默认值:
sizes
调试和验证:这是不可或缺的一步。在浏览器开发者工具中,选中你的
<img>
currentSrc
currentSrc
sizes
迭代和优化:
sizes
sizes
sizes
picture
sizes
picture
sizes
<img>
srcset
picture
picture
<source>
<img>
<source>
media
<source>
<source>
picture
<img>
它们如何协同工作?
picture
sizes
picture
<source>
<source>
srcset
sizes
流程大致是这样的:
picture
<source>
<source>
media
<source>
<source>
<source>
srcset
sizes
<img>
<source>
sizes
<source>
srcset
<source>
picture
<img>
<img>
srcset
sizes
一个结合的例子:
<picture>
<!-- 大屏幕,特定艺术方向的WebP图片 -->
<source media="(min-width: 1200px)"
srcset="hero-desktop-art-dir.webp 1200w,
hero-desktop-art-dir-2x.webp 2400w"
sizes="900px">
<!-- 中等屏幕,不同裁剪的WebP图片 -->
<source media="(min-width: 600px)"
srcset="hero-tablet-art-dir.webp 800w,
hero-tablet-art-dir-2x.webp 1600w"
sizes="100vw">
<!-- 默认回退,为所有浏览器提供JPEG,并进行分辨率切换 -->
<img src="hero-mobile.jpg"
alt="A beautiful landscape"
srcset="hero-mobile.jpg 400w,
hero-tablet.jpg 800w,
hero-desktop.jpg 1200w"
sizes="(max-width: 600px) 100vw, 50vw">
</picture>在这个例子中:
<source>
srcset
sizes="900px"
hero-desktop-art-dir.webp
hero-desktop-art-dir-2x.webp
<source>
srcset
sizes="100vw"
hero-tablet-art-dir.webp
hero-tablet-art-dir-2x.webp
<img>
<img>
srcset
sizes
简单来说,
picture
srcset
sizes
以上就是sizes属性如何配合srcset的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号