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