Как определить пользовательский элемент li с учетом требований доступности?

Я хотел бы создать свой собственный элемент списка в качестве пользовательского элемента:

<ul>
  <my-li><!-- Advanced stuff in shadow dom will be rendered here --></my-li>
</ul>

Однако внутри тега ul разрешены только следующие элементы (li, script, template). Какой подход здесь будет правильным?

1.) Определение роли арии на пользовательском элементе?

<ul>
  <my-li aria-role = "listitem"><!-- Advanced stuff in shadow dom will be rendered here --></my-li>
</ul>
  1. Используете тег li внутри теневого дома?
<ul>
  <my-li><!-- Advanced stuff in shadow dom will be rendered within a li-tag here --></my-li>
</ul>
  1. Что-то другое
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
0
51
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

это 3)

<div role = "list">
    <my-li role = "listitem"></my-li>
</div>

Это не может быть 1) или 2), так как оба нарушают спецификации HTML.

С 3) Спецификации HTML и требования a11y выполнены.

Ответ принят как подходящий

Вам нужно будет сделать что-то еще, так как ваши два первых являются недопустимыми HTML. У вас есть несколько вариантов, от лучшего к худшему:

Опция 1:

<ul>
  <li>
    <your-custom-element/>
  </li>
</ul>

Вариант 2:
Управляйте всем <ul> в теневой DOM вашего пользовательского элемента или поместите <ul> в его корень.

Вариант 3, которого лучше избегать.

<div role = "list">
  <your-custom-element role = "list-item"/>
</div>

The best would be my option 1. It works because you can put anything you like inside `<li>`.

You should avoid my option 3 if you can, for several reasons:

- Avoid using ARIA unless it's really necessary
- No ARIA is better than bad ARIA
- It's not very clear if specifying the role on a custom element will work as expected, or if you have to report it yourself to the top element of your shadow DOM. It depends on what the browser / accessibility tree pass to assistive tools, and, as far as I know, it isn't very well defined, since custom elements are pretty new

Учтите, что если вы реализуете пользовательский компонент (с настраиваемыми визуальными маркерами), эти графические компоненты (маркированные маркеры) должны соответствовать требованиям к контрастности WCAG 1.4.11 (контрастность не менее 3:1), если они единственный способ, которым визуальный пользователь может определить, что это список.

Другие вопросы по теме