Это зависит от того, что вы на самом деле пытаетесь сделать.
Если вы просто хотите применить стили к псевдоэлементу :before
, когда элемент a
соответствует псевдоклассу, вам нужновместо этого написать a:hover:before
или a:visited:before
.Обратите внимание, что псевдоэлемент идет после псевдокласса (и фактически, в самом конце всего селектора).Обратите также внимание, что это две разные вещи;называя их обоими «псевдоселекторами», вы столкнетесь с проблемой, когда столкнетесь с такими проблемами синтаксиса, как эта.
Если вы пишете CSS3, вы можете обозначить псевдоэлемент двойными двоеточиями, чтобы сделать этоРазличие яснее.Следовательно, a:hover::before
и a:visited::before
.Но если вы разрабатываете для унаследованных браузеров, таких как IE8 и более ранние, то вы можете просто обойтись без использования одиночных двоеточий.
Этот специфический порядок псевдоклассов и псевдоэлементов указан в spec :
Один псевдоэлемент может быть добавлен к последней последовательности простых селекторов в селекторе.
A последовательность простых селекторов является цепочкой простых селекторов, которые не разделены комбинаторомОн всегда начинается с селектора типа или универсального селектора.Никакой другой селектор типа или универсальный селектор не допускается в последовательности.
A простой селектор является либо селектором типа, универсальным селектором, селектором атрибута, селектором класса, селектором идентификатора или псевдоклассом,
Псевдокласс - это простой селектор.Псевдоэлемент, однако, не является таковым, хотя он и напоминает простой селектор.
Однако для псевдоклассов действий пользователя, таких как :hover
1 , если вам нужно этоэффект, применяемый только к * , когда пользователь взаимодействует с самим псевдоэлементом, но не с элементом a
, тогда это невозможно, за исключением неясного обходного решения, зависящего от макета.Как следует из текста, стандартные псевдоэлементы CSS в настоящее время не могут иметь псевдоклассы.В этом случае вам нужно применить :hover
к фактическому дочернему элементу вместо псевдоэлемента.
1 Конечно, это не относитсясвязать псевдоклассы, такие как :visited
, как в вопросе, поскольку псевдоэлементы не являются ссылками.