这取决于你实际上想做什么。
如果你只是想在a元素匹配一个伪类时,在伪元素之前应用样式,你需要改写:hover:before或a:visited:before。注意,伪元素在伪类之后(事实上,在整个选择器的最后)。还要注意,它们是两个不同的东西;调用它们两个“伪选择器”将会困惑你一旦你遇到语法问题,如这一个。
如果你正在编写CSS3,你可以用双冒号表示一个伪元素,使这个区别更清楚。因此,a:hover :: before和a:visited :: before。但是如果你正在开发的旧版浏览器,如IE8和更旧的,那么你可以逃脱使用单冒号很好。
伪类和伪元素的这种特定顺序在spec:
One pseudo-element may be appended to the last sequence of simple selectors in a selector.
A sequence of simple selectors is a chain of simple selectors that are not separated by a combinator. It always begins with a type selector or a universal selector. No other type selector or universal selector is allowed in the sequence.
A simple selector is either a type selector, universal selector, attribute selector, class selector, ID selector, or pseudo-class.
伪类是一个简单的选择器。然而,伪元素不是,即使它类似于简单的选择器。
然而,对于用户操作伪类,例如:hover1,如果你需要这个效果,只有当用户与伪元素本身交互,而不是a元素,则这是不可能的,除了通过一些晦涩的布局 – 相关解决方法。如文本所暗示的,标准CSS伪元素当前不能具有伪类。在这种情况下,您需要应用:hover到实际的子元素而不是伪元素。
1当然,这不适用于链路伪类,例如:在问题中访问,因为伪元素不是链接。