Маркированный список. Вложенные списки с автоматической нумерацией

Списки активно используются для автоматической нумерации блоков контента. Однако при использовании вложенных списков нельзя получить нумерацию подпунктов типа 1.1, 1.2, 1.3, поскольку каждый список будет независимым. Но то, что нельзя в ШТМЛ, можно возложить на стили.

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

    , а элементы списка формируются тегами
  1. . Вложенный список также начинается с
      , но этот тег должен располагаться внутри контейнера
    1. , именно так соблюдается корректность синтаксиса (пример 1).

      Пример 1. Обычный вложенный список





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



      1. Пункт 1

        1. Подпункт 1.1

        2. Подпункт 1.2

        3. Подпункт 1.3



      2. Пункт 2

        1. Подпункт 2.1

        2. Подпункт 2.2





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

      Рис. 1. Вид вложенного списка

      Теперь уберем встроенную нумерацию списков и создадим ее по новой, но уже в том виде, что нам требуется. Для этого понадобится три стилевых атрибута: counter-reset , counter-increment и content .

      counter-reset — задает некоторую переменную, которая будет хранить значение счетчика;

      counter-increment — увеличивает или уменьшает значение счетчика на указанное число;

      content — выводит значение счетчика при использовании аргумента counter(переменная) . Работает совместно с псевдоэлементами after или before .

      Для списка первого уровня переменную счетчика назовем list1 , а для второго уровня — list2 . Тогда инициация счетчиков для списков будет следующей.

      OL { counter-reset: list1; } /* Список первого уровня */
      OL OL { counter-reset: list2; } /* Список второго уровня*/

      В данном случае отделить вложенный список от внешнего помогают конконтентные селекторы. Конструкция OL OL означает применять стиль только к тегу

        , но только когда он располагается внутри другого тега
          .

          Увеличение значения счетчика происходит через селектор OL LI:before , к которому добавляются стилевые атрибуты counter-increment и content . Атрибут counter-increment со значением list1 повышает значение этого счетчика на единицу, а content: counter(list1) ". " выводит значение счетчика перед пунктом списка. Эти атрибуты работают в паре, поэтому включать их надо одновременно.

          OL LI:before { /* Список первого уровня */
          counter-increment: list1;
          /* Выводим значение в виде 1., 2.*/
          }
          OL OL LI:before { /* Список второго уровня */
          counter-increment: list2; /* Увеличиваем значение счетчика */
          }

          Для вложенного списка вновь применяем конконтентные селекторы (OL OL ) и одновременно используем вывод счетчика list1 и list2 , в этом случае мы и получим нумерацию нужного нам вида.

          Окончательный код приведен в примере 2.

          Пример 2. Вложенные списки с автонумерацией





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




          1. Пункт

            1. Подпункт

            2. Подпункт

            3. Подпункт



          2. Пункт

            1. Подпункт

            2. Подпункт





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

          Рис. 2. Вид автонумерации списка в браузере Опера

          Замечание

          Приведенный пример не работает в браузере Internet Эксплорер до 7 версии включительно, поскольку он не поддерживает ни одно из приведенных стилевых свойств.

          Поскольку браузер Internet Эксплорер не поддерживает множество интересных стилевых атрибутов, специально для него обычную нумерацию в списках следует оставить нетронутой. Для этого дастаткова убрать list-style-type: none . Но это также затронет и другие браузеры, в которых пример работает корректно, поэтому придется применить хаком — так имеется ввиду прием, когда разным браузерам дается разный стилевой код. Например, можно применить тегом !important . При добавлении !important к значению стилевого атрибута его важность повышается. Если заново определить значение того же атрибута без !important , он будет игнорироваться браузерами. Но только не в Intenet Explorer версии 6 и ниже.

          LI {
          list-style-type: none !important; /* Убираем нумерацию в браузерах Опера, Safari, Файер фох */
          list-style-type: decimal; /* Оставляем нумерацию в браузере ИЕ6 и ниже */
          }

          Заменяя этим кoдам строку с селектором LI в примере 2 получим вложенный список корректно работающий во всех браузерах.

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

            , который и применяется для создания списка. Каждый пункт нумерованного списка обозначается тегом
          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. Важен ли порядок элементов списка?
                    • Если да, используйте упорядоченный список.
                    • Если нет, используйте неупорядоченный список.

                  Различие между списками HTML и текстом

                  Можно задаться вопросом, в чем различие между списком HTML и каким-то текстом с маркерами или числами, написанными вручную. Существует несколько преимуществ использования списка HTML :

                  • Если потребуется изменить порядок элементов списка в упорядоченном списке, то вы просто перемещаете их в коде HTML . Если числа будут написаны вручную, то придется все просмотреть и изменить число каждого элемента, чтобы исправить порядок - что достаточно скучно, по крайней мере!
                  • Использование списка HTML позволяет правильно оформить стиль списка. Если используется просто большой текст, то окажется значительно труднее оформить стиль отдельных элементов каким-либо более-менее полезным образом.
                  • Использование списка HTML создает для контента подходящую семантическую структуру, а не просто "спискообразный" визуальный эффект. Это имеет важные преимущества, так как позволяет считывателям экрана сообщить пользователям с недостатками зрения, что они читают список, а не просто прочитать путаную смесь текста и чисел.

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

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

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

                  1. Глава один 1. Раздел один 2. Раздел два 3. Раздел три 2. Глава два 3. Глава три

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

                  1. Глава один
                    1. Раздел один
                    2. Раздел два
                    3. Раздел три
                  2. Глава два
                  3. Глава три

                  Отметим, что вложенный список начинается после элемента

                1. и текста, содержащего список элемента ("Глава один"); а заканчивается перед элементом
                2. , содержащего список элемента. Вложенные списки часто формируют основу для навигационного меню Web -сайта, так как они являются удобным способом определения структуры Web -сайта.

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

                  Пошаговый пример

                  Давайте рассмотрим пошаговый пример, чтобы собрать все это вместе. Рассмотрим следующий сценарий :

                  Мы создаем небольшой Web - сайт для Кулинарной школы. На основной странице мы покажем список классифицированных рецептов, связанный ссылками со страницами рецептов. Каждая страница рецепта перечисляет требуемые ингредиенты, замечания по этим ингредиентам и метод приготовления. Тремя категориями являются "Cakes" (включающая рецепты для "Plain Sponge ", "Chocolate Cake" и "Apple Tea Cake"); "Biscuits" (включающая рецепты "ANZAC Biscuits", " Jam Drops" и "Melting Moments "); и "Quickbreads" (включающая рецепты для "Damper" и "Scones"). Клиенту все равно в каком порядке будут выводиться категории и рецепты, он просто хочет, чтобы люди понимали, какие позиции являются категориями, а какие являются рецептами.Имеется три категории рецептов для представления, и порядок не важен - для этого больше всего подходит неупорядоченный список, поэтому добавим на страницу следующий код:

                  Recipes

                  • Cakes
                  • Biscuits
                  • Quickbreads

                  Отступ для элементов li делает код удобнее для чтения, но не является обязательным.

                  Теперь нужно добавить рецепты в качестве подпунктов, например, "Plain Sponge ", "Chocolate Cake" и "Apple Tea Cake" являются частью категории "Cakes". Для этого необходимо в каждой позиции списка создать вложенный список. Так как порядок неважен, то снова подходит неупорядоченный список. Чтобы упростить материал для учебного руководства, все рецепты можно соединить с одной страницей рецептов:

                  Recipes

                  • Cakes
                    • Plain Sponge
                    • Chocolate Cake
                    • Apple Tea Cake
                  • Biscuits
                    • ANZAC Biscuits
                    • Jam Drops
                    • Melting Moments
                  • Breads/quickbreads
                    • Damper
                    • Scones

                  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. Многоуровневый нумерованный список