Menu

Списки в HTML: маркированные, нумерованные и вложенные

Как делать списки в HTML: маркированный список через <ul>, нумерованный через <ol> (start, reversed, буквы и римские цифры), вложенные списки, списки определений и оформление или удаление маркеров через CSS.

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

Списки HTML: ul, ol и li

В HTML два основных вида списков. <ul> (unordered list, неупорядоченный список) показывает маркеры, а <ol> (ordered list, упорядоченный список) показывает номера. Каждый пункт это <li> (list item, элемент списка).

Используйте <ol>, когда порядок что-то значит (шаги, рейтинги, оглавление), и <ul>, когда не значит. Программы чтения с экрана объявляют оба как списки с количеством пунктов, например «список, 3 элемента», поэтому настоящий список лучше строк, которые начинаются с набранных вручную «•» или «1.».

Непосредственно внутри списка могут быть только элементы <li>. Все остальное, включая заголовки, абзацы и другие списки, помещается внутрь <li>.

Стили маркеров

list-style-type у <ul> меняет маркер. Псевдоэлемент ::marker оформляет сам маркер или номер отдельно от текста:

Строковое значение использует этот текст как маркер. "\2713 " это галочка и один пробел: первый пробел только завершает экранирование \2713. ::marker принимает лишь несколько свойств, в основном color, font-size и другие свойства шрифта, и этого хватает для частой просьбы о «цветных маркерах» без лишней разметки.

Нумерованные списки: цифры, буквы и римские числа

У <ol> есть атрибуты для нумерации:

АтрибутПримерРезультат
typetype="a"a, b, c (также работают A, i, I и 1)
startstart="5"Счет начинается с 5
reversedreversedСчет в обратную сторону
value (у <li>)<li value="10">Этот пункт получает номер 10, следующие продолжают от него

type уместен в HTML, потому что буквы могут нести смысл («выберите вариант B»). Для чисто визуальных изменений то же самое делает CSS list-style-type: upper-alpha или lower-roman.

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

Подсписок помещается внутрь <li>, к которому он относится, после текста этого пункта. Браузеры меняют маркер на каждом уровне: диск, затем окружность, затем квадрат.

Обратите внимание, где стоит </li>: пункт «Frontend» закрывается только после своего подсписка. Если закрыть его перед <ul>, подсписок окажется прямо внутри внешнего <ul>, а это некорректно, хотя выглядит почти так же.

Нумерованные списки вкладываются так же, и в каждом подсписке нумерация начинается с 1. Для номеров вроде 1.1 и 1.2 нужны счетчики CSS.

Списки определений: dl, dt и dd

Список определений связывает термины с их описаниями: глоссарий, детали заказа, пары вроде вопросов и ответов. <dt> это термин, а <dd> описание:

У термина может быть несколько <dd>, а несколько <dt> могут разделять один <dd>. Браузеры по умолчанию делают отступ у <dd>; правило margin выше его убирает. Для данных с несколькими столбцами лучше подходит таблица.

Списки без маркеров: меню и горизонтальные списки

Навигационные меню это списки ссылок. Уберите маркеры через list-style: none и отступ через padding: 0, а затем выстройте пункты в ряд через flexbox:

Для программ чтения с экрана список остается списком («навигация, список, 3 элемента»). Одно исключение: Safari с VoiceOver может терять смысл списка, когда маркеры убраны. Если количество пунктов важно вашим пользователям, добавьте <ul> атрибут role="list".

Отступы по умолчанию

Браузеры дают спискам внешние отступы 1em сверху и снизу и сдвигают их через padding-inline-start: 40px, и именно там стоят маркеры. Отступ находится со стороны начала, поэтому в языках с письмом справа налево маркеры и отступ автоматически переходят на другую сторону. Если убрать отступ, маркеры окажутся за пределами блока списка, где их может обрезать; либо оставьте часть отступа, либо используйте list-style-position: inside.

Частые ошибки

  • <li> без родительского списка. Он должен стоять внутри <ul>, <ol> или <menu>.
  • Вложенный список вне своего <li>. Поместите подсписок внутрь пункта, к которому он относится.
  • Текст или другие теги прямо внутри <ul>, например <ul><p>Note</p><li>...</li></ul>. Перенесите их в <li> или за пределы списка.
  • Маркеры или номера, набранные вручную через • и <br>. Программы чтения с экрана слышат абзац, а не список.
  • list-style: none без padding: 0, из-за чего остается загадочный отступ в 40 пикселей.
  • <ol> ради внешнего вида. Если порядок не важен, используйте <ul> и оформите его.

Часто задаваемые вопросы

Как сделать маркированный список в HTML?

Используйте неупорядоченный список: <ul> и по одному <li> на каждый пункт, например <ul><li>Milk</li><li>Eggs</li></ul>. Браузер рисует маркер перед каждым пунктом и делает отступ у списка.

Чем ul отличается от ol?

<ul> это неупорядоченный список с маркерами, для пунктов, порядок которых не важен. <ol> это упорядоченный список с номерами, для шагов и рейтингов, где порядок важен. Оба содержат пункты <li>.

Как убрать маркеры у списка в HTML?

Задайте <ul> в CSS list-style: none. Также задайте padding-inline-start: 0 (или padding: 0), чтобы убрать отступ, который браузер добавляет под маркеры.

Как начать нумерованный список с другого числа?

Используйте атрибут start: <ol start="5"> дает первому пункту номер 5. reversed считает в обратную сторону, а value у <li> задает номер этого пункта и следующих за ним.

Как сделать вложенный список в HTML?

Поместите внутренний <ul> или <ol> внутрь <li> внешнего списка, после текста этого пункта. Список, стоящий прямо внутри другого <ul> между элементами <li>, некорректен.

Coddy programming languages illustration

Учитесь программировать с Coddy

НАЧАТЬ