Просто мои два цента, не связанные напрямую с основным вопросом, но которые, я думаю, могут быть полезны: ваш код не будет проверяться в валидаторе w3c, например https://validator.w3.org
1) ul элементы разрешают только li или script-поддержка элементов, таких как скрипт или шаблон (как ранее @unor заявляет в своем комментарии).Вы не должны использовать ul как прямой ребенок для ul.Это сообщение, которое валидатор вызывает в этом случае:
Модель содержимого для элемента ul: ноль или более элементов li и элементов поддержки сценариев.
2) элементы ul могутРолевая сетка или таблица.Я не знаю почему, потому что это кажется разумным, но строго говоря, они не могут.Это ошибка, которую вызовет валидатор:
Ошибка: таблица неверных значений для роли атрибута в элементе ul.
Это можно проверить, например, на веб-сайте разработчика Mozilla:
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ul
Или некоторые говорят об этом в этой теме переполнения стека:
HTML5 элемент nav против ролей = "navigation"
Но в вашем случае, если вы измените свой внешний ul на div, он подтвердит:
<div role="grid">
<ul class="swimlane">
<li>Item a1</li>
</ul>
<ul class="swimlane">
<li>Item b1</li>
<li>Item b2</li>
<li>Item b3</li>
</ul>
<ul class="swimlane">
<li>Item c1</li>
<li>Item c2</li>
</ul>
</div>
Хотя, имея список элементов ul, вам, возможно, лучше использовать их список, внутри div:
<div role="grid">
<ul>
<li>
<ul class="swimlane">
<li>Item a1</li>
</ul>
</li>
<li>
<ul class="swimlane">
<li>Item b1</li>
<li>Item b2</li>
<li>Item b3</li>
</ul>
</li>
<li>
<ul class="swimlane">
<li>Item c1</li>
<li>Item c2</li>
</ul>
</li>
</div>
Возможно, слишком многословная разметка, и я хотел бы знать причину, по которой ul нельзя использовать с сеткой ролей или таблицей, поскольку многие люди считают это естественным,видя сетки как список строк.Трудно быть семантическим: /