【发布时间】:2015-09-17 09:57:12
【问题描述】:
开始阅读之前:
显然该错误现已修复,我在 Chrome 52.0.2743.82 中不再遇到该错误,并且可能在早期版本中也是如此
原始问题
我正在为 chrome 创建一个扩展程序,并创建了一个上下文菜单,其中有几个选项:
从技术上讲,它工作得很好,问题是,菜单的每个条目都有一个分配给它的图标,用 css 设置样式。通常,图标在悬停之前是灰色的。这已经运行了很长时间,但从昨天开始它就坏了,我不知道我做了什么改变可能会导致这种情况。
现在的状态是,当我打开菜单(通过 jQuery 发生,它只是一个大部分时间隐藏的 div)时,所有图标都是不可见的,直到我将它们悬停。因此,如果我现在将鼠标移到“呼叫”上,它看起来像这样:
当我将其悬停时,该图标保持可见并且看起来像它应该的那样。所以基本上我可以在鼠标悬停一次时显示所有图标。
现在有三件事让我彻底傻了眼:
-
我敢肯定,持续变化意味着:
- 某事处于状态 a,
- 你悬停它,它进入状态 b 并停留在状态 b
- 或再次悬停时进入状态 c,
在 CSS 中是不可能的,但这正是这里发生的事情
-
当我打开 chrome 开发者工具并在 CSS 设置中更改任何内容时
每个图标都正确显示(当然不是在更改 CSS 属性的情况下,但当您重新打开它时它仍然可见)。更改哪个css属性完全无关紧要,无论何时更改,图像都会弹出。
上下文菜单是一个 div。它通过 jQuerys
slideUp和slideDown函数被隐藏和显示,因此它永远不会被重置,只是不时隐藏和显示。现在,当我将所有图标悬停以使它们可见时,关闭菜单(单击它之外的某个地方)并再次打开它,图标是不可见的。
现在我尝试了我的 CSS 文件中的 CSS 属性,我发现了以下内容。我的图标在没有悬停时是灰度的。在 CSS 中它看起来像这样
-webkit-filter: grayscale(100%);
filter: grayscale(100%);
filter: gray;
filter: url("data:image/svg+xml;utf8,<svg version='1.1' xmlns='http://www.w3.org/2000/svg' height='0'><filter id='greyscale'><feColorMatrix type='matrix' values='0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0' /></filter></svg>#greyscale");
现在,当我注释掉 -webkit-filter: grayscale(100%); 时,图标当然不会变灰,但它们会按应有的方式显示。
那么 f 是如何工作的呢?
【问题讨论】:
-
我在使用大量灰度图像和悬停效果的页面上也看到了这个问题。即使切换标签也会纠正它。这似乎是某种 Chrome 渲染错误。
-
听起来你可以在显示它之前切换一个影响布局的 css 道具以掩盖错误,直到它得到修复。这些年来,我不得不使用很多这样的技巧,尤其是使用 chrome。
-
嗨,Tom,尝试用 jQuery 实现这个效果。我不得不与很多谷歌浏览器的错误作斗争,尤其是 CSS,这就是为什么我真的不喜欢这个不完整的浏览器。
-
Kk,近期有什么解决办法吗?
-
我注意到 WebKit/Blink 过滤器的类似问题,这似乎是过度优化的结果。通常这些类型的错误会在供应商前缀被删除时修复。
标签: javascript html css google-chrome webkit