Открыть сервис

Псевдоэлемент

Псевдоэлемент — это ключевое слово (селектор) в языке каскадных таблиц стилей (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.

Источники

  1. Спецификация CSS Pseudo-Elements Module Level 4 (W3C).
  2. Документация MDN Web Docs: Псевдоэлементы.
  3. «CSS: The Definitive Guide» by Eric A. Meyer and Estelle Weyl.
  4. «CSS Secrets» by Lea Verou.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →