
CSS Псевдоклассы и псевдоэлементы: полное руководство
ДБ
Дмитрий Борисенко
CSS псевдоклассы и псевдоэлементы — это мощные селекторы, позволяющие стилизовать элементы в зависимости от их состояния или создавать виртуальные элементы. Понимание этих селекторов открывает возможности для продвинутой стилизации без дополнительного HTML или JavaScript.
Разница между псевдоклассами и псевдоэлементами
Псевдоклассы (:)
Нацеливаются на элементы в зависимости от их состояния или позиции:
Псевдоэлементы (::)
Создают или нацеливаются на виртуальные элементы:
Важно: Псевдоклассы используют одно двоеточие :, псевдоэлементы — два ::
Основные псевдоклассы
1. Интерактивные состояния
Интерактивные состояния кнопки
Loading...
:focus или :focus-visible
Самая частая ошибка в CSS-доступности выглядит так:
Обводку убирают, потому что она «портит дизайн» при клике мышью. Но вместе с мышью её теряет и человек, который ходит по сайту с клавиатуры, — он просто перестаёт видеть, где находится.
Для этого и появился :focus-visible. Браузер сам решает, показывать ли кольцо
фокуса: при клике мышью — нет, при переходе по Tab — да. Вам не нужно ничего
отслеживать.
Если обводка по умолчанию не нравится — замените её, а не удаляйте. И не
заменяйте на box-shadow в одиночку: в режиме высокой контрастности Windows
тени не рисуются, а outline рисуется.
2. Структурные псевдоклассы
Структурные селекторы nth-child
Loading...
Полезные паттерны nth-child:
3. Псевдоклассы форм
Валидация и состояния форм
Loading...
4. Продвинутые селекторы
:has() — Родительский селектор
:has() — тот самый «родительский селектор», которого ждали двадцать лет. С
конца 2023 года он Baseline и работает во всех основных браузерах, так что это
уже не «продвинутая экзотика», а рабочий инструмент.
Стилизовать элемент по тому, что лежит внутри него, раньше можно было только из JavaScript. Теперь — одной строкой CSS.
Селектор :has() для родителей
Loading...
:target — Элемент по якорю
Навигация с :target
Loading...
Мощные псевдоэлементы
1. ::before и ::after
Псевдоэлементы ::before и ::after
Loading...
2. Кастомные счётчики
CSS счётчики с ::before
Loading...
3. ::first-letter и ::first-line
Типографика с ::first-letter
Loading...
4. ::selection — Стилизация выделения
Кастомное выделение текста
Loading...
Практические примеры
Кастомный чекбокс
Кастомный чекбокс без JavaScript
Loading...
Состояние загрузки (Skeleton)
Skeleton loader эффект
Loading...
Инструменты для работы с CSS
При работе с псевдоклассами и сложными селекторами полезно понимать специфичность CSS:
Специфичность CSS: калькулятор веса селектора
Вставьте селектор и узнайте его вес — станет понятно, какое правило победит в каскаде и почему стиль не применяется.
Попробовать
Для создания визуальных эффектов с градиентами в псевдоэлементах:
CSS градиент: генератор фона онлайн
Соберите CSS-градиент визуально — линейный, радиальный или конический — настройте цветовые точки и направление и скопируйте готовый код CSS и Tailwind.
Попробовать
Советы по производительности
- Псевдоэлементы создают реальные элементы — они влияют на render tree
- Сложные селекторы замедляют рендеринг — держите специфичность разумной
- Избегайте дорогих свойств — тени, фильтры в ::before/::after
- Используйте CSS containment — ограничьте область пересчёта стилей
Поддержка браузерами
Большинство псевдоклассов и псевдоэлементов имеют отличную поддержку:
| Селектор | Поддержка |
|---|---|
:hover, :focus, :active |
✅ Все браузеры |
:nth-child(), :first-child |
✅ Все браузеры |
::before, ::after |
✅ Все браузеры |
:is(), :where() |
✅ Современные браузеры |
:has() |
⚠️ Только современные (2023+) |
:focus-visible |
✅ Современные браузеры |
Распространённые ошибки
1. Забывание content для ::before/::after
2. Двойное двоеточие для псевдоклассов
3. Попытка стилизовать ::before у элементов замены
Заключение
Псевдоклассы и псевдоэлементы — это фундаментальные инструменты современного CSS. Они позволяют:
- ✅ Создавать интерактивные элементы без JavaScript
- ✅ Добавлять декоративные элементы без HTML
- ✅ Стилизовать состояния форм и валидацию
- ✅ Реализовывать сложные UI паттерны
- ✅ Улучшать доступность с
:focus-visible
Основные выводы:
- Используйте
:focus-visibleдля доступности :has()открывает новые возможности для родительских селекторов::beforeи::afterотлично подходят для декоративных элементов- Комбинируйте псевдоклассы для точной стилизации
- Помните о производительности при сложных селекторах
Практикуйтесь с интерактивными примерами выше и создавайте красивые интерфейсы!
Полезные ресурсы
Специфичность CSS: калькулятор веса селектора
Вставьте селектор и узнайте его вес — станет понятно, какое правило победит в каскаде и почему стиль не применяется.
Попробовать
CSS градиент: генератор фона онлайн
Соберите CSS-градиент визуально — линейный, радиальный или конический — настройте цветовые точки и направление и скопируйте готовый код CSS и Tailwind.
Попробовать
Совет: Попробуйте изменить код в интерактивных примерах выше, чтобы увидеть, как работают разные псевдоклассы и псевдоэлементы в реальном времени!



