WebKit 相邻/通用兄弟选择器错误

Avatar of Chris Coyier
Chris Coyier 发布

DigitalOcean 为您旅程的每个阶段提供云产品。 立即开始使用 200 美元的免费积分!

好消息,各位!此错误已在 WebKit 浏览器 Safari(5.1)和 Chrome(13)的稳定版本中修复。

在 WebKit 中发现可靠的错误并不常见,在我看来,WebKit 在 CSS 质量支持方面处于领先地位。Alexander Futekov 通过电子邮件让我知道这个错误,我个人从未遇到过。

问题在于将相邻 (+) 或通用 (~) 兄弟选择器与伪类结合使用。 如下所示:

h1 ~ p { color: black; }
h1:hover ~ p { color: red; }

没什么问题,对吧? 似乎很简单。但在 WebKit 中不起作用,没有任何反应。有很多奇怪的特性可能会影响它并看似修复部分问题。 例如

/* This affects both paragraphs */
h1 ~ p { font: 18px Helvetica, Arial, Sans-Serif; }

/* This works */
h1:hover + p { color: red; }

/* This only affects first
... and does nothing without previous rule */
h1:hover ~ p { color: blue; }

我没有测试每一个,但显然所有伪选择器(:focus、:hover、:checked、:enabled 等)都存在问题。

仅使用 CSS 修复!

Alexander 还提供了一个巧妙的仅使用 CSS 的修复方案。在 body 上使用一个不执行任何操作的动画。

/* Warning: while this works, it may cause high CPU load */
<code class="lang-css prettyprint">body { -webkit-animation: bugfix infinite 1s; }
@-webkit-keyframes bugfix { from { padding: 0; } to { padding: 0; } }

针对 WebKit 独有问题的 WebKit 独有修复。 **温馨提示:**读者 Adam Ferguson 和 Simon Goellner 都写信告诉我,此修复程序直接导致他们正在处理的网站出现严重的 CPU 占用。

François Germain 还在 一个测试页面 上提出了一个修复方案。

记录详尽

这当然不是第一个关于此问题的报告。以下是一些错误报告

以及其他提及此问题的出版物