CSS 过滤器在不同顺序的 Safari 上非常慢,有人可以解释一下吗?

标签 css safari css-filters

似乎 filter: none; 的位置/顺序对 Safari(速度)产生了巨大的影响。有人可以对发生的事情提供可靠的解释吗?

仅在 Safari 中检查以下两个示例


示例 1:(使用 filter: none; 在 CSS 规则的末尾,它在 Safari 上非常慢)

Example 1 (Slow on safari)

section#pitches>div>div:hover {
  opacity: 0.6;
  filter: grayscale(0%);
  -webkit-filter: grayscale(0%);
  filter: none; /* IE 6-9 */
}

示例 2:(将 filter: none; 移动到其他浏览器特定过滤器之上,使其更快)

Example 2 (Much faster)

section#pitches>div>div:hover {
  opacity: 0.6;
  filter: grayscale(0%);
  filter: none; /* IE 6-9 */
  -webkit-filter: grayscale(0%);
}

我在网上搜索试图找到解释但没有成功?

我有我的猜测,但据我所知,如果看到 filter: none;?

,CSS 不会停止检查其他规则

最佳答案

您的主要问题是您实现 filter: none; 的方式(或者,您删除先前设置的灰度过滤器的方式)。你说得对:

as far as I know CSS does not STOP checking other rules if seen like filter: none;?

但这正是问题所在!似乎将过滤器设置为无比简单地将灰度更改回 0% 更耗费资源!

我在 Dudley Storey 所著的 Pro CSS3 Animation 一书中发现了一句话证实了这个假设:

“请注意,您无法顺利过渡到‘无’状态或未应用过滤器;必须为过滤器赋予新值”( Storey, 113 )

因此,在示例 1 中,Safari 正在读取 CSS,并且基本上只剩下删除所有过滤器而不是将灰度过滤器设置为 0 的劳动密集型壮举%。在示例 2 中,Safari 看到了 -webkit-filter: grayscale(0%); 最后,这意味着它是它执行的 CSS(并且执行起来更容易)。

虽然我认为这回答了问题,但我希望更多有经验的人分享他们的意见。我自己并不是很满意,因为有人告诉我惯例是将“通用”CSS 标签放在您自己的标签之前(将 -webkit-moz、之前其他 CSS),我在 Apple Safari 文档中找到的唯一信息是一个模糊的警告:

Filters are visual effects that can be applied to images and other HTML elements... These filters are resource-intensive. Use them sparingly and only when necessary. Be sure to test your content on a multitude of computers and devices to assert that rendering performance is not hampered, especially if animating. Source

最简单的(看起来也是最符合惯例的)是简单地完全删除 filter:none;,因为如果您要删除的唯一过滤器是灰度,那么它是多余的并且坦率地说是不必要的。

我希望它有所帮助,并且答案是连贯的。对我来说有点晚了,请原谅我的任何错误!

关于CSS 过滤器在不同顺序的 Safari 上非常慢,有人可以解释一下吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44662417/

相关文章:

html - 如何垂直对齐底部水平滚动的两个表

javascript - 如何使用 anchor 标记在单击按钮时弹出?

css - 有什么方法可以仅使用 CSS 为白色 PNG 图像着色?

css - 如何将 CSS 滤镜应用于背景图像

html - 菜单样式,CSS,HTML。避免顶部菜单溢出

javascript - HTML 缩放元素,其尺寸以百分比定义,就像以像素定义一样

google-chrome - 悬停2018 2019可以在Chrome/Safari中自动播放声音吗?

ios - openURL 不打开 Safari

safari - 从 Azure 存储下载,在文件名周围添加单引号

html - css body filter invert不适用于伪选择器