在我的网站上,我已经将所有的图片都添加为webp格式。所有这些图片在Chrome和Firefox浏览器中都能正常显示,但是它们在Safari浏览器中无法正确显示。
截至今天,Safari浏览器不支持webp
格式,我不确定是否计划在不久的将来实现。但是您可以通过以下方式让浏览器选择是否使用webp
或jpg
。
<picture>
<source srcset="
/uploads/img_small.webp 1x,
/uploads/img_big.webp 2x" type="image/webp">
<source srcset="
/uploads/img_small.jpg 1x,
/uploads/img_big.jpg 2x" type="image/jpeg">
<img src="/uploads/img_small.jpg">
</picture>
浏览器足够智能,可以仅下载并使用最佳支持的图像。
img
HTML 标签的绝佳方案,但如果图片以 CSS 的 background-image
形式出现,该怎么办呢?此外,我不太喜欢复制每个图像的想法。希望有其他方法。 - A. RichardsWebP 官方支持已经在 macOS Big Sur 上的 Safari 14,以及 iOS、iPadOS 和相关设备上添加。
更新:
我没有评论的声誉,但我想提供一个(可能反复无常的)CSS背景解决方案,除了<picture>
选项以外。
截至目前,Safari(两个版本)是唯一不支持WEBP的主流浏览器,但是它似乎也是唯一不需要前缀就支持image-set
的浏览器。
因此,如果我们使用三个代码块来允许所有浏览器的完整回退,则看起来会像这样:
background-image: url("exampleimage.webp"); /* Firefox - UPDATE: no longer needed in FF 88+! */
background-image: -webkit-image-set(
url("exampleimage.webp") 1x,
url("exampleimage@1-5x.webp") 1.5x,
url("exampleimage@2x.webp") 2x
);
background-image: image-set(
url("exampleimage.jpg") 1x,
url("exampleimage@1-5x.jpg") 1.5x,
url("exampleimage@2x.jpg") 2x
) /* Safari */
如果浏览器支持,可以按照此处的建议提供WebP
格式,否则使用jpg
或png
。以下是要点:
对于HTML,请使用<picture>
HTML5标签:
<picture>
<source srcset="img/my_image.webp" type="image/webp">
<source srcset="img/my_image.jpg" type="image/jpeg">
<img class="img-fluid" src="img/my_image.jpg" alt="Alt Text!">
</picture>
对于CSS:
添加一个modernizr.js脚本来检测浏览器是否支持WebP格式。你可以自定义该脚本仅查找WebP支持,以最小化开销:
<script src="modernizr.min.js"></script>
这将向<html>
元素添加webp
或no-webp
类,具体取决于浏览器是否支持WebP:
<html lang="en" class="webp">
或
<html lang="en" class="no-webp">
使用上述类加载适当的图像:
.no-webp .elementWithBackgroundImage {
background-image: url("image.jpg");
}
.webp .elementWithBackgroundImage{
background-image: url("image.webp");
}
为了避免浏览器禁用JavaScript并且无法运行您的modernizr.min.js
脚本,需要在<html>
标签上添加一个no-js
类:
<html class="no-js">
在任何其他脚本之前添加以下内容:
<script>
document.documentElement.classList.remove("no-js");
</script>
<html>
元素中删除no-js
类。否则,它将永远不会被解析,并且no-js
类将保持不变。因此,请使用此类提供默认图像:.no-js .elementWithBackgroundImage {
background-image: url("image.jpg");
}
WebP图像格式的支持在Safari 14中可用,而在旧版Safari中不支持webp图像。您不能仅更改webp文件以使其在不支持它的不兼容Safari版本上工作。这是行不通的。
因此,对于旧版Safari,您唯一的解决方案是保留每个图像的PNG或JPG格式副本,或使用image CDN自动执行此操作。图像CDN将图像文件(JPEG或PNG)即时转换为WebP图像格式(如果浏览器支持)。否则,它会以JPEG或PNG格式提供图像,以确保一切正常运行,没有任何故障。