Раньше и псевдоклассы и псевдоэлементы писались с одиночным :
Потом решили, что имеет смысл их всё таки различать.
Псевдоклассы - это селекторы, определяющие состояние обычных элементов, которое может меняться при определенных условиях. Например, input:checked
, т.е. выбранный сейчас input. Или :hover
, т.е. состояние элемента при наведении на него мыши.
Псевдоэлементы - селекторы, которые определяют область элементов, которая изначально отсутствует в дереве документа. Эта область создается искусственно с помощью CSS. Например, ::first-letter
- первая строка элемента. Там нет реального DOM элемента, но CSS искусственно его создает и применяет к нему указанные стили.
Браузеры поймут и тот и другой вариант для псевдоэлементов, но правильнее писать их с ::