Введение в стандарты Web

Списки HTML

Разбить на страницы
Показывать лекцию целиком

Введение

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

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

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

  • Три типа списков
  • Неупорядоченные списки
  • Упорядоченные списки
  • Разметка упорядоченного списка
  • Начало упорядоченных списков с числа, отличного от 1
  • Списки определений
  • Выбор типа списка
  • Различие между списками HTML и текстом
  • Вложенные списки
  • Пошаговый пример
  • Разметка основной страницы
  • Добавление некоторых стилей
  • Страница рецептов
  • Разметка страницы рецептов
  • Оформление страницы рецептов
  • Заключение
  • Дополнительное чтение
  • Контрольные вопросы
  • Три типа списков

    В HTML имеется три типа списков:

  • Неупорядоченный список - используется для объединения в группу множества связанных объектов без определенного порядка.
  • Упорядоченный список - используется для объединения в группу множества связанных объектов в определенном порядке.
  • Список определений - используется для вывода пар имя/значение, таких как термины и их определения, или время и события.
  • Каждый из них имеет определенное назначение - они не являются взаимозаменяемыми!

    Неупорядоченные списки

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

  • молоко
  • хлеб
  • сливочное масло
  • кофейные зерна
  • Однако все эти объекты являются частью одного списка, можно разместить объекты в любом порядке и список будет по-прежнему иметь смысл:

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

    Разметка неупорядоченного списка

    Неупорядоченные списки используют одну пару тегов <ul></ul>, охватывающих множество пар тегов <li></li>:

    <ul>
      <li>хлеб </li>
      <li>кофе в зернах </li>
      <li>молоко </li>
      <li>масло </li>
    </ul>

    Упорядоченные списки

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

  • Собрать ингредиенты
  • Смешать ингредиенты
  • Поместить ингредиенты в форму для выпечки
  • Выпекать в духовке в течение часа
  • Вынуть из духовки
  • Дать постоять десять минут
  • Подать
  • Если список позиций переставить в другом порядке, то информация больше не будет иметь смысл:

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

  • Буквы
  • Буквы ascii нижнего регистра (a, b, c…)
  • Буквы ascii верхнего регистра (A, B, C…)
  • Классические греческие буквы нижнего регистра: ( $$\alpha$$, $$\beta$$, $$\gamma$$ …)
  • Числа
  • Десятичные числа (1, 2, 3…)
  • Десятичные числа с ведущим нулем (01, 02, 03…)
  • Римские числа в нижнем регистре (i, ii, iii…)
  • Римские числа в верхнем регистре (I, II, III…)
  • Традиционная грузинская нумерация (an, ban, gan…)
  • Традиционная армянская нумерация (mek, yerku, yerek…)
  • Здесь также можно использовать CSS для изменения стиля списков.

    Разметка упорядоченного списка

    Упорядоченные списки используют одну пару тегов <ol></ol>, охватывающих множество пар тегов <li></li>:

    <ol>
      <li>Собрать ингредиенты</li>
      <li>Смешать ингредиенты</li>
      <li>Поместить ингредиенты в форму для выпечки </li>
      <li>Выпекать в духовке в течение часа </li>
      <li>Вынуть из духовки</li>
      <li>Дать постоять десять минут </li>
      <li>Подать</li>
    </ol>

    Начало упорядоченных списков с числа, отличного от 1

    Можно создать упорядоченный список, нумерация которого начинается с числа отличного от 1 (или i, или I, и т.д.). Это делается с помощью атрибута start, который получает числовое значение, даже если используется CSS для изменения нумерации списка на алфавитную или римскую с помощью свойства list-style-type. Это будет полезно, если имеется единый список объектов, но вы хотите разбить список некоторыми примечаниями, или некоторой другой подходящей информацией. Например, можно было бы сделать это с предыдущим примером:

    <ol>
      <li>Собрать ингредиенты </li>
      <li>Смешать ингредиенты </li>
      <li>Поместить ингредиенты в форму для выпечки </li>
    </ol>
    
    <p class="note">Прежде чем поместить ингредиенты в форму для выпечки, 
      нагрейте духовку до 180 градусов по Цельсию /350 градусов по Фаренгейту, 
       чтобы быть готовым к следующему шагу </p>
    
    <ol start="4">
      <li> Выпекать в духовке в течение часа </li>
      <li> Вынуть из духовки </li>
      <li> Дать постоять десять минут </li>
      <li> Подать </li>
    </ol>

    Это приводит к следующему результату:

  • Собрать ингредиенты
  • Смешать ингредиенты
  • Поместить ингредиенты в форму для выпечкиПрежде чем поместить ингредиенты в форму для выпечки, нагрейте духовку до 180 градусов по Цельсию /350 градусов по Фаренгейту, чтобы быть готовым к следующему шагу
  • Выпекать в духовке в течение часа
  • Вынуть из духовки
  • Дать постоять десять минут
  • Подать
  • Отметим, что этот атрибут является фактически исключенным в самой последней версии спецификации HTML, что означает, что страницы не пройдут валидацию при использовании строгого ) подтверждает это). Если вы хотите использовать такую возможность на строгой странице HTML 4, и она должна обязательно пройти валидацию, можно сделать это с помощью CSS Counters.

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

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

    молоко
         Белый жидкий молочный продукт. 
    хлеб
         Продукт питания, получаемый выпечкой из муки. 
    сливочное масло 
         желтый твердый молочный продукт. 
    кофейные зерна 
         Семена плодов некоторых кофейных деревьев.

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

    Можно ассоциировать более одного термина с одним определением, или наоборот. Например, термин "кофе" может иметь несколько значений, и можно показать их одно за другим:

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

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

    содовая
    шипучка 
    газировка 
    кола 
          Сладкий, насыщенный углекислым газом, напиток

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

    Поэтому списки определений используют одну пару элементов <dl></dl>, охватывающую группы тегов <dt></dt> и <dd></dd>. Необходимо располагать парами как минимум одну группу тегов <dt></dt> с одной группой <dd></dd> ; теги <dt></dt> должны всегда быть первыми по порядку.

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

    <dl>
      <dt>Термин </dt>
      <dd>Определение термина </dd>
      <dt>Термин </dt>
      <dd>Определение термина </dd>
      <dt>Термин </dt>
      <dd>Определение термина </dd>
    </dl>

    Который выводится следующим образом:

    Термин 
         Определение термина 
    Термин 
         Определение термина 
    Термин 
         Определение термина

    В этом примере мы соединяем более одного термина с определением и наоборот:

    <dl>
      <dt>Термин </dt>
      <dd>Определение термина </dd>
      <dt>Термин </dt>
      <dt>Термин </dt>
      <dd>Определение которое применяется к обоим предыдущим терминам </dd>
      <dt>Термин, который может иметь оба следующие определения </dt>
      <dd>Одно определение термина </dd>
      <dd>Другое определение термина </dd>
    </dl>

    Что будет представлено следующим образом:

    Термин 
         Определение термина 
    Термин 
    Термин 
         Определение которое применяется к обоим предыдущим терминам 
    Термин, который может иметь оба следующие определения 
         Одно определение термина 
         Другое определение термина

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

    Выбор типа списка

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

  • Определяются термины (или соединяются другие пары имя/значение)?
  • Если да, используйте список определений.
  • Если нет, не используйте список определений - перейдите к следующему вопросу.
  • Важен ли порядок элементов списка?
  • Если да, используйте упорядоченный список.
  • Если нет, используйте неупорядоченный список.
  • Различие между списками HTML и текстом

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

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

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

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

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

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

    <ol>
    <li>Глава один
    <ol>
    <li>Раздел один </li>
    <li>Раздел два </li>
    <li>Раздел три </li>
    </ol>
    </li>
    <li>Глава два </li>
    <li>Глава три  </li>
    </ol>

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

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

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

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

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

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

    Разметка основной страницы

    Создайте правильно сформированную страницу HTML, включая doctype, элементы html , head и body, и сохраните его как stepbystep-main.html. Добавьте основной заголовок ( h1 ) " HTML Cooking School", и подзаголовок ( h2 ) "Recipes":

    <h1>HTML Cooking School</h1>
    <h2>Recipes</h2>

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

    <h2>Recipes</h2>
    <ul>
    <li>Cakes</li>
    <li>Biscuits</li>
    <li>Quickbreads</li>
    </ul>

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

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

    <h2>Recipes</h2>
    <ul>
    <li>Cakes
    <ul>
    <li><a href="stepbystep-recipe.html">Plain Sponge</a></li>
    <li><a href="stepbystep-recipe.html">Chocolate Cake</a></li>
    <li><a href="stepbystep-recipe.html">Apple Tea Cake</a></li>
    </ul>
    </li>
    <li>Biscuits
    <ul>
    <li><a href="stepbystep-recipe.html">ANZAC Biscuits</a></li>
    <li><a href="stepbystep-recipe.html">Jam Drops</a></li>
    <li><a href="stepbystep-recipe.html">Melting Moments</a></li>
    </ul>
    </li>
    <li>Breads/quickbreads
    <ul>
    <li><a href="stepbystep-recipe.html">Damper</a></li>
    <li><a href="stepbystep-recipe.html">Scones</a></li>
    </ul>
    </li>
    </ul>

    Добавление некоторых стилей

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

  • Чтобы избежать столкновения с другими списками на сайте, необходимо добавить class в охватывающий список, чтобы можно было делать специфические контекстные селекторы в таблице стилей. Класс "recipe-list" кажется подходящим:
    <h2>Recipes</h2>
    <ul class="recipe-list">
  • Теперь необходимо создать таблицу стилей, и добавить в нее несколько правил — сначала добавим открывающий и закрывающий теги style в заголовок ( head ) документа.
  • Затем удалим пробелы из охватывающего списка. По умолчанию некоторые браузеры используют поля ( margin ), а некоторые используют заполнение ( padding ) для разделения элементов, поэтому нужно задать оба эти значения равными нулю - добавьте следующее между тегами style:
    ul.recipe-list {
      margin-left: 0;
      padding-left: 0;
    }
  • Затем создадим специальное изображение маркера - можно использовать, например, такой (см. рис 16.1(рис 16.1) Изображение специального маркера
  • Теперь мы удалим маркеры из элементов списка и зададим маркер как фоновое изображение для элементов списка, добавляя некоторое заполнение, чтобы текст не располагался поверх фонового изображения. Это можно сделать, добавляя следующий CSS сразу перед закрывающим тегом style:

    ul.recipe-list li {
      list-style-type: none;
      background: #fff url("example-bullet.gif") 0 0.4em no-repeat;
      padding-left: 10px;
    }

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

    ul.recipe-list li li {
      list-style-type: disc;
      background: #fff;
      }

    Окончательный результат должен быть похож на рисунок 16.2:

    (рис 16.2) Законченная основная страница со специальными изображениями маркеров

    Можно также увидеть живой пример страницы здесь (http://dev.opera.com/articles/view/16-html-lists/stepbystep-main.html).

    Страница рецепта

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

    Клиент предоставил рецепт sponge в текстовом файле, который выглядит следующим образом:

    Simple Sponge Cake
    Ingredients
    3 eggs
    100g castor sugar
    85g self-raising flour
    
    Notes on ingredients:
      Caster Sugar - Finely granulated white sugar.
      Self-raising flour - A pre-mixed combination of flour and leavening agents (usually salt and baking powder).
    
    Method
      1. Preheat the oven to 190°C.
      2. Grease a 20cm round cake pan.
      3. In a medium bowl, whip together the eggs and castor sugar until fluffy.
      4. Fold in flour.
      5. Pour mixture into the prepared pan.
      6. Bake for 20 minutes in the preheated oven, or until the top of the cake springs back when lightly pressed.
      7. Cool in the pan over a wire rack.

    Разметка страницы рецепта

    Создайте другой правильно сформированный документ HTML, и сохраните его как stepbystep-recipe.html. Добавьте следующие заголовки.

    <h1>Simple Sponge Cake</h1>
    <h2>Ingredients</h2>
    <h3>Notes on ingredients</h3>
    <h2>Method</h2>

    Список ингредиентов содержит несколько позиций, но порядок не имеет значения. Поэтому имеет смысл использовать неупорядоченный список. Добавьте следующий код в тело ( body ) документа HTML:

    <h2>Ingredients</h2>
      <ul>
    <li>3 eggs</li>
    <li>100g castor sugar</li>
    <li>85g self-raising flour</li>
    </ul>

    Замечания по ингредиентам ( notes on the ingredients ) присутствуют для уточнения, что из себя представляют ингредиенты. Необходимо связать ингредиент — термин — с его определением. Список определений как раз подходит для этой цели. Добавьте следующий код в документ HTML, ниже неупорядоченного списка предыдущего шага:

    <h3>Notes on ingredients</h3>
      <dl>
    <dt>Castor Sugar</dt>
    <dd>Finely granulated white sugar.</dd>
    <dt>Self-raising flour</dt>
    <dd>A pre-mixed combination of flour and leavening agents (usually salt and baking powder).</dd>
    </dl>

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

    <h2>Method</h2>
    <ol>
    <li>Preheat the oven to 190°C.</li>
    <li>Grease a 20cm round cake pan.</li>
    <li>In a medium bowl, whip together the eggs and castor sugar until fluffy.</li>
    <li>Fold in flour.</li>
    <li>Pour mixture into the prepared pan.</li>
    <li>Bake for 20 minutes in the preheated oven, or until the top of the cake springs back when lightly pressed.</li>
    <li>Cool in the pan over a wire rack.</li>
    </ol>

    Оформление страницы рецептов

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

    <style>
    dt {
      font-weight: bold;
    }
    </style>

    Страница должна теперь выглядеть примерно как на рисунке 16.3:

    (рис 16.3) Готовая страница рецепта с определениями терминов, выделенными жирным шрифтом

    Можно посмотреть живой пример страницы здесь (http://dev.opera.com/articles/view/16-html-lists/stepbystep-recipe.html).

    Вот все и закончено!

    Заключение

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

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

    Дополнительное чтение

    A List Apart: Укрощение списков (http://www.alistapart.com/articles/taminglists/) W3C CSS2: определение list-style-type (http://www.w3.org/TR/REC-CSS2/generate.html#lists)

    Контрольные упражнения

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

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

    Бен Бушанан начал создавать Web-страницы более десяти лет назад, когда получил степень по всем наукам, кроме ИТ. Он работал как в публичном (университет), так и в частных cекторах экономики; и работал над перепроектированием крупных Web-сайтов, включая The Australian (http://www.theaustralian.com.au/) и три поколения корпоративного Web-сайта Griffith University (http://www.griffith.edu.au/). Он работает сейчас в качестве Архитектора внешнего представления для News Digital Media (http://www.newsdigitalmedia.com.au/) и поддерживает 200ok weblog (http://weblog.200ok.com.au/).

    Материалы этого курса имеют лицензию Creative Commons Attribution, Non Commercial - Share Alike 2.5 license.
    Страницы:

    Введение

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

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

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

  • Три типа списков
  • Неупорядоченные списки
  • Упорядоченные списки
  • Разметка упорядоченного списка
  • Начало упорядоченных списков с числа, отличного от 1
  • Списки определений
  • Выбор типа списка
  • Различие между списками HTML и текстом
  • Вложенные списки
  • Пошаговый пример
  • Разметка основной страницы
  • Добавление некоторых стилей
  • Страница рецептов
  • Разметка страницы рецептов
  • Оформление страницы рецептов
  • Заключение
  • Дополнительное чтение
  • Контрольные вопросы
  • Три типа списков

    В HTML имеется три типа списков:

  • Неупорядоченный список - используется для объединения в группу множества связанных объектов без определенного порядка.
  • Упорядоченный список - используется для объединения в группу множества связанных объектов в определенном порядке.
  • Список определений - используется для вывода пар имя/значение, таких как термины и их определения, или время и события.
  • Каждый из них имеет определенное назначение - они не являются взаимозаменяемыми!

    Неупорядоченные списки

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

  • молоко
  • хлеб
  • сливочное масло
  • кофейные зерна
  • Однако все эти объекты являются частью одного списка, можно разместить объекты в любом порядке и список будет по-прежнему иметь смысл:

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

    Разметка неупорядоченного списка

    Неупорядоченные списки используют одну пару тегов <ul></ul>, охватывающих множество пар тегов <li></li>:

    <ul>
      <li>хлеб </li>
      <li>кофе в зернах </li>
      <li>молоко </li>
      <li>масло </li>
    </ul>

    Упорядоченные списки

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

  • Собрать ингредиенты
  • Смешать ингредиенты
  • Поместить ингредиенты в форму для выпечки
  • Выпекать в духовке в течение часа
  • Вынуть из духовки
  • Дать постоять десять минут
  • Подать
  • Если список позиций переставить в другом порядке, то информация больше не будет иметь смысл:

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

  • Буквы
  • Буквы ascii нижнего регистра (a, b, c…)
  • Буквы ascii верхнего регистра (A, B, C…)
  • Классические греческие буквы нижнего регистра: ( $$\alpha$$, $$\beta$$, $$\gamma$$ …)
  • Числа
  • Десятичные числа (1, 2, 3…)
  • Десятичные числа с ведущим нулем (01, 02, 03…)
  • Римские числа в нижнем регистре (i, ii, iii…)
  • Римские числа в верхнем регистре (I, II, III…)
  • Традиционная грузинская нумерация (an, ban, gan…)
  • Традиционная армянская нумерация (mek, yerku, yerek…)
  • Здесь также можно использовать CSS для изменения стиля списков.

    Разметка упорядоченного списка

    Упорядоченные списки используют одну пару тегов <ol></ol>, охватывающих множество пар тегов <li></li>:

    <ol>
      <li>Собрать ингредиенты</li>
      <li>Смешать ингредиенты</li>
      <li>Поместить ингредиенты в форму для выпечки </li>
      <li>Выпекать в духовке в течение часа </li>
      <li>Вынуть из духовки</li>
      <li>Дать постоять десять минут </li>
      <li>Подать</li>
    </ol>

    Начало упорядоченных списков с числа, отличного от 1

    Можно создать упорядоченный список, нумерация которого начинается с числа отличного от 1 (или i, или I, и т.д.). Это делается с помощью атрибута start, который получает числовое значение, даже если используется CSS для изменения нумерации списка на алфавитную или римскую с помощью свойства list-style-type. Это будет полезно, если имеется единый список объектов, но вы хотите разбить список некоторыми примечаниями, или некоторой другой подходящей информацией. Например, можно было бы сделать это с предыдущим примером:

    <ol>
      <li>Собрать ингредиенты </li>
      <li>Смешать ингредиенты </li>
      <li>Поместить ингредиенты в форму для выпечки </li>
    </ol>
    
    <p class="note">Прежде чем поместить ингредиенты в форму для выпечки, 
      нагрейте духовку до 180 градусов по Цельсию /350 градусов по Фаренгейту, 
       чтобы быть готовым к следующему шагу </p>
    
    <ol start="4">
      <li> Выпекать в духовке в течение часа </li>
      <li> Вынуть из духовки </li>
      <li> Дать постоять десять минут </li>
      <li> Подать </li>
    </ol>

    Это приводит к следующему результату:

  • Собрать ингредиенты
  • Смешать ингредиенты
  • Поместить ингредиенты в форму для выпечкиПрежде чем поместить ингредиенты в форму для выпечки, нагрейте духовку до 180 градусов по Цельсию /350 градусов по Фаренгейту, чтобы быть готовым к следующему шагу
  • Выпекать в духовке в течение часа
  • Вынуть из духовки
  • Дать постоять десять минут
  • Подать
  • Отметим, что этот атрибут является фактически исключенным в самой последней версии спецификации HTML, что означает, что страницы не пройдут валидацию при использовании строгого ) подтверждает это). Если вы хотите использовать такую возможность на строгой странице HTML 4, и она должна обязательно пройти валидацию, можно сделать это с помощью CSS Counters.

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

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

    молоко
         Белый жидкий молочный продукт. 
    хлеб
         Продукт питания, получаемый выпечкой из муки. 
    сливочное масло 
         желтый твердый молочный продукт. 
    кофейные зерна 
         Семена плодов некоторых кофейных деревьев.

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

    Можно ассоциировать более одного термина с одним определением, или наоборот. Например, термин "кофе" может иметь несколько значений, и можно показать их одно за другим:

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

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

    содовая
    шипучка 
    газировка 
    кола 
          Сладкий, насыщенный углекислым газом, напиток

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

    Поэтому списки определений используют одну пару элементов <dl></dl>, охватывающую группы тегов <dt></dt> и <dd></dd>. Необходимо располагать парами как минимум одну группу тегов <dt></dt> с одной группой <dd></dd> ; теги <dt></dt> должны всегда быть первыми по порядку.

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

    <dl>
      <dt>Термин </dt>
      <dd>Определение термина </dd>
      <dt>Термин </dt>
      <dd>Определение термина </dd>
      <dt>Термин </dt>
      <dd>Определение термина </dd>
    </dl>

    Который выводится следующим образом:

    Термин 
         Определение термина 
    Термин 
         Определение термина 
    Термин 
         Определение термина

    В этом примере мы соединяем более одного термина с определением и наоборот:

    <dl>
      <dt>Термин </dt>
      <dd>Определение термина </dd>
      <dt>Термин </dt>
      <dt>Термин </dt>
      <dd>Определение которое применяется к обоим предыдущим терминам </dd>
      <dt>Термин, который может иметь оба следующие определения </dt>
      <dd>Одно определение термина </dd>
      <dd>Другое определение термина </dd>
    </dl>

    Что будет представлено следующим образом:

    Термин 
         Определение термина 
    Термин 
    Термин 
         Определение которое применяется к обоим предыдущим терминам 
    Термин, который может иметь оба следующие определения 
         Одно определение термина 
         Другое определение термина

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

    Выбор типа списка

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

  • Определяются термины (или соединяются другие пары имя/значение)?
  • Если да, используйте список определений.
  • Если нет, не используйте список определений - перейдите к следующему вопросу.
  • Важен ли порядок элементов списка?
  • Если да, используйте упорядоченный список.
  • Если нет, используйте неупорядоченный список.
  • Различие между списками HTML и текстом

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

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

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

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

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

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

    <ol>
    <li>Глава один
    <ol>
    <li>Раздел один </li>
    <li>Раздел два </li>
    <li>Раздел три </li>
    </ol>
    </li>
    <li>Глава два </li>
    <li>Глава три  </li>
    </ol>

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

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

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

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

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

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

    Разметка основной страницы

    Создайте правильно сформированную страницу HTML, включая doctype, элементы html , head и body, и сохраните его как stepbystep-main.html. Добавьте основной заголовок ( h1 ) " HTML Cooking School", и подзаголовок ( h2 ) "Recipes":

    <h1>HTML Cooking School</h1>
    <h2>Recipes</h2>

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

    <h2>Recipes</h2>
    <ul>
    <li>Cakes</li>
    <li>Biscuits</li>
    <li>Quickbreads</li>
    </ul>

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

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

    <h2>Recipes</h2>
    <ul>
    <li>Cakes
    <ul>
    <li><a href="stepbystep-recipe.html">Plain Sponge</a></li>
    <li><a href="stepbystep-recipe.html">Chocolate Cake</a></li>
    <li><a href="stepbystep-recipe.html">Apple Tea Cake</a></li>
    </ul>
    </li>
    <li>Biscuits
    <ul>
    <li><a href="stepbystep-recipe.html">ANZAC Biscuits</a></li>
    <li><a href="stepbystep-recipe.html">Jam Drops</a></li>
    <li><a href="stepbystep-recipe.html">Melting Moments</a></li>
    </ul>
    </li>
    <li>Breads/quickbreads
    <ul>
    <li><a href="stepbystep-recipe.html">Damper</a></li>
    <li><a href="stepbystep-recipe.html">Scones</a></li>
    </ul>
    </li>
    </ul>

    Добавление некоторых стилей

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

  • Чтобы избежать столкновения с другими списками на сайте, необходимо добавить class в охватывающий список, чтобы можно было делать специфические контекстные селекторы в таблице стилей. Класс "recipe-list" кажется подходящим:
    <h2>Recipes</h2>
    <ul class="recipe-list">
  • Теперь необходимо создать таблицу стилей, и добавить в нее несколько правил — сначала добавим открывающий и закрывающий теги style в заголовок ( head ) документа.
  • Затем удалим пробелы из охватывающего списка. По умолчанию некоторые браузеры используют поля ( margin ), а некоторые используют заполнение ( padding ) для разделения элементов, поэтому нужно задать оба эти значения равными нулю - добавьте следующее между тегами style:
    ul.recipe-list {
      margin-left: 0;
      padding-left: 0;
    }
  • Затем создадим специальное изображение маркера - можно использовать, например, такой (см. рис 16.1(рис 16.1) Изображение специального маркера
  • Теперь мы удалим маркеры из элементов списка и зададим маркер как фоновое изображение для элементов списка, добавляя некоторое заполнение, чтобы текст не располагался поверх фонового изображения. Это можно сделать, добавляя следующий CSS сразу перед закрывающим тегом style:

    ul.recipe-list li {
      list-style-type: none;
      background: #fff url("example-bullet.gif") 0 0.4em no-repeat;
      padding-left: 10px;
    }

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

    ul.recipe-list li li {
      list-style-type: disc;
      background: #fff;
      }

    Окончательный результат должен быть похож на рисунок 16.2:

    (рис 16.2) Законченная основная страница со специальными изображениями маркеров

    Можно также увидеть живой пример страницы здесь (http://dev.opera.com/articles/view/16-html-lists/stepbystep-main.html).

    Страница рецепта

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

    Клиент предоставил рецепт sponge в текстовом файле, который выглядит следующим образом:

    Simple Sponge Cake
    Ingredients
    3 eggs
    100g castor sugar
    85g self-raising flour
    
    Notes on ingredients:
      Caster Sugar - Finely granulated white sugar.
      Self-raising flour - A pre-mixed combination of flour and leavening agents (usually salt and baking powder).
    
    Method
      1. Preheat the oven to 190°C.
      2. Grease a 20cm round cake pan.
      3. In a medium bowl, whip together the eggs and castor sugar until fluffy.
      4. Fold in flour.
      5. Pour mixture into the prepared pan.
      6. Bake for 20 minutes in the preheated oven, or until the top of the cake springs back when lightly pressed.
      7. Cool in the pan over a wire rack.

    Разметка страницы рецепта

    Создайте другой правильно сформированный документ HTML, и сохраните его как stepbystep-recipe.html. Добавьте следующие заголовки.

    <h1>Simple Sponge Cake</h1>
    <h2>Ingredients</h2>
    <h3>Notes on ingredients</h3>
    <h2>Method</h2>

    Список ингредиентов содержит несколько позиций, но порядок не имеет значения. Поэтому имеет смысл использовать неупорядоченный список. Добавьте следующий код в тело ( body ) документа HTML:

    <h2>Ingredients</h2>
      <ul>
    <li>3 eggs</li>
    <li>100g castor sugar</li>
    <li>85g self-raising flour</li>
    </ul>

    Замечания по ингредиентам ( notes on the ingredients ) присутствуют для уточнения, что из себя представляют ингредиенты. Необходимо связать ингредиент — термин — с его определением. Список определений как раз подходит для этой цели. Добавьте следующий код в документ HTML, ниже неупорядоченного списка предыдущего шага:

    <h3>Notes on ingredients</h3>
      <dl>
    <dt>Castor Sugar</dt>
    <dd>Finely granulated white sugar.</dd>
    <dt>Self-raising flour</dt>
    <dd>A pre-mixed combination of flour and leavening agents (usually salt and baking powder).</dd>
    </dl>

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

    <h2>Method</h2>
    <ol>
    <li>Preheat the oven to 190°C.</li>
    <li>Grease a 20cm round cake pan.</li>
    <li>In a medium bowl, whip together the eggs and castor sugar until fluffy.</li>
    <li>Fold in flour.</li>
    <li>Pour mixture into the prepared pan.</li>
    <li>Bake for 20 minutes in the preheated oven, or until the top of the cake springs back when lightly pressed.</li>
    <li>Cool in the pan over a wire rack.</li>
    </ol>

    Оформление страницы рецептов

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

    <style>
    dt {
      font-weight: bold;
    }
    </style>

    Страница должна теперь выглядеть примерно как на рисунке 16.3:

    (рис 16.3) Готовая страница рецепта с определениями терминов, выделенными жирным шрифтом

    Можно посмотреть живой пример страницы здесь (http://dev.opera.com/articles/view/16-html-lists/stepbystep-recipe.html).

    Вот все и закончено!

    Заключение

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

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

    Дополнительное чтение

    A List Apart: Укрощение списков (http://www.alistapart.com/articles/taminglists/) W3C CSS2: определение list-style-type (http://www.w3.org/TR/REC-CSS2/generate.html#lists)

    Контрольные упражнения

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

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

    Бен Бушанан начал создавать Web-страницы более десяти лет назад, когда получил степень по всем наукам, кроме ИТ. Он работал как в публичном (университет), так и в частных cекторах экономики; и работал над перепроектированием крупных Web-сайтов, включая The Australian (http://www.theaustralian.com.au/) и три поколения корпоративного Web-сайта Griffith University (http://www.griffith.edu.au/). Он работает сейчас в качестве Архитектора внешнего представления для News Digital Media (http://www.newsdigitalmedia.com.au/) и поддерживает 200ok weblog (http://weblog.200ok.com.au/).

    Материалы этого курса имеют лицензию Creative Commons Attribution, Non Commercial - Share Alike 2.5 license.
    Вернуться к учебному плану