带有`:hover`和多个相邻兄弟选择器的Webkit bug

boo*_*sey 14 css safari webkit google-chrome css-selectors

Safari和Chrome以及Opera和Firefox可以处理:hover伪类和邻近兄弟选择器:

a:hover + div {}

这有效.

但是,当添加另一个相邻兄弟时:

div:hover + a + div {}

Webkit崩溃了.

但是,如果你第一次将鼠标悬停在<a>随后的悬停<div>样式应用,因为它应该.

我更加困惑,因为如果你添加:

div:hover ~ div {}

无论是否声明了样式,它都会按照应有的方式开始工作.

演示

我看到这个问题:

  • 谷歌浏览器15.0.874.121
  • Safari 5.1.1

对于OS X.

有任何想法吗?

alb*_*ert 28

您可以通过伪造body元素上的动画来克服Webkit的伪类+一般/相邻兄弟选择器错误:

body { -webkit-animation: bugfix infinite 1s; }

@-webkit-keyframes bugfix { 
  from { padding: 0; } 
  to { padding: 0; } 
}
Run Code Online (Sandbox Code Playgroud)

你可以在这里查看:http://jsfiddle.net/jalbertbowdenii/ds2yY/1/

  • 问题中没有出现错误,所以我真的知道你对我有多想要.或者你的期望.如果您有疑问,请将其发布给所有人.挑选一个符合您需求的公认解决方案并不是SO的目的 (3认同)

Sco*_*ttS 13

无需动画即可轻松修复

在这里处理了一个类似的问题,这个改变了伪类的想法解决了它(注意:nth-child(n)将始终匹配):

div:hover + a:nth-child(n) + div
Run Code Online (Sandbox Code Playgroud)


tif*_*fon 12

或者,修复程序只能应用于具有更新问题的元素而不是body元素:

http://jsfiddle.net/ds2yY/12/

.force-repaint { -webkit-animation: bugfix infinite 1s; }

@-webkit-keyframes bugfix {
    from { fill: 0; }
    to { fill: 0; }
}
Run Code Online (Sandbox Code Playgroud)