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