Привет, мне нужно добавить клавиатуру и доступ к моей настраиваемой кнопке выпадающего меню. Есть ли у вас какие-либо идеи? Я думал об использовании арии?
<div class="dropdown-select">
<input type="hidden" name="select_offer" class="dropdown-select--value" />
<button class="dropdown-select--btn"> Lorem ipsum
<span class="sr-only">(rozwiń listę)</span>
</button>
<ul class="opl-dropdown-select--list">
<li>
<a href="#" data-option="value1">Lorem ipsum</a>
</li>
<li>
<a href="#" data-option="value2">Lorem ipsum</a>
</li>
<li>
<a href="#" data-option="value3">Lorem ipsum</a>
</li>
</ul>
</div>
Фонд Mozilla описал технику для пользовательских элементов списка: Использование роли списка, которая подразумевает несколько соображений:
listbox
для элементаoption
роли по различным вариантамaria-activedescendant
для текущего сфокусированного элементаaria-selected
для текущего выбранного элементаWCAG имеет полные рабочие примеры на странице примеров ListBox, но эта страница находится в стадии разработки.
Вот как бы я к этому подошел:
<div class="dropdown-select" role="menubar">
<input type="hidden" name="select_offer" class="dropdown-select--value" />
<button id="custom-dropdown" class="dropdown-select--btn" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> Lorem ipsum
<span class="sr-only">(rozwiń listę)</span>
</button>
<ul class="opl-dropdown-select--list" aria-label="submenu" role="menu" aria-labelledby="custom-dropdown">
<li role="menuitem">
<a href="#" data-option="value1">Lorem ipsum</a>
</li>
<li role="menuitem">
<a href="#" data-option="value2">Lorem ipsum</a>
</li>
<li role="menuitem">
<a href="#" data-option="value3">Lorem ipsum</a>
</li>
</ul>
</div>
Использование атрибута с aria-expanded
действительно идеально, но если оно используется, ему необходимо правильно отобразить значение true/false соответственно, поскольку элемент будет расширен и скомпенсирован.
Установка фокуса на div будет проблемой. tabindex не является допустимым атрибутом, который может применяться к divs в HTML <5.
Он должен иметь ссылку на элемент a, textarea, button, input, object, select.
Таким образом, мы реализовали аналогично
Мы помещаем текстовое поле внутри div