Автоматическая нумерация в CSS. Счетчики. Автоматическая нумерация в CSS Пример: Стили оформления маркированных списков

Нумерованные списки представляют собой набор элементов с их порядковыми номерами. Вид и тип нумерации зависит от параметров элемента

    , который и применяется для создания списка. В качестве нумерующих элементов могут выступать следующие значения:

    • арабские цифры (1, 2, 3, ...);
    • арабские цифры c нулём впереди для цифр меньше десяти (01, 02, 03, ...,10);
    • прописные латинские буквы (А, В, С, ...);
    • строчные латинские буквы (а, b, с, ...);
    • римские цифры в верхнем регистре (I, II, III, ...);
    • римские цифры в нижнем регистре (i, ii, iii, ...);
    • армянская нумерация;
    • грузинская нумерация.

    С практической точки зрения, принципы отображения элементов маркированного списка могут аналогичным способом применяться и к нумерованному списку. Но учитывая, что мы имеем дело с перечислением, существуют некоторые особенности, о которых и пойдёт речь далее.

    Нумерация списка

    Допускается начинать список с любого номера; для этой цели применяется атрибут start элемента

      или value у элемента
    1. . В качестве значения указывается любое целое положительное число. При этом неважно, какой тип нумерации установлен, даже если в качестве списка используются латинские буквы. Если одновременно для списка применяются атрибуты start и value , то последний имеет большее преимущество, и нумерация отображается с числа, указанного value , как показано в примере 1.

      Пример 1. Изменение нумерации списка

      Списки

      1. Следует тщательно позаботиться о своем рабочем месте.
      2. Освещение в помещении отрегулировать таким образом, чтобы источник света находился сбоку или сзади оператора.
      3. Bo избежание медицинских осложнений стул рекомендуется выбирать с мягким сидением.

      Первый элемент списка в данном примере будет начинаться с римской цифры IV, поскольку указан атрибут start="4" , затем идет номер V, а последний элемент следует не по порядку и назначается номером X (рис. 1).

      Рис. 1. Римские цифры в списке

      Написание чисел

      По умолчанию нумерованный список имеет определённый вид: вначале идет число, затем точка и после этого через пробел отображается текст. Такая форма написания наглядна и удобна, но некоторые разработчики предпочитают видеть другой способ оформления нумерации списков. А именно, чтобы вместо точки шла закрывающая скобка, как продемонстрировано на рис. 2 или нечто подобное.

      Рис. 2. Вид нумерованного списка со скобкой

      Стили позволяют поменять вид нумерации списков с помощью свойств content и counter-increment . Вначале для селектора ol требуется задать counter-reset : item , это нужно для того, чтобы нумерация в каждом новом списке начиналась заново. В противном случае, нумерация будет продолжена и вместо 1,2,3 можно будет увидеть 5,6,7. Значение item это уникальный идентификатор счётчика, мы его выбираем сами. Далее необходимо спрятать исходные маркеры через стилевое свойство list-style-type со значением none .

      Свойство content, как правило, работает в сочетании с псевдоэлементами ::after и ::before . Так, конструкция li::before говорит о том, что перед каждым элементом списка необходимо добавить какое-то содержание (пример 2).

      Пример 2. Создание своей нумерации

      Li::before { content: counter(item) ") "; /* Добавляем к числам скобку */ counter-increment: item; /* Задаём имя счетчика */ }

      Свойство content со значением counter(item) выводит число; добавляя скобку, как показано в данном примере, получим требуемый вид нумерации. counter-increment необходим для увеличения номера списка на единицу. Обратите внимание, что везде используется один и тот же идентификатор с именем item . Окончательный код показан в примере 3.

      Пример 3. Изменение вида списка

      Списки

      1. Первый
      2. Второй
      3. Третий
      4. Четвертый

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

      Content: "[" counter(item) "] ";

      Список с русскими буквами

      Нумерованный список есть с латинскими буквами, а вот русских букв для списка нет. Их можно добавить искусственно, воспользовавшись вышеприведённым приёмом. Поскольку нумерация делается через стили, сам список остаётся исходным, к нему лишь добавляется выбранный класс, назовём его cyrilic (пример 4).

      Пример 4. Код для создания списка

      1. Один
      2. Два
      3. Три

      Добавление букв осуществляется с помощью псевдоэлемента ::before и свойства content . Поскольку в каждой строке должна быть своя буква, воспользуемся псевдоклассом :nth-child(1) , в скобках пишется номер буквы. Первой буквой, естественно, идёт А, второй - Б, третьей - В и т. д. Весь этот набор добавляется к селектору li следующим образом (пример 5).

      Пример 5. Применение псевдокласса:nth-child

      Cyrilic li:nth-child(1)::before { content: "а)"; } .cyrilic li:nth-child(2)::before { content: "б)"; } .cyrilic li:nth-child(3)::before { content: "в)"; }

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

      Окончательно настраиваем выравнивание и положение букв, по желанию указываем размер шрифта, цвет и другие параметры (пример 6).

      Пример 6. Список с русскими буквами

      Список

      1. Борщ
      2. Котлеты из щуки
      3. Кулебяка
      4. Грибы в сметане
      5. Блины с икрой
      6. Квас

      Результат данного примера показан на рис. 3.

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

      Поработав со стандартными вложенными нумерованными списками HTML, каждый рано или поздно столкнётся с проблемой её несовершенства. Дело в том, что при вложении списка, нумерация вложенного списка снова и снова начинается с единицы. И при уровне вложенности от трёх и при длине списка более десяти начинаются проблемы с восприятием того, какой вложенный элемент, к какому родительскому элементу относится.

      Рассмотрим эту задачу на простом примере. В коде ниже элементы состоят из того, что бы хотелось видеть:

      1. 1.
      2. 2.
        1. 2.1.
        2. 2.2.
          1. 2.2.1.
            1. 2.2.1.1.
            2. 2.2.1.2.
          2. 2.2.2.
        3. 2.3.
        4. 2.4.
      3. 3.
      4. 4.
        1. 4.1.
        2. 4.2.
          1. 4.2.1.
            1. 4.2.1.1.
            2. 4.2.1.2.
          2. 4.2.2.
        3. 4.3.
        4. 4.4.

      Однако, при выводе такого HTML кода на экран получаем стандартный вывод нумерованного списка HTML, в котором все вложенные списки начинаются с 1 .

      На рисунке выше то, что представлено в начале элементов списка (не жирным текстом) - это автоматическая нумерация списка

        HTML. Правда неудобно?

        Для того, чтобы нумерация была правильной, интуитивно понятной, нужно чтобы каждый вложенный список начинался с цифры, обозначающий его уровень вложенности. И это можно сделать достаточно просто применив CSS:

        Ol { list-style: none; counter-reset: li; } li:before { counter-increment: li; content: counters(li,".") ". "; }

        Применив этот CSS-код к тегам

          и
        1. нумерованного списка получим то что нужно: правильно пронумерованный вложенный нумерованный список HTML:

          Формирование правильной нумерации во вложенном нумерованном списке HTML с помощью CSS

          Рассмотрим подробнее свойства элементов нумерованного списка HTML, которые можно модифицировать с помощью CSS.

          • list-style: none;
            • отменим все стили списка для элементов ol (если они вдруг были ранее назначены) с помощью свойства list-style
          • counter-reset: li;
            • назначим идентификатор li , в котором будет храниться счётчик отображений элемента ol с помощью свойства counter-reset
          • counter-increment: li;
            • обозначим идентификатор li как счётчик, который будет подсчитывать количество отображений элементов ol на странице и будет выводиться с помощью свойства content и псевдоэлемента:before для li
          • content: counters(li,".") ". ";
            • зададим последовательность вывода счётчика li для всех элементов нумерованного списка ol .

          Таким образом, изменив четыре свойства css двух элементов ol и li нумерованного списка можно получить красивый нумерованный список HTML, который легко воспринимается и более привычен нам, так как в нём наглядно прослеживается вложенность элементов и принадлежность к родительским элементам списка.

          HTML и CSS код нумерованного списка с правильной нумерацией

          Для того, чтобы проще было разобраться и применить описанные выше сведения, привожу полностью рабочий HTML и CSS код нумерованного списка с правильной нумерацией вложенных элементов:

          Правильная нумерация вложенных пунктов нумерованного списка в HTML с помощью css

          1. 1.
          2. 2.
            1. 2.1.
            2. 2.2.
              1. 2.2.1.
                1. 2.2.1.1.
                2. 2.2.1.2.
              2. 2.2.2.
            3. 2.3.
            4. 2.4.
          3. 3.
          4. 4.
            1. 4.1.
            2. 4.2.
              1. 4.2.1.
                1. 4.2.1.1.
                2. 4.2.1.2.
              2. 4.2.2.
            3. 4.3.
            4. 4.4.

          Спасибо за внимание! =D

          P.S. О том, как создать правильную нумерация в смешанных нумерованных и маркированных списках HTML с помощью CSS, можно прочитать в → этой статье . Приведено универсальное решение по созданию css-свойств для различных типов HTML-списков.

          HTML поддерживает списки трех разных типов, для каждоrо из которых предусмотрены свои собственные теrи:

            1. – нумерованный (с помощью цифр или букв) список, каждый элемент которого имеет порядковый номер (букву);
              • – маркированный (не нумерованный) список, рядом с каждым элементом которого помещается маркер (а не цифровые или буквенные символы, обозначающие порядковый номер);
              • – список определений состоит из пар «имя/значение», в том числе терминов и определений.

              Нумерованные списки

              В нумерованный список браузер автоматически вставляет номера элементов по порядку, начиная с некоторого значения (обычно 1). Это позволяет вставлять и удалять пункты списка, не нарушая нумерации, так как остальные номера автоматически будут пересчитаны.
              Нумерованные списки создаются с помощью блочного элемента

                (от англ. Ordered List – нумерованный список). Далее в контейнер
                  для каждого пункта списка помещается элемент
                1. (от англ. List Item – пункт списка). По умолчанию применяется нумерованный список с арабскими числами.
                  Тег
                    имеет следующий синтаксис:

                    1. элемент 1
                    2. элемент 2
                    3. элемент 3

                    Элементы нумерованного списка должны содержать несколько элементов списка, как показано в следующем примере:

                    Пример: Нумерованный список

                    • Попробуй сам »

                    Пошаговая инструкция

                    1. Достать ключ
                    2. Вставить ключ в замок
                    3. Повернуть ключ на два оборота
                    4. Достать ключ из замка
                    5. Открыть дверь

                    Пошаговая инструкция

                    1. Достать ключ
                    2. Вставить ключ в замок
                    3. Повернуть ключ на два оборота
                    4. Достать ключ из замка
                    5. Открыть дверь

                    Иногда при просмотре существующих кодов HTML вы будете встречать аргумент type в элементе

                      , который используется для указания типа нумерации (буквы, римские и арабские цифры и т.п.). Синтаксис:

                        Здесь: type – символы списка:

                        • A - прописные латинские буквы (A, B, C . . .);
                        • a - строчные латинские буквы (a, b, c . . .);
                        • I - большие римские цифры (I, II, III . . .);
                        • i - маленькие римские цифры (i, ii, iii . . .);
                        • 1 - арабские цифры (1, 2, 3 . . .) (применяется по умолчанию).

                        Если вы хотите, чтобы список начинался с номера, отличного от 1, следует указать это при помощи атрибута start тега

                          .
                          В следующем примере показан нумерованный список с большими римскими цифрами и начальным значением XLIX:

                          Нумерацию можно начинать и с помощью атрибута value , который добавляется к элементу

                        1. следующим образом:

                        2. В этом случае последовательная нумерация списка прервётся и с этого пункта нумерация начнётся заново, в данном случае с семи.

                          Пример использования атрибута value тега

                        3. , который позволяет изменить номер данного элемента списка:

                          В этом примере "Первый пункт списка" будет иметь номер 1, "Второй пункт списка" – номер 7, а "Третий пункт списка" – номер 8.

                          Форматирование нумерованных списков с помощью CSS

                          Для изменения номеров списков стоит использовать свойство list-style-type таблицы стилей CSS:

                            Стили оформления нумерованных списков
                            Пример Значение Описание
                            а, Ь, с lower-alpha Строчные буквы
                            А, В, С upper-alpha Прописные буквы
                            i, ii, iii lower-roman Римские цифры, набранные строчными буквами
                            I, II, III upper-roman Римские цифры, набранные прописными буквами

                            Пример: Применение свойства CSS list-style-type

                            Маркированные списки

                            Маркированные списки по сути похожи на нумерованные только они не содержат последовательной нумерации пунктов. Маркированные списки создаются с помощью блочного элемента

                              (от англ. Unordered List – ненумерованный список). Каждый элемент списка, как и в нумерованных списках, начинается с тега
                            • . Браузер формирует отступ для каждого пункта списка и автоматически отображает маркеры.
                              Тег
                                имеет следующий синтаксис:

                                • Первый пункт
                                • Второй пункт
                                • Третий пункт

                                В следующем примере видно, что, по умолчанию, перед каждым элементом списка добавляется небольшой маркер в виде закрашенного кружка:

                                Внутри тега

                              • не обязательно размещать только текст, допустимо поместить любой элемент потокового контента (ссылки, абзацы, изображения и др.)

                                Вложенные списки

                                Любой список может быть вложен в другой. Внутри элемента
                              • допустимо создание вложенного списка, или списка второго уровня. Для вложения списка опишите новый список внутри элемента
                              • уже имеющегося списка. При вложении одного маркированного списка в другой браузер автоматически меняет стиль маркера для списка второго уровня. Любой список может быть вложен в другой. Следующий пример демонстрирует структуру маркированного списка, вложенного во второй пункт нумерованного.

                                Пример: Вложенные списки

                                • Попробуй сам »
                                • Понедельник
                                  1. Отправить почту
                                  2. Визит к редактору
                                    • Выбор темы
                                    • Дкаративное оформление
                                    • Заключительный отчет
                                  3. Вечерний просмотр сообщений
                                • Вторник
                                  1. Пересмотреть график
                                  2. Отправить изображения
                                • Среда...

                                • Понедельник
                                  1. Отправить почту
                                  2. Визит к редактору
                                    • Выбор темы
                                    • Дкаративное оформление
                                    • Заключительный отчет
                                  3. Вечерний просмотр сообщений
                                • Вторник
                                  1. Пересмотреть график
                                  2. Отправить изображения
                                • Среда...

                                Форматирование маркированных списков

                                Для изменения внешнего вида маркера списков стоит использовать свойство list-style-type таблицы стилей CSS:

                                  В следующем примере рассмотрены различные стили оформления маркированных списков:

                                  Пример: Стили оформления маркированных списков

                                  • Попробуй сам »
                                  • Coffee
                                  • Coffee
                                  • Coffee
                                  • Coffee

                                  Disc:

                                  • Coffee
                                  • Milk

                                  Circle:

                                  • Coffee
                                  • Milk

                                  Square:

                                  • Coffee
                                  • Milk

                                  None:

                                  • Coffee
                                  • Milk

                                  Графические маркеры.

                                  В HTML есть возможность создать список с графическими маркерами. Одно дело, когда маркерами списка являются стандартные кружочки или квадратики, и совсем другое – когда разработчик сам подбирает маркер в соответствии с дизайном страницы. Для того, чтобы сделать элементы списка красивыми, часто используют маленькие картинки.
                                  Чтобы заменить обычный маркер на графический, заменим свойство list-style-type на свойство list-style-image и укажем URL–адрес картинки:

                                    Пример: Графические маркеры

                                    • Попробуй сам »

                                    Знаки зодиака

                                    • Телец
                                    • Близнeцы

                                    Знаки зодиака

                                    • Овен
                                    • Телец
                                    • Близнeцы

                                    Списки определений (описаний)

                                    Списки определений очень удобны для создания, например, вашего личного словаря терминов. У каждого пункта списка определений есть две части: термин и его определение.
                                    Вы помещаете весь список в элемент

                                    (от англ. Definition List – список определений). Он включает в себя теги
                                    (от англ. Definition Term – определяемое слово, термин) и
                                    (от англ. Definition Description – описание определяемого термина).
                                    Списки определений часто используют в научно-технических и учебных изданиях, оформляя с их помощью глоссарии, словари, справочники и т.д.

                                    Общая структура списка описаний имеет следующий вид:

                                    Первый термин
                                    Описание первого термина
                                    Второй термин
                                    Описание второго термина

                                    В следующем примере показано одно из возможных использований списка определений:

                                    Пример: Список определений

                                    • Попробуй сам »

                                    Всемирная паутина — от англ. World Wide Web (WWW) — распределённая система, предоставляющая доступ к связанным между собой документам, расположенным на различных компьютерах, подключенных к Интернету. Интернет — совокупность сетей, применяющих единый протокол обмена для передачи информации. Сайт — набор отдельных веб-страниц, которые связаны между собой ссылками и единым оформлением.

                                    Всемирная паутина
                                    — от англ. World Wide Web (WWW) — распределённая система, предоставляющая доступ к связанным между собой документам, расположенным на различных компьютерах, подключенных к Интернету.
                                    Интернет
                                    — совокупность сетей, применяющих единый протокол обмена для передачи информации.
                                    Сайт
                                    — набор отдельных веб-страниц, которые связаны между собой ссылками и единым оформлением.

                                    По-умолчанию, текст термина прижимается к левому краю окна браузера, а описание термина располагается ниже и сдвигается вправо.

                                    При необходимости нумерации чего-либо на сайте чаще всего используют упорядоченный список (

                                      ). Резонно ожидать, что может возникнуть желание поработать над дизайном этих чисел. В СSS, однако, реализовать это желание довольно проблематично, но, к счастью, не невозможно. В своем руководстве Roger Johansson показывает, как это может быть реализовано с помощью псевдоэлемента:before , который для свойства content может иметь значение counter .

                                      Псевдоэлемент:before применяется для отображения желаемого контента до элемента, к которому он добавляется. Работает совместно со свойством content .

                                      Стоит прояснить, однако, что пронумерованные счетчики (counters) можно применять не только к упорядоченным спискам. К примеру, предположим, что вы захотели пронумеровать список определений (

                                      ), который состоит из вопросов и ответов для вашего FAQ.

                                      Разметка будет выглядеть приблизительно так:

                                      How much wood would a wood chuck chuck if a wood chuck could chuck wood?
                                      1,000,000
                                      What is the air-speed velocity of an unladen swallow?
                                      What do you mean? An African or European swallow?
                                      Why did the chicken cross the road?
                                      To get to the other side

                                      Каждый новый

                                      элемент это новый вопрос, поэтому к ним и применим нумерацию. Выглядеть это будет предельно просто:

                                      Свойство content позволяет вставлять генерируемое содержание в текст веб-страницы, которое первоначально в тексте отсутствует.
                                      Значение counter Выводит значение счетчика, заданного свойством counter-reset .

                                      Свойство counter-reset устанавливает идентификатор для счетчика и задает начальное значение.
                                      Свойство counter-increment задает шаг увеличения значения счетчика.

                                      Faq { counter-reset: my-badass-counter; } .faq dt:before { content: counter(my-badass-counter); counter-increment: my-badass-counter; }

                                      Псевдоэлементу:before можно назначить любые стили. Например:

                                      Освоив это свойство, можно нумеровать все, что только захочется. На днях, к примеру, я выложил один из моих любимых рецептов и пронумеровал каждый шаг/фото римскими цифрами. Это послужило для меня напоминанием: числа необязательно должны быть десятичными.

                                      Числовое многообразие представлено в виде значений свойства list-style-type .
                                      А именно:

                                      Все, что требуется, так это указать желаемый вариант в значении счетчика.

                                      Content: counter(my-counter, lower-roman);

                                      Будущее CSS3

                                      Вышеописанный материал актуален для сегодняшнего дня, однако и он меркнет в сравнении с теми возможностями, которые скрыты CSS3 списках. Как только в браузерах будет реализована их поддержка, можно будет, к примеру, работать с маркерами списков напрямую.

                                      Li::marker { width: 30px; text-align: right; margin-right: 10px; display: inline-block; } ol { list-style: symbols("*""2020""2021""A7"); } ul { list-style-type: "тут должна быть звездочка)"; }

                                      От автора: Веб-браузеры позволяют вам изменить внешний вид многих элементов на странице с помощью CSS. Но при отрисовке некоторых элементов на странице, браузеры упорно не хотят изменять их оформление. Например, такие элементы формы, как выпадающие списки (select), радиокнопки (radio) и чекбоксы (checkbox) имеют свой определенный внешний вид в каждой операционной системе, и браузеры стараются навязать этот вид для веб-форм.

                                      Веб-браузеры также указывают, каким образом должны отображаться ненумерованные и нумерованные списки. Например, из-за браузеров очень сложно изменить внешний вид маркеров у ненумерованных списков и чисел у нумерованных списков. Конечно, существует несколько CSS свойств для работы со списками, например, list-style-type, list-style-image и list-style-position. Но даже для того чтобы сделать что-то простое (например, изменить цвет у чисел списка), потребуется прибегнуть к изощренным обходным путям в HTML/CSS.

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

                                      Весь секрет состоит из двух составляющих: во-первых, полностью спрятать стандартные (по умолчанию) числа у нумерованного списка, а во-вторых, использовать псевдо-элемент::before, чтобы добавить эти числа обратно.

                                      1. Добавляем класс или идентификатор (ID) для нумерованного списка . Это хорошая идея, позволяющая вам идентифицировать в дальнейшем каждый список, для которого вы захотите создать свои счетчики:

                                      1. Это первый элемент
                                      2. Это второй элемент
                                      3. Это третий элемент
                                      4. Это четвертый элемент
                                      5. Это пятый элемент
                                      6. Это шестой элемент

                                      < ol class = "custom-counter" >

                                      < / ol >

                                      Если вы просто будете использовать селекторы тегов, например, ol или li, то, в конечном счете, у вас будут одинаковые, с одним и тем же внешним оформлением, счетчики для всех нумерованных списков на странице.

                                      2. Отменяем вид у маркера списка по умолчанию . Сначала, вам нужно удостовериться в том, что браузер не будет добавлять стандартное оформление для счетчиков. Сделать это вам поможет следующее правило:

                                      Custom-counter { margin-left: 0; padding-right: 0; list-style-type: none; }

                                      Custom - counter {

                                      margin - left : 0 ;

                                      padding - right : 0 ;

                                      list - style - type : none ;

                                      Это правило также убирает отступ, который браузеры добавляют в начале нумерованных списков. Поскольку некоторые браузеры используют для отступов свойство margin, а другие – padding, вам необходимо обнулить оба этих свойства.

                                      3. Задайте имя для свойства counter-increment у элементов списка . В CSS есть свойство, которое называется counter-increment. Оно позволяет задать имя для вашего счетчика. Это не дает нам ничего особенного, за исключением того, что мы сможем идентифицировать наш счетчик при использовании псевдо-элемента::before (что мы и сделаем в следующем шаге). Вот простой пример кода для указания имени счетчика:

                                      Custom-counter li { counter-increment: step-counter; }

                                      Custom - counter li {

                                      counter - increment : step - counter ;

                                      В этом примере, имя step-counter не обозначает ничего особенного. Оно не является ни значением для CSS свойства, ни чем-либо другим. Это просто имя, которое мы будем использовать в дальнейшем. Вы можете придумать любое имя: step, counter, или даже bottles-of-root-beer-on-the-wall (прим. пер.: бутылки из под рутбира (пиво из корнеплодов) на стене).

                                      4. Используйте псевдо-элемент::before для добавления чисел счетчика и их стилизации :

                                      Custom-counter li::before { content: counter(step-counter); margin-right: 5px; font-size: 80%; background-color: rgb(200,200,200); color: white; font-weight: bold; padding: 3px 8px; border-radius: 3px; }

                                      Custom - counter li :: before {

                                      content : counter (step - counter ) ;

                                      margin - right : 5px ;

                                      padding : 3px 8px ;

                                      border - radius : 3px ;

                                      Псевдо-элемент::before позволяет вам вставить контент перед элементом. В нашем случае он вставит контент перед элементом списка. Вы используете CSS свойство content, чтобы сообщить браузеру, какой контент он должен поместить в начало элемента списка. Это могут быть реальные слова или что-то автоматически сгенерированное браузером.

                                      Здесь мы используем значение counter(), которое использует в качестве параметра идентификатор, полученный из свойства counter-increment. Помните, что в шаге 2, мы указали имя step-counter для свойства counter-increment, задав тем самым имя для счетчика и сообщая браузеру о том, что нужно использовать счетчик для каждого элемента списка. Счетчик будет увеличиваться на единицу для каждого элемента списка, т.е. в результате у нас появится число 1 перед первым элементом списка, число 2 перед вторым элементом списка и т.д.

                                      Конечно, обычно браузеры так и поступают. Однако, используя псевдо-элемент::before мы также можем задать стилевое оформление для этих чисел, что было бы невозможно для стандартных нумерованных элементов списка. По сути, все остальные свойства в вышеприведенном правиле используются для того, чтобы просто создать классный внешний вид для счетчика (например, фоновый цвет, скругленные углы, другой цвет шрифта и т.д.). Эти стили демонстрируют лишь некоторые способы изменения внешнего оформления чисел у нумерованных списков. А вы можете сделать еще больше, поэтому не стесняйтесь использовать известные вам CSS приемы, чтобы создать интересные, забавные и красивые нумерованные списки.

                                      Вы можете посмотреть готовый работающий пример использования данной техники на сайте