为什么我的AVIF图片在IE和旧版Edge显示不出来?

Top丶晶晶 阅读 54

折腾了半天把项目图片都转成AVIF格式了,结果客户反馈说公司电脑看不到图片。检查发现是IE11和Edge 79版本完全空白,换成其他格式又没问题,这是兼容性没处理好吗?

我按网上的教程直接改了标签的src路径:image.avif,还加了HTTP头Accept=image/avif。但测试发现低于Edge 80的版本直接不渲染,有没有什么兼容方案啊?

试过用picture标签做fallback:

<picture>
  <source srcset="image.avif" type="image/avif">
  <img src="image.jpg" alt="fallback">
</picture>

结果低版本Edge还是显示空白,难道还要加更多格式的source吗?

我来解答 赞 5 收藏
二维码
手机扫码查看
2 条解答
令狐春芳
标签确实是个好方案,但IE11根本不认识这个标签,所以懒人方案是用JS做兼容检测:如果浏览器不支持AVIF,就直接替换src为JPEG。

function supportsAvif() {
try {
return new Image().canDecode('avif');
} catch (e) {
return false;
}
}

document.querySelectorAll('img').forEach(img => {
if (!supportsAvif() && img.src.endsWith('.avif')) {
img.src = img.src.replace('.avif', '.jpg');
}
});


把这段代码丢到页面底部,能省事就别折腾多套格式了。
点赞 6
2026-02-02 10:05
司空淑宁
AVIF确实是新一代的图片格式,但它的兼容性确实是个头疼的问题。IE11和Edge 79以下版本是完全不支持AVIF的,这是硬伤。你用的<picture>标签方向是对的,不过还需要再优化一下。

通用的做法是多加几个<source>标签,覆盖更多的浏览器。比如这样:

<picture>
<source srcset="image.avif" type="image/avif">
<source srcset="image.webp" type="image/webp">
<img src="image.jpg" alt="fallback">
</picture>


这样写的好处是:现代浏览器会优先加载AVIF,稍微旧一点的可以用WebP,实在不行就退到JPG。基本能覆盖大部分场景了。

另外提醒一下,HTTP头里的Accept=image/avif对低版本浏览器没什么意义,因为它们根本不会发这个字段。所以重点还是放在HTML结构上。

如果客户那边全是老旧系统的话,可能得考虑把主要图片都转成WebP或者JPG了,毕竟兼容性才是王道。我们做前端的,天天都在和这些老顽固浏览器斗智斗勇,习惯了。
点赞 11
2026-02-01 08:09