Псевдоэлемент¶
Псевдоэлемент — это ключевое слово (селектор) в языке каскадных таблиц стилей (CSS), которое позволяет стилизовать определённую часть содержимого HTML-элемента, не изменяя сам HTML-документ. В отличие от псевдоклассов, которые описывают состояние элемента (например, :hover — состояние наведения), псевдоэлементы создают виртуальные элементы, которых нет в DOM-дереве, или обращаются к конкретным частям существующего элемента (например, первой букве или первой строке текста). Псевдоэлементы являются фундаментальным инструментом веб-дизайна, позволяя реализовывать сложные визуальные эффекты, декоративные элементы и улучшать семантику страницы без загрязнения разметки.
¶История и стандартизация
Концепция псевдоэлементов была введена в спецификации CSS2 (1998 год). В первоначальной версии для обозначения псевдоэлементов использовался одинарный двоеточие (:), например, :before и :after. Однако, чтобы отличать их от псевдоклассов, в спецификации CSS3 (2011 год) было решено использовать двойное двоеточие (::). На практике большинство современных браузеров поддерживают оба синтаксиса, но официальным стандартом для псевдоэлементов является ::. Псевдоэлементы ::before и ::after являются наиболее широко используемыми и поддерживаются всеми современными браузерами.
¶Основные псевдоэлементы
Спецификация CSS определяет несколько ключевых псевдоэлементов, каждый из которых предназначен для стилизации определённого аспекта содержимого.
¶::before и ::after
Эти два псевдоэлемента являются наиболее мощными и универсальными. Они создают виртуальный дочерний элемент, который располагается соответственно до (::before) или после (::after) содержимого выбранного элемента. Ключевой особенностью является обязательное использование свойства content, которое определяет, что будет отображаться внутри псевдоэлемента. Значением content может быть строка, изображение, счётчик или пустая строка ("").
- Пример использования: Добавление декоративных кавычек к цитатам, иконок к ссылкам, создание «чистых» флажков в чекбоксах, реализация эффектов наведения (например, подчёркивание, появляющееся снизу).
- Важное замечание: Псевдоэлементы
::beforeи::afterне работают с элементами, которые не имеют содержимого (например,<img>,<input>,<br>), так как они вставляются внутрь элемента, а не рядом с ним.
¶::first-letter
Применяет стили к первой букве текстового содержимого блочного элемента. Этот псевдоэлемент часто используется для создания «буквиц» (drop caps) — декоративных заглавных букв в начале абзаца.
- Пример:
p::first-letter { font-size: 2em; float: left; }— сделает первую букву каждого абзаца крупнее и обтекаемой.
¶::first-line
Применяет стили к первой строке текстового содержимого блочного элемента. Стилизация применяется динамически: если ширина окна браузера изменяется, то и первая строка может измениться, и стили будут применены к новой первой строке.
- Пример:
p::first-line { font-weight: bold; color: #333; }— сделает первую строку каждого абзаца жирной и тёмно-серой.
¶::selection
Позволяет стилизовать часть текста, которую пользователь выделил мышью или с помощью клавиатуры. Обычно используется для изменения цвета фона и цвета текста выделения.
- Пример:
::selection { background: #ffb7b7; color: #000; }— изменит стандартное синее выделение на розовое с чёрным текстом.
¶::placeholder
Применяет стили к тексту-подсказке (placeholder) внутри элемента <input> или <textarea>. Этот псевдоэлемент позволяет изменить цвет, шрифт и размер текста подсказки.
- Пример:
input::placeholder { color: #999; font-style: italic; }— сделает текст подсказки серым и курсивным.
¶::marker
Применяет стили к маркеру (буллиту) или номеру элемента списка (<li>). Позволяет изменить цвет, размер и шрифт маркера, не затрагивая текст самого элемента списка.
- Пример:
li::marker { color: red; font-size: 1.2em; }— сделает маркеры всех пунктов списка красными и крупнее.
¶::backdrop
Используется для стилизации области, которая появляется за элементом в полноэкранном режиме (например, при открытии модального окна через <dialog> или при просмотре видео в полноэкранном режиме). Позволяет задать фон, размытие или затемнение.
¶Синтаксис и правила использования
- Обозначение: Используется двойное двоеточие (
::), хотя для обратной совместимости браузеры поддерживают и одинарное (:). - Свойство
content: Обязательно для::beforeи::after. Без него псевдоэлемент не будет отображаться. Значение может быть: - Строкой:
content: "★"; - Изображением:
content: url(icon.png); - Пустой строкой:
content: "";(часто используется для создания геометрических фигур через CSS). - Счётчиком:
content: counter(item); - Наследование: Псевдоэлементы наследуют стили от родительского элемента, если они не переопределены явно.
- Позиционирование: Псевдоэлементы
::beforeи::afterпо умолчанию являются строчными (inline) элементами. Чтобы задать им размеры, отступы или позиционировать их, необходимо изменить их свойствоdisplayнаblock,inline-blockилиflex. Часто их используют сposition: absoluteдля точного позиционирования относительно родителя. - Ограничения: Псевдоэлемент может быть только один для каждого типа (
::beforeи::after). Нельзя создать два::beforeдля одного элемента. Также псевдоэлементы не являются частью DOM, поэтому к ним нельзя обратиться из JavaScript напрямую (хотя их стили можно изменить через CSS-классы).
¶Применение в веб-дизайне
Псевдоэлементы широко используются для решения множества задач, не требующих изменения HTML-кода.
¶Декоративные элементы
- Иконки и символы: Добавление иконок перед ссылками или кнопками без использования дополнительных HTML-тегов.
- Разделители: Создание линий, точек или других визуальных разделителей между блоками.
- Фоновые эффекты: Реализация сложных фоновых узоров, градиентов или теней, которые не могут быть применены к самому элементу.
¶Улучшение семантики и доступности
- Подписи к изображениям: Использование
::afterдля добавления текстовой подписи к изображению, не нарушая структуру HTML. - Индикаторы состояния: Добавление визуальных подсказок (например, зелёная галочка для успешной отправки формы) без изменения разметки.
¶Реализация сложных макетов
- «Чистые» флажки и радио-кнопки: Создание кастомных, стилизованных элементов управления формами, скрывая стандартные и используя
::beforeи::afterдля отображения нового дизайна. - Тултипы (всплывающие подсказки): Создание треугольных стрелок у всплывающих подсказок с помощью
::afterиborder. - Многослойные эффекты: Наложение нескольких слоёв (например, тени и градиента) на один элемент, используя псевдоэлементы как дополнительные слои.
¶Критика и ограничения
Несмотря на свою полезность, псевдоэлементы имеют ряд ограничений, которые могут усложнить разработку:
- Отсутствие в DOM: Невозможность прямого манипулирования содержимым или стилями псевдоэлемента через JavaScript. Для изменения их содержимого приходится менять CSS-класс родительского элемента или использовать CSS-переменные.
- Ограничение на количество: Для каждого элемента можно создать только один
::beforeи один::after. Это может быть недостаточно для реализации сложных многослойных эффектов. - Сложность отладки: В инструментах разработчика браузера псевдоэлементы отображаются, но их стили могут быть сложнее для отслеживания, особенно при наследовании.
- Семантическая пустота: Псевдоэлементы не несут семантической нагрузки для поисковых систем и скринридеров (если только не используется свойство
contentс текстом, который может быть прочитан, но это не рекомендуется для важного контента).
¶Интересные факты
- Псевдоэлементы
::beforeи::afterявляются одними из самых популярных CSS-селекторов, используемых в современных фреймворках (например, Bootstrap, Tailwind CSS) для создания утилитарных классов. - Свойство
contentможет принимать не только строки, но и атрибуты HTML-элемента, например,content: attr(data-tooltip);, что позволяет динамически подставлять текст из HTML-атрибутов. - В CSS-анимациях псевдоэлементы могут быть анимированы так же, как и обычные элементы, что открывает возможности для создания сложных анимаций без использования JavaScript.
¶Источники
- Спецификация CSS Pseudo-Elements Module Level 4 (W3C).
- Документация MDN Web Docs: Псевдоэлементы.
- «CSS: The Definitive Guide» by Eric A. Meyer and Estelle Weyl.
- «CSS Secrets» by Lea Verou.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →

