Анимация псевдоэлементов
Можно ли применить CSS-анимацию к ::before и ::after? Да! Они работают так же, как и обычные элементы.
При этом анимация свойства content немного интереснее. В браузерах, отличных от Safari, оно может быть анимировано дискретно, то есть content будет переходить от одного значения к другому без какого-либо плавного перехода.
div::before { content: ''; animation: flip 6s linear infinite; } @keyframes flip { from { content: 'Hello!'; } to { content: 'Goodbye!'; } }
Если хотите анимировать счётчик чисел в content, есть один трюк, но он работает только в Safari, Chrome, Edge и Opera (именно эти браузеры в настоящее время поддерживают Properties and Values API, на который опирается этот трюк).
Вот как это работает.
- Объявите пользовательское свойство, которое является целым числом.
- Установите счётчик, который будет принимать значение этого целого числа через counter-reset.
- Отобразите этот счётчик через свойство content псевдоэлемента.
- Анимируйте значение целого числа.
@property --num { syntax: '<integer>'; inherits: true; initial-value: 0; } div::before { counter-reset: my-counter var(--num); content: counter(my-counter); animation: count 10s ease-in-out infinite alternate; } @keyframes count { to { --num: 100; } }
Если хотите глубже познакомиться с этой техникой, то ознакомьтесь с этим руководством, в котором она рассматривается немного подробнее.
Псевдоэлементы и псевдоклассы
Кроме ::before и ::after существуют и другие псевдоэлементы, которые применяются для стилизации фрагментов имеющихся элементов. Ранее мы говорили о ::marker для стилизации маркеров пунктов списка. Другой пример — ::selection, который используется для стилизации выделенного текста.
Существуют также псевдоклассы, которые отличаются от псевдоэлементов. Псевдоклассы применяют стили, зависящие от состояния. Например, в предыдущем примере мы использовали :checked, чтобы применить стиль только в том случае, если флажок был отмечен.
Перед псевдоэлементами пишется двойное двоеточие (::), в то время как перед псевдоклассами пишется одинарное двоеточие (:). В старых версиях спецификации W3C для псевдоэлементов использовались одинарные двоеточия, поэтому иногда можно встретить :before и :after. Они по-прежнему работают, но вместо них рекомендуется использовать ::before и ::after.