Свойство content
С помощью CSS на страницу можно добавить элементы, несуществующие в разметке страницы. Это делается с помощью псевдоэлементов :before
и :after
, но не менее важную роль в этом играет свойство content
.
Оно определяет содержимое псевдоэлементов. И даже больше, псевдоэлементы не отобразятся, если у них не задано свойство content
. Достаточно такой строки:
Спецификация тут: w3.org/TR/css3-content/
Снеговики в примере добавлены с помощью content
для псевдоэлементов, сами снеговики — символы юникода:
Возможные значения свойства:
normal
, none
— содержимое псевдоэлемента не отображается. Полезно, если нужно скрыть ранее заданный псевдоэлемент.
<string>
— текстовый контент. Можно вставлять простой текст и символы юникода, как в примере выше. Для практических целей очень пригодятся разные варианты стрелок. Символы юникода можно найти, например, тут или тут.
<uri>
— адреса картинок.
Практическое применение — иконки перед ссылкам на профили в соцсетях, иконка для обозначения внешней ссылки, буллеты списков.
Правда, тут появляется проблема лишних запросов к серверу.
Варианты решений:
- спрайт, иконки из которого вставляются фоном в саму ссылку или в псевдоэлемент. Второе предпочтительней, потому что тогда псевдоэлемент ограничит область видимости спрайта, таким образом иконки в спрайте могут быть расположены не только вертикально, но и рядами.
Количество запросов к серверу уменьшается до одного, но при этом картинка кешируется у пользователя; - закодировать отдельные картинки в base-64 и вставлять через
content: url()
; - закодировать весь спрайт в base-64 и использовать его как фон для псевдоэлемента.
В двух последних вариантах вообще не будет запросов к серверу, но картинки не кешируются и, кроме того, закодированное изображение может весить больше исходного. Способ имеет смысл использовать только для небольших изображений.
Закодировать картинку в base64 можно с помощью онлайн-сервисов. Полученный код вставляется в url()
с информацией о формате содержимого, например data:image/png;base64
.
Вот так будет выглядеть код для иконки Instagram:
Код длинный и заканчивается где-то за горизонтом. Кроме того, по коду непонятно что за картинка в нём лежит, и, при необходимости отредактировать, картинку надо будет каждый раз кодировать и вставлять заново, хотя в случае с обычным изображением его надо будет просто перезалить. В то же время есть плагин для гранта, который автоматически кодирует картинки и заменяет в коде адреса картинок на base64.
Подобным же образом можно вставлять SVG.
Это очень удобно, но пока что работает не во всех браузерах. Например, Chrome такое поймет и отобразит, а Firefox — нет.
Upd: SVG в CSS будет работать во всех браузерах, если закодировать его как адресную строку. Это можно сделать с помощью URL Encoder.
<counter>
— счетчик. С помощью этого значения можно пронумеровать не только списки, но и любые элементы на странице. Например, разделы статьи.
counter-reset
задает имя счетчика.
counter-increment
увеличивает значение заданного счетчика.
content: counter(имя счетчика)
выводит значение счетчика в качестве содержимого псевдоэлемента.
attr(<identifier>)
— это значение выводит содержимое заданного атрибута. Удобно использовать для вывода атрибутов href
в версии для печати и для разных интересных эффектов.
Много эффектов можно найти тут: tympanus.net/Development/CreativeLinkEffects/
open-quote
, close-quote
— значения для вывода открывающих и закрывающих кавычек. Символы, которые будут использованы, определяются свойством quotes
. Если оно не задано, будут использованы значения по умолчанию, которые зависят от браузера.
no-open-quote
, no-close-quote
— значение отключает отображение кавычек, но при этом продолжает учитываться уровень их вложенности.
В спецификации есть ещё много интересного вроде псевдоэлемента, представляющего обертку для всего элемента или множественные псевдоэлементы, но в данный момент это нигде не реализовано.
- Ссылки по теме:
- Символы юникода
- Unicode-table.com
- Data URIs
- Valid CSS Content
- Метки:
- псевдоэлементы,
- юникод