如何使用webp图片并支持safari

2023-11-30

由于压缩效果更好,我尝试在整个网站中使用 webp 图像。不过我知道 safari 不支持 webp。图像是使用加载的background-image: url("img/img.webp)。然后我应用其他background特性。

我明白了<picture>标签可用于根据浏览器支持来显示不同的图像。就像这样。

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

然而,如果有一种方法可以使用 css 来实现这一点,这样我就不必为所有图像编写新的 html 和样式,那就方便多了。

例如这样的事情

#image-id {
    background-image: url("../img/img.webp", "../img/img.jpeg"); // show jpeg if webp not supported 
}

或者如果这是不可能的那么也许是这样的

@media only screen and (safari-specific-property:) {
    background-image: url("../img/img.jpeg"); // show jpeg for safari
}

在保持浏览器支持(最好使用 css)的同时使用 webp 图像的最佳解决方案是什么?


这里有有趣的探索。据我所知,您可以使用级联或@supports。

让我们看看使用级联时会发生什么:

.bg {
 /*fallback */
 background-image: url("https://www.gstatic.com/webp/gallery/2.jpg")
 background-image: url("https://www.gstatic.com/webp/gallery/1.webp");
}

它会工作得很好,但理解 JPG 和 WebP(占大多数)的浏览器将发出两个请求,这不是最佳的。

现在,让我们看看 @supports at 规则。

@supports not (background-image: url("https://www.gstatic.com/webp/gallery/1.webp")) {
    .bg {
        background-image: url("https://www.gstatic.com/webp/gallery/2.jpg")
    }
}
.bg {
    background-image: url("https://www.gstatic.com/webp/gallery/1.webp");
}

由于大多数浏览器都支持 WebP,我认为这个解决方案是理想的。

不支持WebP的浏览器将陷入获取JPG的at规则。然后他们将阅读下一个调用 WebP 的样式,并且由于他们不支持该功能,因此他们只会坚持使用 JPG。 我想知道您是否可以在 safari 浏览器中尝试一下。

感兴趣的链接:

https://css-tricks.com/how-supports-works/

https://hacks.mozilla.org/2016/08/using-feature-queries-in-css/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用webp图片并支持safari 的相关文章

  • 为什么连字符不能与内部 一起使用?

    我正在尝试让连字符处理具有以下内容的文本 span 里面的元素用于突出显示 这似乎打破了连字符算法 有什么方法可以修复这种行为 使连字符的放置方式与没有连字符的位置相同 span 元素 我不是在问像这样的解决方法 shy 代码 沙箱 htt
  • 将移动设备重定向到我网站的备用版本

    我们已经为移动设备准备了网站的替代版本 我们提供的内容不同 而且效果很好 检测要提供哪个版本的最佳方法是什么 我们没有所有移动设备的列表 因此使用用户代理标头很棘手 因为我们可能会错过一些东西 我们考虑过使用设备屏幕宽度 但如果移动设备不支
  • Safari 6 (iOS 6) 弹性布局不会换行元素

    我需要将两个框放在列中 这在我测试过的其他浏览器中有效 但在 iOS 6 上的 Safari 6 中无效 例子 http jsfiddle net 5FESj 1 http jsfiddle net 5FESj 1 display webk
  • 图像之间的垂直间距

    我将一张图像剪切为三张相同的图像 现在我将其放入 html 代码中 如下所示 img src images disclosure2 01 jpg alt Disclosure img src images disclosure2 02 gi
  • Vue js按钮冻结dom

    我试图在按下按钮时切换包含加载动画的跨度 直到使用 v if 函数完成 但是当我按下按钮时 DOM 冻结并且 span 元素保持不变 直到函数调用结束 如何让 DOM 不冻结并显示加载图标 非阻塞按钮按下可能是一个解决方案 HTML
  • 清理 CSS 抖动

    我已经构建了这些圆圈 当鼠标悬停时它们会扩展边框 我现在遇到的唯一问题是有时圆圈会抖动 摇晃 当我设置transition all 1s ease in out 超过 0 2 秒 有解决这个问题的方法吗 还是事情就是这样 这是其中的代码Js
  • 如何在Python + Selenium中获取元素的值

    我在我的 Python 3 6 3 代码中得到了这个 HTML 元素 作为 Selenium网页元素当然 span class ocenaCzastkowa masterTooltip style color 000000 alt 5 sp
  • 是否可以使用纯 css 禁用 mat-tab 动画

    我想禁用 Angular Material mat tab 动画 内容滑入到位时发生的动画 我知道可以使用 disabled 属性 但我想知道是否可以使用纯 css 达到相同的效果 EDIT 我们的用户体验团队希望从材质选项卡中删除幻灯片动
  • 使用 Vim 作为 HTML 编辑器

    您知道 Notepad 如何具有此功能 当您单击标签 例如 时 它也会自动突出显示结束标签 它叫什么 如何调整 Vim 使其也具有此功能 还有其他方法可以将 Vim 变成强大且高效的 HTML 编辑器吗 我在 vim 中完成所有 HTML
  • HTML 文件上传“未选择文件”文本样式

    我正在构建一个需要文件上传的 html 表单 当我让文件上传部分正常工作时 我无法获得表单上传按钮和 未选择文件 文本的样式 我想要的标记是 有办法做到吗 PS 请忽略绿色文本 上传屏幕截图 我有那个工作 当前行为按钮和 未选择文件 位于同
  • 如何使页面上的所有内容变大?

    如果我在浏览器中打开我的网站并按Ctrl 有几次 一切都变得更大 网站对我来说看起来更好 我可以通过在 HTML 代码中添加一些内容来实现相同的效果吗 以便用户默认看到更大的所有内容 而无需按Ctrl 我想让所有东西都变大 文本和图像 如果
  • contenteditable 在 safari 中不起作用,但在 chrome 中起作用

    我有一个奇怪的问题 这在 chrome 中按预期工作 但在 safari 中它只会发光 但不会对按键输入做出反应 这是触发文本版本的方法 var namebloc event currentTarget find column filena
  • CSS - 在 id 中选择类的语法

    通过类名选择 id 中的标签的选择器语法是什么 例如 我需要在下面选择什么才能使内部的 li 变成红色 ul li Level 1 item ul class navigat ul li ul
  • 通过电子邮件发送在 HTML5 画布上创建的图像

    我有一个画布 用户可以通过交互来更改设计 现在 用户完成更改后 可以提交他的设计及其电子邮件 ID 但为了提交设计 我使用以下方法将画布转换为图像http www nihilogic dk labs canvas2image http ww
  • 用于选择 querySelector 中当前元素的 CSS 伪选择器可用于同级 (+) 或一般同级 (~) 选择器? [复制]

    这个问题在这里已经有答案了 如果我有这个 HTML div class elem div class child div div div class sibling div 和JS let elem document querySelect
  • jQuery 面板滑块通过单击按钮打开但不会关闭

    我的页面上有一个按钮 可以使用 jquery 和 Modernizr 框架打开右侧面板 按钮位于屏幕最右侧 单击时 它会向左滑动并打开打开的面板 问题是 再次单击时它不会滑回到原来的位置 HTML div class cd panel fr
  • Django 管理通过 ImageField 链接到图像

    我已经设置了一个活动的 Django 模型 其中包含以下字段 class Activity models Model thumbnail models ImageField upload to thumbs blank True null
  • JQuery Mobile - 内联显示 HTML 表单

    Goal 在 Jquery Mobile 中的同一行显示文本框和提交按钮 Problem 它们不会显示在同一行 我曾多次尝试在同一行显示文本框和提交按钮 但它从未起作用 这是我的代码和我使用的组合
  • Javascript 替换为正则表达式无法正常工作

    我正在尝试使用正则表达式验证名称 正则表达式阻止用户连续输入 2 个空格或点 这是我的代码 function test input var regex A Za z 0 1 s 0 1 input value input value rep
  • ☺ 不在移动版本中呈现

    我如何获得特殊角色 笑脸在移动浏览器中正确呈现 li a href http goo gl GjxlI title target blank span style font size 20px span a li 它在大多数浏览器上显示为

随机推荐

  • 如何修复从 GEOS 转换为 s2 引起的球面几何误差

    我有同样的问题连接空间数据时如何解决球面几何故障 我以前可以使用的代码现在不能用于从 GEOS 到 s2 的转换 我不确定如何创建此错误的可重现示例 sf 包附带的示例数据集可以很好地使用此代码 因为我确信它们也已更新为可以与 s2 包一起
  • 带控件的表单级别的按键

    我想知道是否可以处理KeyPress表单级别的事件当有控制时以一种形式 当表单上没有控件时 我可以实现此目的 但是当我添加某些内容 例如按钮 时 表单会失去焦点 并且我无法将其返回 即使使用Me Focus 焦点仍位于按钮上 有办法做到吗
  • 成功更改 JS 中的不可变或原始数据类型。那么这些是原语还是 JS 概念是错误的?

    据我所知 JS 中有 4 个原语 直接存储值 而不是引用另一个内存位置的原语 String Number Boolean Symbol 我没有数undefined null 因为它们是特殊的数据类型 并且不通过继承链共享对象构造函数 现在
  • 清除 ASP.NET 中的文本框历史记录

    如何清除文本框的历史记录 我已设置 autocomplet off 并将 AutoCompleteType 设置为禁用 当我在 Chrome Firefox 中双击文本框时 会出现历史记录 文本 因此当我单击它时 文本将被插入到文本框中 有
  • 何时使用 OpenCL API 标量数据类型?

    我一直无法理解何时使用 OpenCL API 数据类型 如 cl float cl uchar 等 可以在此处找到 http www khronos org registry cl sdk 1 0 docs man xhtml scalar
  • Java:如何使用 switch 语句[重复]

    这个问题在这里已经有答案了 可能的重复 如何在 Java 中比较字符串 我无法理解如何使用 Java switch 语句 在执行其中一个 case 语句中的方法后 它仍然会转到默认语句并运行该语句 这是代码 Scanner scanner
  • Sympy:求解具有初始条件误差的微分方程

    SinceSympy版本 1 2 PythonSympy已经实现了在给定一些初始条件的情况下求解简单微分方程中的常数的能力 我试图测试此功能 但不断出现我不知道如何解决的错误 The 文档表示初始条件的格式如下 我尝试遵循实现该功能的实际拉
  • Java 和 SSH:维护连接

    目标 通过一个连接和多个会话或一个持久会话远程控制 ssh 服务器 问题 1 我目前使用 sshj 通过 SSH 进行一些远程控制 它运行良好 但我似乎无法让它正确处理提示 主机不提供真正的root权限 只提供sudo i 所以我需要先登录
  • 在android上模糊图像

    我想要模糊图像 我用过 public Bitmap mohu Bitmap bmpOriginal int hRadius int vRadius int width height r g b c a gry c1 a1 r1 g1 b1
  • 如何在 -(void)touchesMoved 期间仅调用一次方法?

    我在用 void touchesMoved每当我做某事enter特定的框架 在本例中是按钮的区域 我的问题是 我只希望它在我进入框架时做一些事情 not当我在框架内移动手指时 有谁知道我如何在框架内时仅调用一次方法 并且如果我在同一个 to
  • Delphi 使用可变参数列表调用 JNI 方法

    使用 Embarcadero 的 Jni api 单元 如何向需要它的 JNI 方法提供变量参数列表 例如 JNINativeInterface 的 CallStaticObjectMethodV 方法 清单 1 有一个 va list 类
  • 通过修改插件调用JEdtiable提交按钮

    解决方案 1 不使用 TinyMCE 如果您没有将 TinyMCE 与 JEditable 一起使用 请查看下面 Arman P 的帖子 解决方案 2 使用 TinyMCE 如果您使用 TinyMCE 那么不幸的是 Arman P s 方法
  • 获取自定义适配器中的项目列表

    那么 我有一个扩展 ArrayAdapter 的自定义适配器 我想从适配器内获取整个列表 可以这样做吗 我知道在 ArrayAdapter 构造函数中 您传入对象列表并将其存储为 mObjects 但该列表是私有的 我想在构造函数中的自定义
  • Python 2.7 中具有多个函数参数的多重处理

    我正在尝试实现多处理来加速复制循环 但无法让它在 Python27 中工作 这是我的程序的一个非常简化的版本 基于 SO 的文档和其他答案 例如用于多个参数的 Python multiprocessing pool map 我意识到关于多处
  • 使用 JQuery 获取图像的真实尺寸

    给定图像路径列表 如何迭代它们并找到实际的图像尺寸 我假设我必须将它们插入没有宽度或高度属性的 DOM 中 并对它们执行 width 和 height var paths path image png somewhere page jpg
  • 内存映射文件 java NIO

    我了解如何创建内存映射文件 但我的问题是在下面一行中说 FileChannel roChannel new RandomAccessFile file r getChannel ByteBuffer roBuf roChannel map
  • include_next 预处理器指令导致 MSVC 中出现问题

    我知道 inlcude next 恰好是 C 预处理器的 GNU 扩展 我在使用 MSVC 编译 Gnu 库代码时遇到问题 例如 有一个 stdio h 头文件或者更确切地说GNU like
  • Java / NetBeans - 如何进入 jar 文件?

    我在 Netbeans 中有一个 Java 项目 其属性的库部分列出了几个 jar 文件 我在其中一个 jar 文件中发现了一个错误 我想在调试时介入它 这是我到目前为止所做的 我已经找到了源代码 jar 文件 我将该源代码作为一个项目打开
  • 本地运行SAM时如何连接RDS实例?

    我正在使用 SAM 无服务器应用程序模型 在本地测试连接到云中的 Aurora RDS 实例的 Lambda 函数 使用以下命令 sam local invoke lambda function name event event json
  • 如何使用webp图片并支持safari

    由于压缩效果更好 我尝试在整个网站中使用 webp 图像 不过我知道 safari 不支持 webp 图像是使用加载的background image url img img webp 然后我应用其他background特性 我明白了