2020-07-27 12:03:37
HTML5的picture元素和srcset属性均用于解决响应式图片问题,但设计目标和应用场景存在显著差异:
核心区别srcset属性
用途:为同一张图片提供不同分辨率或尺寸的版本,由浏览器根据设备像素密度(DPR)和视口宽度自动选择最合适的版本。
实现方式:通过w描述符(如image-small.jpg 480w)定义图片固有宽度,结合sizes属性(如sizes="(max-width: 600px) 480px")指定不同视口下的显示尺寸。
优势:自动化程度高,节省带宽,提升加载速度,适用于优化清晰度和加载性能。
示例:
<img srcset="image-small.jpg 480w, image-medium.jpg 800w, image-large.jpg 1200w" sizes="(max-width: 600px) 480px, (max-width: 900px) 800px, 1200px" src="image-fallback.jpg" alt="A beautiful landscape">picture元素
用途:为不同场景提供完全不同的图片内容(如艺术方向调整、格式降级或特定设备适配)。
实现方式:通过多个<source>元素结合media查询(如media="(min-width: 1200px)")和type属性(如type="image/webp"),定义不同条件下的图片源,最终回退到<img>标签。
优势:精细化控制图片内容,支持复杂响应式需求(如裁剪、格式兼容性、主题适配)。
示例:
<picture> <source srcset="image-hero-large.webp" media="(min-width: 1200px)" type="image/webp"> <source srcset="image-hero-medium.webp" media="(min-width: 768px)" type="image/webp"> <img src="image-hero-small.jpg" alt="A responsive hero image"></picture>
优先使用srcset的场景
分辨率切换:同一张图片需适配不同屏幕清晰度(如产品图在桌面端和移动端的显示)。
带宽优化:移动设备需加载更小文件以节省流量。
简洁高效:无需复杂逻辑,浏览器自动选择最佳版本,适合文章插图、图标等无艺术方向需求的图片。
优先使用picture的场景
艺术方向(Art Direction):不同视口需展示不同构图或裁剪的图片(如英雄图在桌面端显示全景,移动端突出主体)。
格式降级:提供新一代格式(如WebP/AVIF)作为优先选项,回退到JPEG/PNG以确保兼容性。
主题适配:为亮色/暗色模式提供不同风格的图片(需SEO优化时更语义化)。

根据当前视口和sizes计算图片的“预计显示宽度”(如视口700px时,50vw对应350px)。
结合设备DPR(如Retina屏需2倍分辨率),从srcset中选择最接近且清晰的图片(如700px宽的图片)。
示例流程:
