
Свойство content в CSS позволяет добавлять содержимое в элементы без изменения HTML-кода. Оно работает только с псевдоэлементами ::before и ::after, что делает его удобным для вставки текстовых меток, символов, иконок и визуальных индикаторов прямо через стили.
С помощью content можно создавать пользовательские маркеры в списках, добавлять декоративные элементы к кнопкам и ссылкам, а также формировать простые графические вставки, используя изображения в формате URL. Важно учитывать, что вставляемое содержимое не становится частью DOM, поэтому его нельзя выбрать или редактировать через JavaScript напрямую.
При использовании свойства content стоит проверять поддержку в браузерах, особенно для более сложных значений, таких как изображения и функции. Простые текстовые вставки поддерживаются во всех современных браузерах, тогда как CSS-переменные и генерация контента через attr() могут вести себя по-разному в старых версиях.
Как правильно использовать свойство CSS content
Свойство content применяется исключительно с псевдоэлементами ::before и ::after. Оно не изменяет HTML-разметку напрямую, что позволяет добавлять дополнительные элементы визуально без вмешательства в структуру документа.
Основные правила использования:
- Всегда указывайте кавычки для текстовых значений: content: «Пример»;.
- Для вставки символов используйте Unicode: content: «\2713»; – добавляет галочку.
- Чтобы отображать атрибут элемента, применяйте функцию attr(): content: attr(data-label);.
- Стилизация псевдоэлементов возможна через свойства color, font-size, background, margin и padding.
- Проверяйте видимость: псевдоэлементам необходимо, чтобы родительский элемент был видимым и имел позиционирование для правильного отображения.
Примеры практического применения:
- Добавление иконок к ссылкам без изменения HTML-кода.
- Создание пользовательских маркеров списков через content и list-style: none;.
- Отображение статусов элементов на основе атрибутов данных.
- Вставка декоративных линий или символов вокруг текста для визуальных подсказок.
Важно учитывать ограничения: вставленное содержимое не становится частью DOM, его нельзя выбрать или изменять через JavaScript напрямую. Для динамических изменений используйте комбинацию attr() и CSS-переменных, проверяя поддержку браузеров.
Синтаксис свойства content и его базовые значения

Свойство content используется для генерации содержимого в псевдоэлементах ::before и ::after. Оно задаёт текст, изображения, символы или данные из атрибутов HTML-элементов. Применяется только в сочетании с селектором псевдоэлемента.
Базовый синтаксис:
selector::before {
content: "Текст";
}
Основные типы значений свойства content:
- Строка в кавычках – добавляет текстовое содержимое: content: «Пример»;.
- Unicode-символ – вставляет символ по коду: content: «\00A9»;.
- Функция attr() – подставляет значение атрибута элемента: content: attr(title);.
- url() – вставляет изображение: content: url(icon.png);.
- open-quote и close-quote – добавляют кавычки согласно языковым настройкам: content: open-quote;.
- none – отключает генерацию содержимого.
Разрешено комбинировать несколько значений:
content: "Глава " counter(chapter) ": " attr(data-title);
Для корректной работы рекомендуется использовать псевдоэлементы с display: inline или display: block и задавать им размеры или отступы при необходимости. Значение content не наследуется и применяется отдельно для каждого псевдоэлемента.
Использование content с псевдоэлементами ::before и ::after
Псевдоэлементы ::before и ::after создают виртуальные элементы, добавляемые перед или после содержимого выбранного элемента. Они не изменяют HTML-разметку и используются для вставки дополнительного текста, символов или графических элементов через свойство content.
Пример базового использования:
button::before {
content: "▶ ";
}
button::after {
content: " ✓";
}
Псевдоэлементы наследуют большинство свойств CSS: можно задать color, font-size, background, margin, padding, display и position. Это позволяет создавать декоративные элементы без добавления тегов в HTML.
Рекомендации по применению:
- Используйте ::before для добавления иконок или символов перед текстом (например, стрелки, маркеры).
- Применяйте ::after для вставки завершающих элементов: кавычек, декоративных линий, служебных индикаторов.
- Если псевдоэлемент не отображается, убедитесь, что задано свойство content; без него псевдоэлемент не создаётся.
- Для позиционирования используйте position: absolute; с родительским position: relative;.
- Можно применять анимации и переходы, если контент используется для визуальных эффектов.
Псевдоэлементы особенно полезны при создании декоративных интерфейсных элементов, добавлении вспомогательных символов в таблицы или списки, а также при формировании кастомных интерфейсных элементов без дополнительного HTML-кода.
Добавление текста и символов через content
Свойство content позволяет вставлять текстовые строки и символы в псевдоэлементы ::before и ::after. Текст задаётся в кавычках, а символы – через Unicode-коды. Это используется для визуальных подсказок, маркировки элементов или декоративных дополнений без изменения HTML-разметки.
Примеры базового применения:
h2::before {
content: "§ ";
}
a::after {
content: " ↗";
}
Вставка текста и символов через content поддерживает комбинацию нескольких значений, включая пробелы и спецсимволы. Для корректного отображения Unicode используйте экранированную запись вида \XXXX.
| Тип вставки | Пример значения | Результат |
|---|---|---|
| Текстовая строка | content: "Готово"; |
Добавляет слово «Готово» |
| Unicode-символ | content: "\2714"; |
Добавляет символ ✔ |
| Комбинация значений | content: "Статус: " "\2714"; |
Отображает «Статус: ✔» |
Рекомендации:
- Используйте текстовые вставки для обозначения статуса, подписи или вспомогательной информации.
- Применяйте Unicode-символы для стрелок, галочек, кавычек и других интерфейсных знаков.
- При необходимости добавляйте неразрывный пробел с помощью \00A0, чтобы избежать склеивания текста и символов.
- Не вставляйте длинные тексты через content – это свойство рассчитано на короткие фрагменты.
Вставка изображений и иконок с помощью content

Свойство content поддерживает вставку изображений через функцию url(). Этот способ применим только в псевдоэлементах ::before и ::after. Изображение вставляется как генерируемое содержимое и не становится частью DOM.
Пример базового использования:
button::before {
content: url("icon.png");
}
Для корректного отображения изображения необходимо задать размеры и параметры выравнивания псевдоэлемента, так как содержимое не наследует размеры от исходного файла. Если указано несколько значений, браузер использует первое корректное.
- Поддерживаются форматы PNG, SVG, GIF, JPEG, WebP.
- SVG-иконки предпочтительнее при масштабировании без потери качества.
- Если изображение не найдено, псевдоэлемент остаётся пустым.
- Функция url() не поддерживает CSS-переменные в большинстве браузеров.
Для векторных иконок можно использовать встроенные символы шрифтов, что снижает количество загрузок:
a::before {
content: "\f061";
font-family: "Font Awesome 6 Free";
font-weight: 900;
}
Рекомендации:
- Используйте url() для статичных декоративных изображений, не требующих взаимодействия.
- Для интерактивных иконок применяйте HTML-элементы <img> или SVG внутри кода.
- Не вставляйте крупные графические файлы через content – это увеличивает время рендеринга.
- Оптимизируйте изображения перед использованием и задавайте display: inline-block или block для псевдоэлемента.
Применение content для генерации списков и маркеров
Свойство content позволяет полностью управлять отображением маркеров в списках без использования стандартного свойства list-style. Это даёт возможность задавать собственные символы, числа или изображения для обозначения пунктов списка.
Пример базового применения:
ul {
list-style: none;
}
ul li::before {
content: "• ";
color: #333;
}
Такой подход удобен при создании нестандартных визуальных схем, чек-листов или навигационных меню. Вместо стандартной точки можно использовать любой символ, иконку или счётчик.
Для нумерации пунктов без изменения HTML можно применять встроенные счётчики:
ol {
counter-reset: item;
}
ol li::before {
counter-increment: item;
content: counter(item) ". ";
}
Эта конструкция создаёт автоматическую нумерацию, которую можно комбинировать с текстом или символами. Например, добавление префикса content: «Шаг » counter(item) «: « формирует пошаговые инструкции.
Рекомендации по использованию:
- Сбрасывайте стандартный стиль списка через list-style: none; перед добавлением собственных маркеров.
- Используйте Unicode-символы (\2713, \2022) для визуального обозначения элементов.
- При работе с упорядоченными списками применяйте counter-reset и counter-increment для управления нумерацией.
- Для адаптивных интерфейсов комбинируйте content с медиазапросами, изменяя маркеры под размер экрана.
Ограничения и особенности работы content с блоками и inline-элементами

Свойство content не может применяться напрямую к обычным элементам. Оно работает только с псевдоэлементами ::before и ::after, что ограничивает его использование для генерации контента внутри структуры документа. Это ключевое отличие, которое важно учитывать при проектировании интерфейсов.
Псевдоэлементы с content наследуют тип отображения своего родителя, но могут быть изменены через свойство display. Для inline-элементов по умолчанию создаются встроенные псевдоэлементы, для block – блочные. При необходимости можно задать другой тип, чтобы контролировать выравнивание и размеры.
Основные особенности поведения:
- У inline-элементов псевдоэлементы располагаются в тексте и влияют на межстрочные интервалы.
- У block-элементов вставляемое содержимое можно позиционировать абсолютно и использовать для декоративных элементов.
- Псевдоэлементы не участвуют в потоке документа и не влияют на структуру DOM.
- Вставленный контент нельзя выделить курсором или скопировать – он не считается частью текстового содержимого.
При комбинировании с display: flex или grid псевдоэлементы можно использовать как самостоятельные визуальные блоки, если заданы размеры и позиционирование. Однако их нельзя применять для генерации интерактивных элементов или добавления новых вложенных блоков в структуру страницы.
Для надёжного отображения рекомендуется использовать content для декоративных вставок, индикаторов и текстовых меток, избегая случаев, где требуется участие содержимого в логике документа.
Использование content с переменными CSS и функцией attr()
Свойство content поддерживает динамическое формирование содержимого с помощью пользовательских переменных и функции attr(). Эти инструменты позволяют подставлять значения из CSS или HTML-атрибутов без изменения структуры страницы.
Для применения переменных используется синтаксис var(—имя-переменной):
:root {
--status-symbol: "✔";
}
.status::after {
content: var(--status-symbol);
}
Значения переменных могут быть как текстовыми строками, так и комбинацией символов и пробелов. Переменные удобно использовать для централизованного управления иконками, суффиксами или вспомогательными обозначениями, меняя их в одном месте без правок отдельных правил.
span::after {
content: " (" attr(data-unit) ")";
}
В этом примере значение из data-unit подставляется в текст рядом с элементом. Поддерживаются только строковые значения атрибутов, числовые данные автоматически преобразуются в текст.
Рекомендации:
- Используйте переменные для повторяющихся символов и надписей, чтобы избежать дублирования кода.
- Комбинируйте текст, переменные и атрибуты в одном выражении: content: «ID: » attr(data-id) var(—suffix);.
- Проверяйте поддержку attr() в конкретных браузерах, особенно при использовании новых типов данных.
Советы по совместимости content в разных браузерах

| Браузер | Поддержка content | Особенности реализации |
|---|---|---|
| Chrome | Полная | attr() работает только со строковыми атрибутами; динамические изменения требуют перерисовки элемента. |
| Firefox | Полная | Поддерживает attr() для числовых и текстовых атрибутов; корректно отображает комбинированные значения. |
| Safari | Полная | Может некорректно обрабатывать вложенные кавычки и символы Unicode; url() для SVG иногда игнорируется. |
| Edge | Полная | Совместим с Chrome, но attr() не обновляется при изменении DOM без перезагрузки псевдоэлемента. |
| Internet Explorer 11 | Частичная | Не поддерживает attr() для пользовательских data-атрибутов; url() обрабатывается с ошибками. |
Для обеспечения корректной работы рекомендуется избегать зависимости интерфейса от динамических значений attr(), ограничивать использование url() для графики и всегда тестировать контент на движках Blink, Gecko и WebKit. При необходимости поддержки старых версий IE используйте текстовые замены через JavaScript вместо content.
Вопрос-ответ:
Можно ли использовать свойство content без псевдоэлементов?
Нет, свойство content работает только с псевдоэлементами ::before и ::after. Попытка применить его к обычным элементам не создаст содержимого и не вызовет ошибок, но результат будет отсутствовать.
Как вставить символы Unicode через content?
Для вставки Unicode-символов используется экранированная запись вида \XXXX, где XXXX — код символа в шестнадцатеричном формате. Например, content: «\2714»; добавит галочку. Символы можно комбинировать с текстом и пробелами для оформления интерфейса.
Можно ли использовать content для динамического текста из атрибутов HTML?
Да, с помощью функции attr() можно выводить значение атрибутов элемента в псевдоэлемент. Например, content: attr(data-label); вставит текст из атрибута data-label. Однако значение обновляется только при перерисовке элемента, динамические изменения через JavaScript напрямую не отобразятся.
Какие ограничения существуют при вставке изображений через content?
Через content можно вставлять изображения с помощью url(), но они не становятся частью DOM. Изображения должны быть небольшими, форматы PNG, JPEG, GIF или SVG поддерживаются. Для больших графических файлов лучше использовать обычные HTML-элементы или встроенный SVG.
Как правильно использовать content с переменными CSS?
Для вставки переменных применяют синтаксис var(—имя-переменной). Это позволяет централизованно управлять символами, текстом или декоративными элементами. Например: content: var(—status-symbol);. Переменные можно комбинировать с текстом или значениями из атрибутов, создавая динамичные подписи и метки.
Можно ли использовать свойство content для создания интерактивных элементов на странице?
Свойство content предназначено для визуального добавления текста, символов или изображений через псевдоэлементы ::before и ::after. Вставленное содержимое не становится частью DOM, поэтому его нельзя выбрать, редактировать или обработать событиями JavaScript напрямую. Для интерактивных элементов, таких как кнопки, ссылки или формы, следует использовать обычные HTML-элементы. content подходит для декоративных вставок, статических меток или иконок, а также для отображения информации из атрибутов через attr(), когда взаимодействие не требуется.
