Кратко
СкопированоРоль структуры документа из WAI-ARIA для списков.
Списки состоят из пунктов, в которых перечисляются объекты. Если при перечислении важна последовательность, используют нумерованные списки. Когда порядок не важен, добавьте маркированный список. В нумерованных списках каждый пункт начинается с цифры, в маркированных — с маркера (буллита).
Роль list
есть у тегов <ul>
и <ol>
по умолчанию.
Пример
Скопировано<div role="list"> <span role="listitem">Картошка.</span> <span role="listitem">Кружево.</span> <span role="listitem">Мышьяк.</span></div>
<div role="list"> <span role="listitem">Картошка.</span> <span role="listitem">Кружево.</span> <span role="listitem">Мышьяк.</span> </div>
Список с атрибутом aria
, который связывает список-родитель с пунктами-детьми:
<div role="list" aria-owns="item1 item2 item3"> <span role="listitem" id="item1">Картошка.</span> <span role="listitem" id="item2">Кружево.</span> <span role="listitem" id="item3">Мышьяк.</span></div>
<div role="list" aria-owns="item1 item2 item3"> <span role="listitem" id="item1">Картошка.</span> <span role="listitem" id="item2">Кружево.</span> <span role="listitem" id="item3">Мышьяк.</span> </div>
Не обязательно задавать списку aria
. Скринридеры озвучат оба примера одинаково: «Список из трёх пунктов. Картошка. Кружево. Мышьяк».
Как пишется
СкопированоДобавьте к тегу атрибут role
со значением list
. Лучше всего задавать роль <div>
или <span>
.
В первую очередь используйте для списков <ul>
и <ol>
. Роль list
делает содержимое страницы понятным для скринридеров и других вспомогательных технологий, когда не хватает возможностей HTML. Явная роль списка пригодится для кастомных элементов или поддержки старого кода.
Внутри контейнера с ролью list
должен находиться хотя бы один пункт listitem
, иначе скринридеры не засчитают элемент списком.
<div role="list"> <span role="listitem">Блюда.</span></div>
<div role="list"> <span role="listitem">Блюда.</span> </div>
Можете вкладывать в кастомные списки list
другие списки с ролью group
. Вложенные списки должны включать минимум один пункт с ролью listitem
.
<div role="list"> <span role="listitem">Блюда:</span> <div role="group"> <span role="listitem">сырники со сметаной;</span> <span role="listitem">запеканка;</span> <span role="listitem">вареники.</span> </div></div>
<div role="list"> <span role="listitem">Блюда:</span> <div role="group"> <span role="listitem">сырники со сметаной;</span> <span role="listitem">запеканка;</span> <span role="listitem">вареники.</span> </div> </div>
Обратите внимание, что ARIA-роль list
не указывает на то, какой тип у списка — упорядоченный или неупорядоченный.
<div role="list" class="list"> <span role="listitem" class="list__item">Повелитель мух</span> <span role="listitem" class="list__item">Чума</span> <span role="listitem" class="list__item">Процесс</span> <span role="listitem" class="list__item">Мамаша Кураж и её дети</span></div>
<div role="list" class="list"> <span role="listitem" class="list__item">Повелитель мух</span> <span role="listitem" class="list__item">Чума</span> <span role="listitem" class="list__item">Процесс</span> <span role="listitem" class="list__item">Мамаша Кураж и её дети</span> </div>
Так как list
не влияет на внешний вид элемента, стилизуйте список и пункты в нём с помощью CSS.
.list { display: flex; flex-direction: column; line-height: 1.5;}.list__item { position: relative; padding-left: 25px; text-transform: lowercase;}.list__item::before { content: ""; position: absolute; top: 13px; left: 0; width: 14px; height: 14px; background-color: #10F3AF;}.list__item::after { content: ";";}.list__item:last-of-type::after { content: ".";}
.list { display: flex; flex-direction: column; line-height: 1.5; } .list__item { position: relative; padding-left: 25px; text-transform: lowercase; } .list__item::before { content: ""; position: absolute; top: 13px; left: 0; width: 14px; height: 14px; background-color: #10F3AF; } .list__item::after { content: ";"; } .list__item:last-of-type::after { content: "."; }
Обычно не рекомендуется явно дублировать роль list
для <ul>
и <ol>
. Единственное исключение — исправление поведения списков в Safari. Браузер сбрасывает роль list
у <ul>
и <ol>
со свойством list
, которые не вложены в <nav>
. Это осознанное решение разработчиков движка WebKit.
Если вам действительно важно сохранить семантику списка, задайте элементу role
:
<!-- Фолбэк для Safari --><ul role="list"> <li>Свобода.</li> <li>Равенство.</li> <li>Братство.</li></ul>
<!-- Фолбэк для Safari --> <ul role="list"> <li>Свобода.</li> <li>Равенство.</li> <li>Братство.</li> </ul>