Счетчики и стили списков

Многие типы контента лучше всего представлять в виде HTML- списка . Для упорядоченного списка, например, этапов приготовления рецепта или сносок к статье, маркер часто также содержит информацию. CSS предоставляет несколько способов управления счётчиками в списке.

Стили списка

Существует широкий спектр предопределенных типов стилей списков, которые поддерживают числа, алфавитные и римские цифры, а также многие международные системы исчисления.

В дополнение к стилям, поддерживаемым браузерами, W3C опубликовала готовые стили счетчиков с поддержкой 181 дополнительного стиля в 45 системах письма.

Если эти параметры вам не подходят, вы также можете определить собственный @counter-style . Это позволит вам указать собственные символы, префикс и суффикс, а также многое другое.

По умолчанию маркер элемента находится outside списка, перед ним и выровнен по правому краю. Вы также можете разместить маркер элемента внутри списка, используя свойство list-style-position: inside .

Счетчики

В то время как стили списков управляют отображением маркеров элементов списка, счётчики позволяют управлять отображаемыми значениями. Для элементов списка <li> браузер создаёт счётчик с именем list-item , который увеличивается на 1 для каждого обнаруженного элемента списка.

Счетчики CSS ведут текущий подсчет количества отображений элемента, имеющего соответствующее значение counter-increment .

Чтобы создать новый счётчик, используйте counter-reset указав имя счётчика и, при необходимости, начальное значение. Часто этот метод устанавливается для родительского элемента, содержащего все подсчитываемые элементы.

Затем добавьте свойство counter-increment для каждого элемента, который вы хотите посчитать.

Наконец, отобразите значение счетчика с помощью функции counter() .

В этом примере мы хотим отобразить текущее количество сносок в виде текста ссылки для каждой сноски. Поскольку нам нужен единый счётчик для всего документа, мы устанавливаем counter-reset: note для основного текста и increment для каждой ссылки на сноску.

Вы также можете использовать несколько счётчиков для подсчёта разных элементов. В примере со сносками, что, если вы хотите отобразить индекс раздела и абзаца, в котором находится сноска?

Счётчик разделов можно создать в теле документа с помощью функции counter-reset , а затем увеличивать его для каждого элемента <h2> . Мы хотим, чтобы счётчик абзацев сбрасывался для каждого раздела, поэтому используем counter-reset для элементов <h2> и увеличиваем его для элементов <p> .

Наконец, мы объединяем значения счетчиков в свойстве content .

a:after {
  content: "(S" counter(section) "P" counter(paragraph) "N" counter(note) ")";
  font-size: small;
  vertical-align: super;
}

Вложенные счетчики

Что происходит, когда список вкладывается в другой список? Счётчик list-item инициализируется для каждого элемента <ul> или <ol> , и функция counter() возвращает только значение самого внутреннего счётчика. Чтобы отобразить счётчик для каждого из вложенных счётчиков, используйте функцию counters() , которая принимает имя счётчика и разделитель.

li::marker {
  content: counters(list-item, ".")
  }

Реверсивные счетчики

По умолчанию счетчики (включая неявный счетчик list-item для элементов <ol> ) начинаются с 0 и увеличиваются на единицу для каждого элемента, то есть первый элемент будет считаться как 1. Что делать, если вы хотите посчитать в обратном порядке до 1?

Для этого добавьте атрибут reversed к элементу <ol> . Если вы используете стандартный стиль списка, маркеры будут работать как надо. Однако, если вы используете пользовательский счётчик, вам потребуется установить для counter-increment отрицательное значение и вручную рассчитать начальное значение счётчика.