我正在建立一个网站,我想对图像使用WebP
格式。我知道的不是not all browsers support it,所以如果不支持JPG
,我想显示一个备用的WebP
图像。我有一个div
应用于该类:
.my-class{
background: linear-gradient(to right bottom, rgba(89, 167, 255, 0.5), rgba(0, 31, 62, 0.7)), url('../assets/images/image.webp');
}
如果要在不支持image.jpg
的浏览器上使用网站,我想向此类添加一些内容,以显示备用WebP
。 如何使用纯CSS实现此目标?
答案 0 :(得分:2)
您可以使用HTML picture
元素来定义图像的来源,如下所示:
<picture>
<source srcset="image.webp" type="image/webp">
<source srcset="image.jpg" type="image/jpeg">
<img src="image.jpg">
</picture>
在这种情况下,如果浏览器支持webp
图像,则该图像将照此使用,否则将使用经典的jpg
版本。您显然需要同时存在两个版本。
如果您要使用纯CSS解决方案,则需要为每个支持或不支持media
(取决于方法)的单独浏览器使用功能检测(webp
)并更改图像相应地。我建议选择一种。
答案 1 :(得分:2)
您想要的东西有很好的指南 在CSS技巧上获得:
https://css-tricks.com/using-webp-images/
纯CSS不是解决此问题的最佳方法, 您必须检测客户端是否支持webp 而CSS不会这样做。
因此,您需要以Modenizr为例来检测 客户端是否支持webp。
https://modernizr.com/download?setclasses
选择所需的内容(webp)后,您将获得 一个小的js文件。 将其添加到您的页面,例如:
<!DOCTYPE HTML>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
<script src="js/modernizr-custom.js"></script>
</head>
现在基本上,您将像这样创建课程:
.no-webp .elementWithBackgroundImage {
background-image: url("image.jpg");
}
.webp .elementWithBackgroundImage{
background-image: url("image.webp");
}
对于已经停用js的客户端,甚至还有一个解决方案 这需要一个内联脚本,也可以在CSS Tricks文章中找到。
您的课程如下所示:
.no-webp-my-class .elementWithBackgroundImage{
background: linear-gradient(to right bottom, rgba(89, 167, 255, 0.5), rgba(0, 31, 62, 0.7)), url('../assets/images/image.jpg');
}
.my-class .elementWithBackgroundImage{
background: linear-gradient(to right bottom, rgba(89, 167, 255, 0.5), rgba(0, 31, 62, 0.7)), url('../assets/images/image.webp');
}
修改
还有另一种方法,但是需要一些工作和php。 基本上,这不过是浏览器切换而已, 您的样式表。
为了使事情变得容易,请创建一个名为stylesheet.php的文件 并声明标题:
<?php
header("Content-type: text/css;charset=UTF-8");
要保存一些工作,此解决方案将读取现有的.css文件 并发出回声:
<?php
header("Content-type: text/css;charset=UTF-8");
$file_read = fopen("stylesheet.css","r+");
while(! feof($file_read)) {
$css= fgets($file_read);
echo "$css";
}
现在所有使用webp图像的类都可以通过检查来切换 如果浏览器具备webp功能。
if( strpos( $_SERVER['HTTP_ACCEPT'], 'image/webp' ) !== false ) {
// webp is supported!
}
else {
// webp is not supported!
}
这会导致什么:
<?php
header("Content-type: text/css;charset=UTF-8");
$file_read = fopen("stylesheet.css","r+");
while(! feof($file_read)) {
$css= fgets($file_read);
echo "$css";
}
if( strpos( $_SERVER['HTTP_ACCEPT'], 'image/webp' ) !== false ) {
echo "
.my-class .elementWithBackgroundImage{
background: linear-gradient(to right bottom, rgba(89, 167, 255, 0.5), rgba(0, 31, 62, 0.7)), url('../assets/images/image.webp');
}";
}
else {
echo "
.my-class {
background: linear-gradient(to right bottom, rgba(89, 167, 255, 0.5), rgba(0, 31, 62, 0.7)), url('../assets/images/image.jpg');
}";
}
?>
修改
我忘记了一些东西: 您可以将.php文件添加为常规.css文件 到您的html:
<link rel="stylesheet" type="text/css" href="stylesheet.php" media="screen"/>