Кратко
СкопированоСами по себе счётчики не имеют видимого эффекта, но их значения можно использовать с помощью функций counter и counters.
Пример
Скопированоcounter()
СкопированоВ следующем примере показано простое использование функции counter:
<section class="table-of-contents"> <h1 class="title">Оглавление</h1> <h2 class="chapter">HTML и CSS</h2> <h2 class="chapter">Создание стилей и таблиц стилей</h2> <h2 class="chapter">Селекторы: выбор форматируемых элементов</h2> <h2 class="chapter">Механизм наследования стилей</h2> <h2 class="chapter">Управление сложной структурой стилей: каскад</h2> <h2 class="chapter">Поля, отступы, границы</h2></section>
<section class="table-of-contents">
<h1 class="title">Оглавление</h1>
<h2 class="chapter">HTML и CSS</h2>
<h2 class="chapter">Создание стилей и таблиц стилей</h2>
<h2 class="chapter">Селекторы: выбор форматируемых элементов</h2>
<h2 class="chapter">Механизм наследования стилей</h2>
<h2 class="chapter">Управление сложной структурой стилей: каскад</h2>
<h2 class="chapter">Поля, отступы, границы</h2>
</section>
На элементе <section> создаём счётчик с именем chapter и начальным значением 0:
.table-of-contents { counter-reset: chapter 0;}
.table-of-contents {
counter-reset: chapter 0;
}
Устанавливаем увеличение значения счётчика сhapter, используя свойство counter. Далее подставляем значение счётчика chapter через функцию counter:
.chapter { counter-increment: chapter 1;}.chapter::before { content: "Глава "counter(chapter) ": ";}
.chapter {
counter-increment: chapter 1;
}
.chapter::before {
content: "Глава "counter(chapter) ": ";
}
counters()
СкопированоФункция counters прекрасно подходит для нумерации вложенных друг в друга списков.
Например, пронумеруем левую навигационную панель данной статьи при помощи функции counters:
<ul class="table-of-contents"> <li class="paragraph"><a href="#kratko">Кратко</a></li> <li class="paragraph"><a href="#primer">Пример</a> <ul class="table-of-contents"> <li class="paragraph"><a href="#counter">counter()</a></li> <li class="paragraph"><a href="#counters">counters()</a></li> </ul> </li> <li class="paragraph"><a href="#kak-ponyat">Как понять</a></li> <li class="paragraph"><a href="#kak-pishetsya">Как пишется</a></li> <li class="paragraph"><a href="#argumenty">Аргументы</a></li></ul>
<ul class="table-of-contents">
<li class="paragraph"><a href="#kratko">Кратко</a></li>
<li class="paragraph"><a href="#primer">Пример</a>
<ul class="table-of-contents">
<li class="paragraph"><a href="#counter">counter()</a></li>
<li class="paragraph"><a href="#counters">counters()</a></li>
</ul>
</li>
<li class="paragraph"><a href="#kak-ponyat">Как понять</a></li>
<li class="paragraph"><a href="#kak-pishetsya">Как пишется</a></li>
<li class="paragraph"><a href="#argumenty">Аргументы</a></li>
</ul>
На элементе <ul> создаём счётчик с именем paragraph и начальным значением 0:
.table-of-contents { counter-reset: paragraph 0;}
.table-of-contents {
counter-reset: paragraph 0;
}
Устанавливаем увеличение значения счётчика paragraph, использовав свойство counter. Далее подставляем значение счётчика paragraph через функцию counters:
.paragraph { counter-increment: paragraph 1;}.paragraph::marker { content: counters(paragraph, '.');}
.paragraph {
counter-increment: paragraph 1;
}
.paragraph::marker {
content: counters(paragraph, '.');
}
Как понять
СкопированоФункции counter и counters служат для того, чтобы возвращать текущее значение счётчика. Передавая функции аргумент в виде имени счётчика вернётся значение этого счётчика.
Подробнее о различиях функций counter и counters написано в статье Счётчики в CSS.
Но если вкратце, функция counter возвращает значение самого последнего счётчика с указанным именем в наборе всех CSS-счётчиков, которые унаследовал элемент.
Функция counters, в свою очередь, возвращает значения всех счётчиков в наборе CSS-счётчиков с указанным именем, которые унаследовал элемент.
Как пишется
СкопированоФункции counter и counters обычно используются в связке с псевдоэлементами и свойством content.
Чтобы подставить значение счётчика на место псевдоэлемента, нужно указать функцию counter или counters в качестве значения свойства content и передать ей аргумент — имя счётчика. В примере ниже это будет счётчик chapter:
li::marker { content: counters(chapterNum, '.');}h2::before { content: counter(chapterNum);}
li::marker {
content: counters(chapterNum, '.');
}
h2::before {
content: counter(chapterNum);
}
Если используется функция counters важно указать вторым аргументом разделитель в виде строки, которая будет разделять значения всех счётчиков с указанным именем.
Аргументы
СкопированоСоздавать новые счётчики может не только свойство counter. Представим такую ситуацию, что вы применили только функцию counter или counters и указали в качестве аргумента имя несуществующего счётчика.
h2::before { content: counter(new);}
h2::before {
content: counter(new);
}
В таком случае создастся новый счётчик с именем new и начальным значением 0. После создания счётчика, функция counter или counters начинает действовать как обычно.
Имена счётчиков чувствительны к регистру. Например, значения example и EXAMPLE — это два разных, не связанных между собой счётчика.
Нельзя использовать ключевые слова: none, initial, inherit, unset, default в качестве названий счётчиков.
В обеих функциях есть необязательный аргумент, который указывает стиль счётчика, например, вместо использования десятичной системы счисления — данное значение устанавливается по умолчанию, можно указать заглавную римскую нумерацию, то есть тип upper:
.paragraph::marker { content: counters(paragraph, '.', upper-roman);}.chapter::before { content: "Глава "counter(chapter, upper-roman) ": ";}
.paragraph::marker {
content: counters(paragraph, '.', upper-roman);
}
.chapter::before {
content: "Глава "counter(chapter, upper-roman) ": ";
}
Более подробно о других значениях можно посмотреть в доке по свойству list.