Правильная нумерация во вложенных нумерованных списках HTML с помощью CSS. Нумерованный список Стандартные маркеры для нумерованного списка

HTML-списки используются для группировки связанных между собой фрагментов информации. Существует три вида списков:

маркированный список

    — каждый элемент списка
  • отмечается маркером,
    нумерованный список
      — каждый элемент списка
    1. отмечается цифрой,
      список определений — — состоит из пар термин
      определение.

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

      Создание HTML-списков

      1. Маркированный список

      Маркированный список представляет собой неупорядоченный список (от англ. Unordered List) . Создаётся с помощью парного тега

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

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

      Каждый элемент списка создаётся с помощью парного тега

    2. (от англ. List Item) .
      доступны .
    • Microsoft
    • Google
    • Apple
    Рис. 1. Маркированный список

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

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

  • . Браузер нумерует элементы по порядку автоматически и если удалить один или несколько элементов такого списка, то остальные номера будут автоматически пересчитаны.

    Блок списка также имеет стили браузера по умолчанию:

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

    Для тега

      доступны следующие атрибуты:

      Таблица 1. Атрибуты тега
      Атрибут Описание, принимаемое значение
      reversed Атрибут reversed задает отображение списка в обратном порядке (например, 9, 8, 7…).
      start Атрибут start задает начальное значение, от которого пойдет отсчет нумерации, например, конструкция
        первому пункту присвоит порядковый номер «10». Также можно одновременно задавать тип нумерации, например,
          .
      type Атрибут type задает вид маркера для использования в списке (в виде букв или цифр). Принимаемые значения:
      1 — значение по умолчанию, десятичная нумерация.
      A — нумерация списка в алфавитном порядке, заглавные буквы (A, B, C, D).
      a — нумерация списка в алфавитном порядке, строчные буквы (a, b, c, d).
      I — нумерация римскими заглавными цифрами (I, II, III, IV).
      i — нумерация римскими строчными цифрами (i, ii, iii, iv).
      1. Microsoft
      2. Google
      3. Apple
      Рис. 2. Нумерованный список

      3. Список определений

      Списки определений создаются с помощью тега

      . Для добавления термина применяется тег
      , а для вставки определения — тег
      .

      Блок списка определений имеет следующие стили браузера по умолчанию:

      Для тегов

      ,
      и
      доступны .

      Режиссер:
      Петр Точилин
      В ролях:
      Андрей Гайдулян
      Алексей Гаврилов
      Виталий Гогунский
      Мария Кожевникова

      Рис. 3. Список определений

      4. Вложенный список

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

      • Пункт 1.
      • Пункт 2.
        • Подпункт 2.1.
        • Подпункт 2.2.
          • Подпункт 2.2.1.
          • Подпункт 2.2.2.
        • Подпункт 2.3.
      • Пункт 3.

      Рис. 4. Вложенный список

      5. Многоуровневый нумерованный список

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

      1. пункт
      2. пункт
        1. пункт
        2. пункт
        3. пункт
          1. пункт
          2. пункт
          3. пункт
        4. пункт
      3. пункт
      4. пункт

      Такая разметка по умолчанию создаст для каждого вложенного списка новую нумерацию, начинающуюся с единицы. Чтобы сделать вложенную нумерацию, нужно использовать следующие свойства:
      counter-reset сбрасывает один или несколько счётчиков, задавая значение для сброса;
      counter-increment задаёт значение приращения счётчика, т.е. с каким шагом будет нумероваться каждый последующий пункт;
      content — генерируемое содержимое, в данном случае отвечает за вывод номера перед каждым пунктом списка.

      Ol { /* убираем стандартную нумерацию */ list-style: none; /* Идентифицируем счетчик и даем ему имя li. Значение счетчика не указано - по умолчанию оно равно 0 */ counter-reset: li; } li:before { /* Определяем элемент, который будет нумероваться — li. Псевдоэлемент before указывает, что содержимое, вставляемое при помощи свойства content, будет располагаться перед пунктами списка. Здесь же устанавливается значение приращения счетчика (по умолчанию равно 1). */ counter-increment: li; /* С помощью свойства content выводится номер пункта списка. counters() означает, что генерируемый текст представляет собой значения всех счетчиков с таким именем. Точка в кавычках добавляет разделяющую точку между цифрами, а точка с пробелом добавляется перед содержимым каждого пункта списка */ content: counters(li,".") ". "; }
      Рис. 5. Многоуровневый нумерованный список

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

    , который и применяется для создания списка. Каждый пункт нумерованного списка обозначается тегом
  1. , как показано ниже.

    1. Первый пункт
    2. Второй пункт
    3. Третий пункт

    Если не указывать никаких дополнительных атрибутов и просто написать тег

      , то по умолчанию применяется список с арабскими числами (1, 2, 3,...), как показано в примере 11.3.

      Пример 11.3. Создание нумерованного списка

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

      Работа со временем

      1. создание пунктуальности (никогда не будете никуда опаздывать);
      2. излечение от пунктуальности (никогда никуда не будете торопиться);
      3. изменение восприятия времени и часов.

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

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

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

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

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

      Для указания типа нумерованного списка применяется атрибут type тега

        . Его возможные значения приведены в табл. 11.2.

        Табл. 11.2. Типы нумерованного списка
        Тип списка Код HTML Пример
        Арабские числа

        1. Чебурашка
        2. Крокодил Гена
        3. Шапокляк
        Прописные буквы латинского алфавита

        A. Чебурашка
        B. Крокодил Гена
        C. Шапокляк
        Строчные буквы латинского алфавита

        a. Чебурашка
        b. Крокодил Гена
        c. Шапокляк
        Римские числа в верхнем регистре

        I. Чебурашка
        II. Крокодил Гена
        III. Шапокляк
        Римские числа в нижнем регистре

        i. Чебурашка
        ii. Крокодил Гена
        iii. Шапокляк

        Чтобы начать список с определенного значения, используется атрибут start тега

          . При этом не имеет значения, какой тип списка установлен с помощью type , атрибут start одинаково работает и с римскими и с арабскими числами. В примере 11.4 показано создание списка с использованием римских цифр в верхнем регистре, начинающихся с восьми.

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

          Римские числа

          1. Король Магнум XLIV
          2. Король Зигфрид XVI
          3. Король Сигизмунд XXI
          4. Король Хусбрандт I

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

          Рис. 11.4. Нумерованный список с римскими числами

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

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

            • арабские цифры (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-списков.