Генерируемое содержимое

Здесь рассматривается применение псевдоклассов CSS :befor и :after для создания списков типа оглавления с нумерацией и др. элементами оформления, генерируемыми автоматически, а не указываемыми явно в тегах. Заодно здесь показано применение сложных CSS-селекторов.

С помощью CSS можно добавлять к элементам некоторое содержимое, изначально отсутствующее в теле документа, т.е. не заданное в качестве содержимого того или иного тега.
Например, заголовки глав книги не обязательно начинать со слова "Глава". Это слово, как и номер главы можно сгенерировать и добавить к содержимому элемента, например, <h1> при отображении документа. Содержимое, располагающееся до и после элемента, добавляется с помощью псевдоклассов CSS :before и :after соответственно, а его определение — с помощью параметра content. Например, если вы хотите добавить перед всеми заголовками первого уровня (элементами <h1>) слово "Раздел", то достаточно использовать такое правило: h1:before {content:"Раздел"}
Параметр content принимает следующие значения: В качестве значения параметра content можно указать сразу несколько из перечисленных, разделяя их пробелами. Кроме того, параметр content может принимать в качестве значения функцию counters() вычисления значения счетчика для автоматической нумерации элементов, но об этом далее.
Чтобы перед элементами <h1>(заголовками 1-го уровня), например, добавить в качестве генерируемого содержимого картинку с изображением буквы "Г" из файла g.jpg, текст "лава" и вычисляемый номер элемента, за которым следует точка и пробел, достаточно задать следующее CSS-правило:
h1:before {
  content: url("g.jpg") "лава" counters(item, "") ". ";
  counter-increment:item
}
В результате все элементы <h1> в вашем документе будут отображать перед собственным содержимым заданные картинку и текст, а также вычисляемый порядковый номер.

Теперь рассмотрим в качестве примера создание двухуровневого оглавления книги. Структура оглавления размечена тегами <div> и <span>. Разумеется, можно было бы использовать и другие теги, например, теги задания списков (<ul> и т.п.). В данном примере я хотел лишь продемонстрировать применение псевдоклассов CSS для универсальных блокового и внутристорчного теов <div>и <span>.
Названия глав и параграфов заключены в контейнеры <span>, отображаемые в блочном виде (display:block). Обратите внимание на разметку оглавления, обеспечивающую его многоуровневость. Параграфы, относящиеся к одной главе, заключены в тег <div>, который включается в тег <span>, соответствующий данной главе. В свою очередь теги <span> для глав включены в общий <div> самого верхнего уровня. Первая буква в слове "Глава" — графическое изображение, а символ параграфа представлен в Unicode как \A7. Нумерация элементов оглавления отражает его иерархическую структуру. Чтобы элементы номера разделялись точкой, применено значение counters(item,".") параметра contents.

Пример текста с генерируемым содержимым (вид в браузере)

Что такое HTML и CSS
Языки разметки Таблицы стилей
Структура HTML-документа
Определение типа документа Структура собственно документа Разделы документа
Основы CSS Позиционирование с помощью CSS

Внимание!

Следует иметь в виду, что пользователь браузера не может выделить содержимое, генерируемое посредством CSS. Его нельзя найти средствами поиска и скопировать в буфер обмена.

Далее приведены CSS- и HTML-коды для данного примера.

Hosted by uCoz