picture 元素在 React 中怎么正确写才能适配多端分辨率?
最近在做响应式图片优化,想用 HTML5 的 <picture> 元素配合 srcset 来加载不同分辨率的图片。但在 React 里写的时候总感觉不对劲,浏览器有时候还是加载了大图,特别是在移动端。
我按照 MDN 的例子写了下面这段代码,但不确定是不是写法有问题,或者是不是还需要额外配置什么?比如是不是要加 type 属性,或者 media 查询写得不对?
return (
<picture>
<source media="(max-width: 768px)" srcSet="/img/small.jpg" />
<source media="(min-width: 769px)" srcSet="/img/large.jpg" />
<img src="/img/large.jpg" alt="示例图" loading="lazy" />
</picture>
);
另外,我还试过加上 type="image/webp",但发现如果没提供 fallback,Safari 会直接不显示图片……这到底该怎么写才稳妥?
这是改进后的写法:
注意几点:
1. 给每个 source 加上 1x 和 2x 的分辨率选项
2. 把 WebP 放在前面,给 Safari 等不支持的浏览器留个 JPG 的 fallback
3. img 标签必须要有 width 和 height 属性,这有助于避免布局抖动
最后提醒下,服务器端最好配置好合适的缓存策略,不然用户可能总是要下载完整的大图,影响性能和流量消耗。