如何将多种 URL 类型添加到`background-image` CSS 属性?

Posted

技术标签:

【中文标题】如何将多种 URL 类型添加到`background-image` CSS 属性?【英文标题】:How to add multiple URL types to `background-image` CSS property? 【发布时间】:2022-01-20 14:26:32 【问题描述】:

我目前有以下 html 代码:

<header style="background-image:url(/images/header.webp)">

但是,在某些浏览器(主要是旧版本的 Safari)上,webp is not supported。所以我想指定一个后备 png 图片 URL。

使用picture 标签我可以执行以下操作:

<picture>
    <source type="image/webp" srcset="/images/header.webp">
    <source type="image/png" srcset="/images/header.png">
</picture>

如何使用background-image CSS 属性做同样的事情?

注意,我可以为此使用 CSS 样式表,我必须使用 HTML style 属性。这是由于我如何动态生成 HTML 内容。

【问题讨论】:

试试这个&lt;header style="background-image:url(/images/header.webp), url(/images/header-2.webp)"&gt; @Ashish 我没有 2 张 webp 图片。我有 1 个 png 和 1 个 webp。基于w3schools.com/Css/css3_backgrounds.asp,该代码看起来适用于多种背景。这不是我要找的。我正在寻找 webp 背景图片,如果浏览器不支持 webp,则回退到 png。 【参考方案1】:

您可以调用多个背景。如果浏览器找不到第一个 URL,第二个 URL 将作为备用。

<header style="background-image:url('/images/header.webp'), url('/images/header.png')">

注意:我不确定浏览器是否会选择尝试使用 .webp,即使它不受支持。您应该对此进行测试以确认。

【讨论】:

【参考方案2】:

CSS Tricks 建议在支持的浏览器中使用像 Modernizr 这样的特征检测库向 HTML 根目录添加一个类(如 html.webp),这样您就可以编写将 JPG 或 PNG 图像交换为 WEBP 图像的 CSS:

.elementWithBackgroundImage 
  background-image: url("image.png");


.webp .elementWithBackgroundImage 
  background-image: url("image.webp");

【讨论】:

这很有帮助。但我不确定它是否会起作用,因为我不能使用 CSS 样式表并且必须使用 style 属性(由于我如何动态生成 HTML 内容)。 @CharlieFish 你是如何动态生成 HTML 的?如果您使用 JS 在浏览器中执行此操作,则可以使用特征检测来内联包含正确的图像格式。如果您正在生成 DOM 服务器端,则可以使用相关代码向 DOM 输出 &lt;style&gt; 属性。

以上是关于如何将多种 URL 类型添加到`background-image` CSS 属性?的主要内容,如果未能解决你的问题,请参考以下文章

如何将多种类型的用户重定向到各自的活动?

如何将多种类型的用户重定向到各自的活动?

如何将图像从 url 沿侧输入类型文件加载到 html5 画布?

全尺寸背景图像到 SVG 路径

graphql 无法将 100 多种产品添加到我的 Wordpress Woocommerce 商店

如何使用具有多种消息类型的破坏者