Если вы являетесь разработчиком внешнего интерфейса, существует высокая вероятность того, что вы слышали о псевдоэлементах, а также о свойстве содержимого CSS . Я не буду подробно обсуждать здесь псевдоэлементы, но я предлагаю вам взглянуть на статью Луи Лазариса о Smashing Magazine, если вы не знакомы с этой концепцией или хотите быстро освежиться.
В этой статье мы сосредоточимся на свойстве content
. CSS-свойство content
работает с псевдоэлементами ::before
и ::after
(которые могут использовать синакс с одинарным или двойным двоеточием). Свойство используется для вставки сгенерированного контента в веб-страницу и полностью поддерживается во всех основных браузерах.
Основной синтаксис для свойства content
Синтаксис для свойства content
разбит следующим образом, каждое из представленных значений:
p::before { content: normal|counter|attr|string|open-quote|url|initial|inherit; }
CSS немного отличается от значения к значению. Например, чтобы использовать значение attr()
с ::before
или ::after
, вам нужно написать CSS следующим образом:
p::after { content: " (" attr(title) ")"; }
Это только один пример, и об этом позже. В следующих разделах я расскажу о каждом значении, включая attr()
.
Значение: none
или normal
Если установлено значение none
, псевдоэлемент не генерируется. Если вы установите его в normal
он вычисляется как none
для ::before
и ::after
.
p::before { content: normal; } p::after { content: none; }
Такие вещи могут использоваться во вложенных элементах, в которых уже определен псевдоэлемент, но вы хотите переопределить псевдоэлемент в определенных контекстах.
Значение: <string>
Это значение устанавливает содержимое в строку и может быть любым текстовым содержимым. Если используются нелатинские символы, символы должны быть закодированы. Давайте посмотрим на примеры каждого. Рассмотрим следующий HTML:
<h2>Tutorial Categories</h2> <ol> <li>HTML and CSS</li> <li class="new">Sass & Less</li> <li>JavaScript</li> </ol> <p class="copyright">SitePoint, 2015<p>
А потом следующий CSS:
.new::after { content: " New!"; color: green; } .copyright::before { content: "\00a9 "; }
Здесь мы вставляем текстовое содержимое в один из элементов списка, а также вставляем закодированный символ (в данном случае, символ авторского права) в элемент абзаца.
Строковое значение должно иметь кавычки, окружающие его, и это могут быть одинарные или двойные кавычки.
Значение: <uri>
Значение <uri>
удобно, когда вы заинтересованы в отображении какого-либо вида мультимедиа, что можно сделать, указав на внешний ресурс (например, изображение). Если по какой-либо причине ресурс или изображение не могут быть отображены, они либо игнорируются, либо замещает их место. Давайте посмотрим на некоторый код, который демонстрирует использование этого значения.
Вот HTML-код:
<a class="sp" href="http://www.sitepoint.com/">SitePoint</a>
И это CSS, чтобы показать значок SitePoint вместе с текстом:
.sp::before { content: url(http://www.sitepoint.com/favicon.ico); }
Значение: counter()
или counters()
Это значение является наиболее сложным значением, которое можно использовать со свойством content
. Он записывается как одна из двух разных функций — counter()
или counters()
. Для более подробного обсуждения счетчиков CSS ознакомьтесь с этой статьей . Но вот краткий обзор.
В случае первой функции counter()
сгенерированный текст представляет собой значение самого внутреннего счетчика имени, которое вы указываете в области действия для этого псевдоэлемента. По умолчанию он отформатирован в десятичном формате, но также может быть отформатирован римскими цифрами.
Другая функция counters(name, string)
аналогична, но представляет все счетчики с указанным именем (первый параметр) в порядке от крайнего к внутреннему. Все эти значения разделены указанной строкой (второй параметр). Если вы укажете имя переменной-счетчика как none
, inherit
или initial
объявление игнорируется.
Вот пример, чтобы проиллюстрировать, как использовать счетчик:
<h2>Name of First Four Planets</h2> <p class="planets">Mercury</p> <p class="planets">Venus</p> <p class="planets">Earth</p> <p class="planets">Mars</p>
А вот и CSS:
.planets { counter-increment: planetIndex; } .planets::before { content: counter(planetIndex) ". "; }
Это будет нумеровать элементы сгенерированным контентом, аналогично упорядоченному списку. В этом случае мы могли бы легко использовать упорядоченный список. Эти типы счетчиков намного удобнее, когда пронумерованные элементы перемежаются между другими элементами.
Вот демонстрация, которая использует счетчики CSS с использованием функции counter()
.
Значение: attr()
Как показано ранее, функция attr()
вставит значение указанного атрибута, который является единственным параметром. Если соответствующий элемент не имеет атрибута, возвращается пустая строка.
Вот пример:
<ul> <li><a href="http://www.sitepoint.com/html-css/">HTML and CSS</a></li> <li><a href="http://www.sitepoint.com/javascript">JavaScript</a></li> <li><a href="http://www.sitepoint.com/mobile/">Mobile</a></li> </ul>
С приведенным выше HTML, CSS ниже будет отображать значение атрибута href
в скобках рядом со связанным текстом:
a::after { content: " (" attr(href) ") "; }
Этот прием часто используется в таблицах стилей печати, чтобы ссылки были видны на печатных веб-страницах.
Значение: open-quote
или close-quote
Если установлено одно из этих значений, свойство content
генерирует открывающую или закрывающую кавычку. Обычно он используется вместе с элементом <q>
, но вы можете использовать его с любым элементом. Таким образом, вы можете сделать что-то вроде следующего:
blockquote::before { content: open-quote; } blockquote::after { content: close-quote; }
Значение close-quote
будет работать только с ::after
(по понятным причинам) и ничего не даст, если значение open-quote
также отсутствует в том же элементе с использованием ::before
.
Значение: no-open-quote
или no-close-quote
Значение no-open-quote
удаляет начальную цитату из указанного элемента, а значение no-close-quote
удаляет заключительную цитату. Вы можете спросить, насколько эти значения полезны. Посмотрите на следующий HTML:
<p><q>A wise man once said: <q>Be true to yourself, but don't listen to those who say <q>Don't be true to yourself.</q></q> That is good advice.</q></p>
Обратите внимание, что в вышеприведенном абзаце оратор цитирует кого-то («Мудрый человек …»), который, в свою очередь, также цитирует других («те, кто говорит…»). Итак, у нас есть вложенные кавычки глубиной 3 уровня Грамматически, есть правильный способ справиться с этим. Если вы используете сгенерированный контент, вот как мы можем убедиться, что цитаты правильно вложены:
q { quotes: '“' '”' ''' ''' '“' '”'; } q::before { content: open-quote; } q::after { content: close-quote; }
Первый селектор определяет типы кавычек, которые мы хотим использовать, глубиной в три уровня, используя свойство quotes
. Затем мы вставляем кавычки как контент, используя псевдоэлементы. Это похоже на то, что мы делали в предыдущем разделе.
Но что, если мы хотим, чтобы второй уровень кавычек игнорировался и не вставлялся по какой-либо причине? Мы можем использовать значения no-open-quote
и no-close-quote
чтобы переопределить их:
.noquotes::before { content: no-open-quote; } .noquotes::after { content: no-close-quote; }
В этом случае я добавил класс noquotes
к noquotes
второго уровня. Это гарантирует, что вложение кавычек все еще распознается, но кавычки не отображаются для этого элемента. Таким образом, цитата третьего уровня в этом абзаце будет иметь двойные кавычки, а не одиночные кавычки.
Вывод
Я надеюсь, что этот урок помог вам немного лучше понять каждое из значений свойства content
и как их можно использовать в различных сценариях.
Проверьте ресурсы ниже для получения дополнительной информации: