Создание комбинированного списка в html. Вложенные списки с автоматической нумерацией
Нумерованные списки представляют собой набор элементов с их порядковыми номерами. Вид и тип нумерации зависит от параметров элемента
- , который и применяется для создания списка. В качестве нумерующих элементов могут выступать следующие значения:
- арабские цифры (1, 2, 3, ...);
- арабские цифры c нулём впереди для цифр меньше десяти (01, 02, 03, ...,10);
- прописные латинские буквы (А, В, С, ...);
- строчные латинские буквы (а, b, с, ...);
- римские цифры в верхнем регистре (I, II, III, ...);
- римские цифры в нижнем регистре (i, ii, iii, ...);
- армянская нумерация;
- грузинская нумерация.
-
. В качестве значения указывается любое целое положительное число. При этом неважно, какой тип нумерации установлен, даже если в качестве списка используются латинские буквы. Если одновременно для списка применяются атрибуты start
и value
, то последний имеет большее преимущество, и нумерация отображается с числа, указанного value
, как показано в примере 1.
Пример 1. Изменение нумерации списка
Списки - Следует тщательно позаботиться о своем рабочем месте.
- Освещение в помещении отрегулировать таким образом, чтобы источник света находился сбоку или сзади оператора.
- 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. Изменение вида списка
Списки - Первый
- Второй
- Третий
- Четвертый
Приведённым способом можно делать любой вид нумерованного списка, например, брать число в квадратные скобки, в стилях при этом изменится только одна строка.
Content: "[" counter(item) "] ";
Список с русскими буквами
Нумерованный список есть с латинскими буквами, а вот русских букв для списка нет. Их можно добавить искусственно, воспользовавшись вышеприведённым приёмом. Поскольку нумерация делается через стили, сам список остаётся исходным, к нему лишь добавляется выбранный класс, назовём его cyrilic (пример 4).
Пример 4. Код для создания списка
- Один
- Два
- Три
Добавление букв осуществляется с помощью псевдоэлемента ::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. Список с русскими буквами
Список - Борщ
- Котлеты из щуки
- Кулебяка
- Грибы в сметане
- Блины с икрой
- Квас
Результат данного примера показан на рис. 3.
Списки являются частью повседневной жизни. Список дел определяет что сделано. Навигационные маршруты предлагают пошаговый список направлений. Для рецептов требуется список ингредиентов и список инструкций. Списки встречаются практически везде, так что легко понять, почему они также популярны в Интернете.
Когда мы хотим использовать список на сайте, HTML предлагает три разных типа на выбор: маркированный, нумерованный и список описаний. Какой тип списка выбрать для использования и применять ли список вообще - зависит от содержимого и семантически наиболее подходящего варианта для его отображения.
В дополнение к трём разным типам списков доступных в HTML есть несколько путей для стилизации этих списков через CSS. Например, мы можем выбрать, какой тип маркера указать для списка. Маркер может быть квадратным, круглым, числом, буквой или, возможно, отсутствовать. Кроме того, мы можем решить, как должен отображаться список - по вертикали или горизонтали. Все эти варианты играют важную роль при стилизации наших веб-страниц.
Маркированные списки
Маркированный или неупорядоченный список - это просто список связанных элементов, для которых порядок не имеет значения. Создание маркированного списка в HTML осуществляется с помощью блочного элемента списка
-
. Каждый отдельный пункт в списке размечается с помощью элемента
-
.
По умолчанию, большинство браузеров добавляет вертикальный margin и левый padding к элементу
-
, а перед каждым элементом
-
ставит однотонную точку. Эта точка называется маркером списка и может быть изменена с помощью CSS.
- Оранжевый
- Зелёный
- Синий
Демонстрация маркированного списка
Нумерованные списки
Нумерованный или упорядоченный список элементов
-
очень похож на маркированный список, отдельные пункты списка создаются таким же образом. Основным различием между списками является то, что для упорядоченного списка важен порядок представления пунктов.
- Пройдите по Абрикосовой улице
- Сверните на Виноградную
- Пройдите по Абрикосовой улице
- Сверните на Виноградную
- Остановитесь на Тенистой улице
- Пройдите по Абрикосовой улице
- Сверните на Виноградную
- Остановитесь на Тенистой улице
-
в нумерованном списке, чтобы изменить его значение в списке. Номер любого пункта списка, который появляется ниже пункта списка с атрибутом value
, будет пересчитан соответственно.
В качестве примера, если у второго пункта списка атрибут value задан как 9, номер этого пункта списка будет выводиться, как если бы он был девятым. Все последующие пункты списка будут пронумерованы от 9.
- Пройдите по Абрикосовой улице
- Сверните на Виноградную
- Остановитесь на Тенистой улице
Демонстрация атрибута value
Списки описания
Другой тип списка который вы видели в Интернете (но не так часто, как маркированные или нумерованные списки) - это список описаний. Такие списки применяются для обозначения нескольких терминов и их описаний, как в глоссарии, к примеру.
Создание списка описания в HTML происходит с помощью блочного элемента
-
. Вместо использования элемента
-
для разметки пунктов списка, список описания требует два блочных элемента:
- для термина и
- для описания.
Список описания может содержать множество терминов и описаний, один за другим. Кроме того, такой список может содержать несколько терминов на одно описание, а также несколько описаний на термин. Один термин может иметь несколько значений и допускать несколько описаний. И наоборот, одно описание может подходить к нескольким терминам.
При добавлении списка описания элемент
- должен идти до элемента
- . Термин и описание, которое следует непосредственно за ним, связаны друг с другом. Таким образом, порядок этих элементов имеет важное значение.
По умолчанию, элемент
-
включает вертикальные отступы, подобно элементам
-
включает в себя по умолчанию левый margin
.
- учёба
- Посвящение времени и внимания для получения знаний по преподаваемому предмету, особенно с помощью книг.
- проект
- Представленный план или чертёж, который показывает, как будет выглядеть и функционировать здание, одежда или другой предмет, прежде чем он будет построен или сделан.
- Существующие цели, планы или намерения до их воплощения или реализации в материальном объекте.
- бизнес
- работа
- Регулярные занятия человека, профессия или ремесло.
Демонстрация списка описания
Вложенные списки
Особенность, которая делает списки очень мощными - это возможность вложения. Каждый список может быть помещён в другой список и они могут быть вложены неоднократно. Но возможность вкладывать списки бесконечно не даёт свободу делать это. Списки должны быть зарезервированы специально там, где они сохраняют наиболее семантическое значение.
Трюк с вложением списков заключается в том, что следует знать, где начинается и заканчивается каждый список и пункт списка. Говоря конкретно о маркированных и нумерованных списках, единственным элементом, который может находиться непосредственно внутри
-
и
-
. Повторим - единственным элементом, который мы можем поставить как прямой потомок элементов
-
и
-
.
Тем не менее, внутри элемента
-
может быть добавлен стандартный набор элементов, включая любые элементы
-
или
- Погулять с собакой
- Сложить бельё
-
Сходить в магазин и купить:
- Молоко
- Хлеб
- Сыр
- Подстричь газон
- Приготовить ужин
- . Элемент
- может содержать любой обычный элемент, какой пожелаете. Однако элемент
-
должен быть прямым потомком либо элемента
-
, либо
-
.
Любое значение свойства list-style-type может быть добавлено к маркированному или нумерованному списку. Имея это в виду, можно использовать нумерацию в маркированном списке и не числовые маркеры в нумерованном списке.
- Оранжевый
- Зелёный
- Синий
Ul { list-style-type: square; }
Демонстрация свойства list-style-type
Значения list-style-type
Как упоминалось ранее, свойство list-style-type содержит горстку разных значений. В следующей таблице представлены эти значения, а также соответствующее им содержимое.
Использование изображения в качестве маркера списка
Может наступить время, когда значений по умолчанию для свойства list-style-type не хватит и мы пожелаем задать свой собственный маркер списка. Чаще всего это делается путём размещения фонового изображения для каждого элемента
-
.
Процесс включает в себя удаление любого значения свойства list-style-type по умолчанию и добавление фонового изображения и полей для элемента
-
.
Подробнее - значение none свойства list-style-type удалит существующие маркеры списка. Свойство background задаст фоновое изображение вместе с его положением и повтором, если необходимо. А свойство padding обеспечит пространство слева от текста для фоновой картинки.
- Оранжевый
- Зелёный
- Синий
Li { background: url("arrow.png") 0 50% no-repeat; list-style-type: none; padding-left: 12px; }
Демонстрация изображения в качестве маркера
Свойство list-style-position
По умолчанию маркеры списка располагаются слева от содержимого в элементе
-
. Такой стиль позиционирования описывается как outside
, это означает, что всё содержимое будет отображаться непосредственно справа, за пределами маркера списка. С помощью свойства list-style-position
мы можем изменить значение по умолчанию outside
на inside
или inherit
.
Значение outside размещает маркер списка слева от элемента
- и не позволяют любому содержимому обтекать ниже этот маркер. Значение inside (которое редко используется и можно увидеть) размещает маркер списка в первой строке элемента
-
и позволяет содержимому обтекать маркер при необходимости.
- Капкейки...
- Обсыпка...
Ul { list-style-position: inside; }
Демонстрация свойства list-style-position
Универсальное свойство list-style
Свойства списка, которые мы недавно обсудили, list-style-type и list-style-position , могут быть объединены в одно универсальное свойство list-style . В этом свойстве мы можем использовать одно или все значения свойств списка одновременно. Порядок этих значений должен быть: list-style-type , затем идёт list-style-position .
Ul { list-style: circle inside; } ol { list-style: lower-roman; }
Горизонтальное отображение списка
Иногда мы хотим отобразить списки горизонтально, а не вертикально. Возможно, мы желаем разделить список на несколько колонок, чтобы построить список навигации или разместить несколько пунктов списка в один ряд. В зависимости от содержания и желаемого внешнего вида есть несколько способов для отображения списков в виде одной строки, например, путём принятия значения свойства display для элементов
-
как inline
или inline-block
или через свойство float
.
Отображение списка
Самый быстрый способ отобразить список на одной строке - это задать элементам
- свойство display со значением inline или inline-block . Это поставит все элементы
-
в одну строку с одинаковым промежутком между каждым пунктом списка.
Если промежутки между элементами
-
доставляют проблемы, то они могут быть удалены с помощью тех же методов, что мы обсуждали в уроке 5, «Позиционирование содержимого».
Намного чаще мы будем использовать значение inline-block вместо значения inline . Значение inline-block позволяет легко добавлять вертикальные отступы и другое пространство к элементам
-
, в то время как значение inline
нет.
При изменении значения свойства display на inline или inline-block , маркер списка, будь то точка, число или другое, удаляется.
- Оранжевый
- Зелёный
- Синий
Li { display: inline-block; margin: 0 10px; }
Демонстрация списка с inline-block
Списки с float
Изменение значение свойства display на inline или inline-block быстро, однако это удаляет маркеры списка. Если они необходимы, то добавление float к каждому элементу
-
является лучшим вариантом, чем изменение свойства display
.
Установка для всех элементов
- свойства float как left выровняет горизонтально все элементы
- непосредственно рядом друг с другом без каких-либо промежутков между ними. Когда мы используем float для
- , маркер списка отображается по умолчанию и будет располагаться поверх элемента
- рядом с ним. Чтобы предотвратить отображение маркера списка поверх других элементов
-
, должны быть добавлены горизонтальный margin
или padding
.
- Оранжевый
- Зелёный
- Синий
Li { float: left; margin: 0 20px; }
Демонстрация списка с float
Как и с любыми обтекаемыми элементами это нарушает поток страницы. Мы не должны забывать очищать float и возвращать страницу в обычный поток - наиболее распространённым методом через clearfix.
Пример навигационного списка
Мы часто разрабатываем и находим навигационные меню, в которых применяются неупорядоченные списки. Эти списки, как правило, располагаются горизонтально с помощью одного из двух методов, упомянутых ранее. Вот, к примеру, горизонтальное навигационное меню, размеченное с помощью неупорядоченного списка, в котором элементы
-
отображаются как inline-block
.
Navigation ul { font: bold 11px "Helvetica Neue", Helvetica, Arial, sans-serif; margin: 0; padding: 0; text-transform: uppercase; } .navigation li { display: inline-block; } .navigation a { background: #395870; background: linear-gradient(#49708f, #293f50); border-right: 1px solid rgba(0, 0, 0, .3); color: #fff; padding: 12px 20px; text-decoration: none; } .navigation a:hover { background: #314b60; box-shadow: inset 0 0 10px 1px rgba(0, 0, 0, .3); } .navigation li:first-child a { border-radius: 4px 0 0 4px; } .navigation li:last-child a { border-right: 0; border-radius: 0 4px 4px 0; }
Демонстрация навигационного списка
На практике
Теперь, когда мы знаем, как создавать списки в HTML и CSS, давайте оглянемся на наш сайт Styles Conference и посмотрим, где мы могли бы использовать списки.
-
) задаст структуру наших навигационных меню. Эти новые элементы, однако, будут отображать наши навигационные меню вертикально.
Мы собираемся изменить значение display для наших элементов
- на inline-block , чтобы все они выравнивались в строке по горизонтали. Когда мы это сделаем, то также должны учесть пустое пространство слева между каждым элементом
- . Вспоминая урок 5, «Позиционирование содержимого», мы знаем что открытие комментария HTML в конце элемента
- и закрытие комментария в начале элемента
-
удалит это пространство.
Помня об этом, разметка для навигационного меню внутри нашего элемента
будет выглядеть так: В том же духе, разметка для навигационного меню внутри нашего элемента
Не забывайте внести эти изменения во все наши HTML-файлы.
С нашим маркированным списком давайте удостоверимся, что пункты списка выровнены по горизонтали и слегка очистим их стили. Мы будем использовать существующий класс nav для указания наших новых стилей.
Начнём с того, чтобы все элементы
-
внутри какого-либо элемента со значением nav
атрибута class
отображались как inline-block
, чтобы включить горизонтальные margin
и чтобы можно было выравнивать элементы по вертикали.
Кроме того, мы воспользуемся псевдоклассом :last-child чтобы определить последний элемент
- и сбросить его правый margin в 0. Это гарантирует, что любое горизонтальное пространство между элементами
-
и краем его родителя исчезнет.
В наш файл main.css, ниже стилей навигации добавим следующий CSS:
Nav li { display: inline-block; margin: 0 10px; vertical-align: top; } .nav li:last-child { margin-right: 0; }
Вы наверное удивлены, почему наш список не включает каких-либо маркеров списка или стилей по умолчанию. Эти стили были удалены сбросом вверху нашего стиля. Если мы посмотрим на сброс, то увидим что элементы
-
,
-
включают в себя нулевые margin
и padding
, а для
-
и
-
значение list-style
задано как none
.
Меню навигации не единственное место, где мы будем использовать списки. Также применим их на некоторых наших внутренних страницах, включая страницу Спикеры. Давайте добавим несколько спикеров в нашу конференцию.
В файле speakers.html, чуть ниже раздела со вступлением, создадим новый раздел, где мы представим всех наших спикеров. Повторно задействуя некоторые существующие стили мы воспользуемся элементом
с классом row , чтобы обернуть всех наших спикеров и применить белый фон и поля за ними. Внутри элемента мы добавим элемент с классом grid чтобы выровнять по центру страницы наших спикеров и это позволит нам также включить несколько колонок.Пока наш HTML ниже раздела со вступлением выглядит следующим образом:
Внутри grid каждый спикер будет размечен с собственным элементом
, который включает две колонки. Первая колонка отмеряет две трети элемента и будет размечена с помощью элемент . Вторая колонка отмеряет оставшуюся треть элементаи будет размечена с помощью элемента
-
и
-
включают в себя нулевые margin
и padding
, а для
Сейчас навигационные меню в элементах
и Использование неупорядоченного списка (через элемент
-
) и пунктов списка (через элемент
-
) задаст структуру наших навигационных меню. Эти новые элементы, однако, будут отображать наши навигационные меню вертикально.
-
.
Стоит также отметить, что когда списки вложены внутрь других списков, их маркеры будут меняться в зависимости от глубины вложения. В предыдущем примере маркированный список, вложенный в нумерованный, использует в качестве маркеров кружок вместо точки. Это изменение происходит потому, что маркированный список вложен на один уровень в нумерованном списке.
К счастью, мы можем управлять, как маркеры пунктов списка выглядят на любом уровне, что мы и рассмотрим дальше.
Стилизация пунктов списка
Маркированные и нумерованные списки используют маркеры пунктов списка по умолчанию. Для маркированных списков это, как правило, однотонные точки, в то время как для нумерованных списков, как правило, применяются числа. С помощью CSS стиль и положение этих маркеров можно настраивать.
Свойство list-style-type
Свойство list-style-type используется для установки содержимого маркера пунктов списка. Доступные значения находятся в диапазоне от квадратиков и десятичных чисел до армянской нумерации и стиль в CSS может быть добавлен к элементам
-
,
-
или
-
.
-
.
Чтобы вложить список - перед закрытием пункта списка начните новый список. После того, как вложенный список завершён и закрыт, закройте обрамляющий пункт списка и продолжите с первоначального списка.
Демонстрация вложенных списков
Поскольку вложенные списки могут немного запутать и отобразить нежелательные стили, если они сделаны неправильно - давайте быстро их просмотрим. Элементы
-
и
-
могут содержать только элементы
-
, является
-
.
-
является элемент
-
и
-
. Кроме того, элемент
Поскольку порядок имеет значение, вместо точки в качестве маркера по умолчанию в нумерованном списке применяются номера.
Демонстрация нумерованного списка
У нумерованных списков также есть доступные для них уникальные атрибуты, включая start и reversed.
Атрибут start
Атрибут start определяет номер, с которого должен начинаться нумерованный список. По умолчанию списки начинаются с 1, однако могут возникнуть ситуации, когда список должен начинаться с 30 или с другого числа. Когда мы используем атрибут start для элемента
-
, то можем точно определить, с какого номера должен начинаться отсчёт нумерованного списка.
Атрибут start принимает только целые значения, хотя в нумерованных списках могут применяться разные системы нумерации, например, римские числа.
Демонстрация атрибута start
Атрибут reversed
Атрибут reversed при добавлении к элементу
-
позволяет списку отображаться в обратном порядке. Список из пяти пунктов пронумерованных от 1 до 5 может быть задан обратно и нумероваться от 5 до 1.
Атрибут reversed является логическим атрибутом и как таковой он не принимает никакого значения. Он может быть истиной, либо ложью. Ложь является значением по умолчанию, значение становится истинным, когда атрибут reversed появляется у элемента
-
.
Демонстрация атрибута reversed
Атрибут value
Атрибут value может применяться к отдельным элементам
-
ставит однотонную точку. Эта точка называется маркером списка и может быть изменена с помощью CSS.
С практической точки зрения, принципы отображения элементов маркированного списка могут аналогичным способом применяться и к нумерованному списку. Но учитывая, что мы имеем дело с перечислением, существуют некоторые особенности, о которых и пойдёт речь далее.
Нумерация списка
Допускается начинать список с любого номера; для этой цели применяется атрибут start элемента
-
или value
у элемента