跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

怎么通过HTML的srcset属性实现响应式图片分辨率自适应加载

srcset中x描述符表示设备像素比,w描述符表示图片固有宽度;是否生效取决于是否配合sizes属性——无sizes时按x匹配DPR,有sizes时仅按w匹配布局宽度。 srcset 里写的到底是像素密度还是图片宽度 很多人一上来就写
srcset="img-1x.jpg 1x, img-2x.jpg 2x"
,结果发现高清屏没加载 2x 图——因为浏览器根本没按你预期的“设备像素比”选图。
srcset
的
1x/2x
确实表示设备像素比(dpr),但它只在没有
sizes
属性时才生效;一旦加了
sizes
,浏览器就切换成“宽度匹配模式”,完全忽略
x
单位,只看后面带
w
的描述。 所以关键判断点是:你要控制的是「设备类型」(比如只给 Retina 屏发高分图),还是「布局尺寸」(比如在小屏上只显示 320px 宽的图,那就没必要加载 1200px 的大图)?前者用
x
,后者必须配
sizes
+
w
。 sizes 属性不写或写错会导致 srcset 形同虚设
sizes
不是可选的“锦上添花”,而是告诉浏览器“这张图在页面中最终会占多宽”的关键线索。如果省略它,浏览器只能假设图片会占满视口宽度(
100vw
),然后从
srcset
中挑最接近的那个
w
值——这往往导致小屏也加载大图。 常见错误写法和修正建议: 立即学习 “ 前端免费学习笔记(深入) ”; 错:
sizes="(max-width: 768px) 100vw, 50vw"
—— 没指定默认值,某些旧浏览器会 fallback 到
100vw
对:
sizes="(max-width: 768px) 100vw, (min-width: 769px) 50vw, 50vw"
或更稳妥地补上兜底:
sizes="(max-width: 768px) 100vw, 50vw"
(现代浏览器已支持无兜底写法,但 Safari 13.1 之前需要) 错:
sizes="50vw"
配
srcset="img-small.jpg 320w, img-large.jpg 1200w"
—— 浏览器发现 50vw 在小屏下可能只有 180px,却没提供更小的
w
选项,只能硬选 320w,造成浪费 如何组合 srcset + sizes 实现真正按布局宽度加载 典型场景:一张 banner 图,在移动端占满屏幕(100vw),桌面端固定为 800px 宽。你需要提供多个宽度版本,并让浏览器根据实际渲染宽度选最合适的那个。 使用HTML,CSS,JavaScript开发Android应用程序 英文文字pdf版附源文件 如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Andr​​oid友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Andr​​oid应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更 下载 正确写法示例:
说明: 每个
srcset
条目后必须跟
w
单位,表示该图片文件的**固有宽度**(不是显示宽度)
sizes
中的
800px
是 CSS 像素值,浏览器据此计算“当前环境下这张图大概渲染多宽”,再匹配
srcset
中最接近的
w
值 不要指望浏览器自动缩放图片——它只做选择,不处理渲染;确保你提供的
img-320.jpg
真的是 320 像素宽的原图 如果使用 CSS 设置了
max-width: 100%
,不影响
sizes
计算,因为
sizes
描述的是“预期宽度”,不是最终渲染结果 Chrome DevTools 里怎么验证 srcset 是否生效 光看页面表现不够,得确认浏览器到底请求了哪张图。打开 Chrome DevTools → Network 面板 → 刷新页面 → 找到对应图片资源,看它的
Request Headers
里的
Sec-Ch-Dpr
和
Sec-Ch-Viewport-Width
(需开启实验性功能),更重要的是直接看
Preview
或响应头里的实际文件名。 快速验证技巧: 临时把
sizes
改成
sizes="320px"
,刷新后应看到加载的是
img-320.jpg
;再改成
sizes="1200px"
,应加载
img-1200.jpg
用 Device Toolbar 切换不同分辨率设备,观察 Network 面板中请求的图片是否变化 注意:禁用缓存(勾选 Disable cache)否则可能复用旧请求 如果始终只加载
src
指定的图,检查是否拼错了
srcset
或
sizes
属性名(比如写成
srset
) 真正容易被忽略的是:即使写了完整的
srcset
+
sizes
,如果服务器返回了错误的
Content-Type
(比如把 JPG 当 text/plain),浏览器也会降级回
src
。所以验证时别只盯 HTML,也要看响应头。

相关文章