Автоматическая нумерация с помощью CSS счетчиков
Введение
Часто когда вы пишете текст вам нужно пронумеровать разделы и составить оглавление. Вы можете пронумеровать их непосредственно в коде, но это может быть трудоёмким, если вы будете в последствии редактировать этот текст то вам придётся изменять заново всю нумерацию. CSS2.1 дает вам автоматический способ нумерации использую CSS счётчики, и эта статья будет про то как их использовать. Есть только одно “но“: CSS счётчики не поддерживает Internet Explorer, но обещают поддержку в Internet Explorer 8.
Установка счётчика
Первым делом нужно обнулить счётчик и дать ему имя. Это можно сделать с помощью свойства counter-reset
, например:
body { counter-reset: section; }
Эти действия обнулят счётчик к 0 на элементе body
и присваивает ему имя section
. Вы можете задать любое понравившееся вам имя. Это свойство также может иметь второе дополнительное значение, которое устанавливает начальное значение счётчика. Например если вы хотите чтобы нумерация начиналась с 5 то вы можете написать так:
body { counter-reset: section 4; }
Приращение счётчика
Следующим шагом будет установка когда счётчик увеличивается и каким значением. Это может определено свойством counter-increment
. Если значение не установлено, то используется приращение счётчика по умолчанию.
body { counter-reset: section 4; }
h2 { counter-increment: section; }
Если вы хотите прирост счётчика по два, то:
h2 { counter-increment: section 2; }
Свойство принимает также нулевое и отрицательные значения. Если счётчик одновременно сбрасывается и приращивается на одном и том элементе, то сначала счётчик будет сброшен, а потом увеличен, например в следующем примере значение счётчика всегда будет 2:
h2 {
counter-reset: section;
counter-increment: section 2;
}
Отображение счётчика
После того как счётчик установлен, нужно вывести его на страницу. Вывод осуществляется с помощью свойств content
, counter
, и псевдокласса :before
body {counter-reset: section 4;}
h2 {counter-increment: section;}
h2:before { counter(section) ". ";}
Использование двух и более счётчиков.
Можно использовать больше одного счётчика. В следующем примере будет показано как использовать два счётчика, чтобы установить нумерацию для разделов и подразделов. В каждом разделе счётчик подраздела будет сбрасываться.
body { counter-reset: section; }
h2 {
counter-increment: section;
counter-reset: sub-section;
}
h2:before,
h3:before { content: counter(section) "." counter(sub-section) " "; }
h3 { counter-increment: sub-section; }
Вложенные счётчики.
Кроме того как определять счётчики для каждого раздела/подраздела есть так же функция counters()
для создания вложенных счётчиков. Это прекрасно работает для элементов типа список, где списки могут быть вложены друг в друга.Это не работало бы в примерах выше, потому что там подразделы не были вложены в разделы.
Вложенные счётчики могут быть установлены так:
ol {
counter-reset: section;
list-style-type: none;
}
ol li { counter-increment: section; }
ol li:before { content: counters(section, ".") ". "; }
Это увеличит счётчик на каждом элементе списка, независимо от того сколько вложенных списков. Важно сбросить счётчик в нужном месте, чтобы обнулить его для каждого из вложенных элементов. В нашем случае счётчик сбрасывается на элементе ol
. В следующем примере первый вложенный список начнётся с 1.1 и будет увеличиваться 1.2, 1.3 и т.д. Второй вложенный список начнётся с 1.1.1 и далее 1.1.2, 1.1.3.
<ol>
<li>item 1
<ol>
<li>sub item 1
<ol>
<li>sub-sub item 1</li>
<li>sub-sub item 2</li>
<li>sub-sub item 3</li>
</ol>
</li>
<li>Sub item 2</li>
</ol>
</li>
<li>item 2</li>
</ol>
Стилизация счётчиков.
Так же во всех случаях вторым аргументом counter
можно использовать значения из свойства list-style-type
. Например:
h2:before { content: counter(section, upper-alpha) ". "; }
Эта статья является вольным переводом статьи: Automatic numbering with CSS Counters