有趣的问题。如果您能够向我们展示一个工作示例,我们可能会提供更多帮助。
但是,从理论上讲,您尝试做的事情并没有错(尽管并非所有浏览器都会喜欢它:尤其是 IE8 及更低版本)。
这里要理解的重要一点是,它:hover
是一个伪类,而:before
是一个伪元素。
这是标准的快速摘录(感谢之前在 Stack Overflow 上的这个答案):
选择器中的任何位置都允许使用伪类,而伪元素只能附加在选择器的最后一个简单选择器之后。
您犯的错误在于您的语法:您附加它们的顺序。
试试这个:
#sidebar .widget li a:hover:before,
#sidebar .widget li a.active:before {
background-position: 65% 65.7%;
}
那应该如你所愿。然而,这不会给你带来很好的跨浏览器覆盖,并不是所有浏览器都支持的东西都实现了。
更好的方法是:
- 将元素重置
:before
为空(覆盖您无法访问的样式);
- 在锚点上使用非重复的背景图像(以显示图像),并使用 padding-left 来提供缩进;
:hover
然后,您可以在 CSS 中的锚点上以您认为合适的任何方式切换背景图像。
这将为您提供更好的跨浏览器兼容性。