Повзунки, сегменти й випадні списки
Для розробників, у коді: повзунки лише в стандартній розмітці, як значення досягається, а не встановлюється, сегментовані вибори, випадні списки і aria-expanded, якого потребує кнопка спливного вікна.
Повзунки
Повзунок розпізнається лише за стандартною розміткою: role="slider" — те, що кожна
бібліотека компонентів малює для свого бігунка, — або рідний <input type="range">. Жодного
селектора бібліотеки, жодної назви класу.
Що несе маніфест: діапазон (min/max з aria-valuemin/aria-valuemax або з власних атрибутів
поля; 0–100 за HTML для рідного range без вказаних меж) і step лише там, де елемент його
вказує, — в ARIA для цього атрибута немає. Те, що повзунок показує зараз (now, і now_text
з aria-valuetext), виходить із браузера лише під тим самим перемикачем page_read_values, що й
значення текстового поля.
Записується через fill і число (або рядок, що є лише числом; десяткова кома приймається):
- рідний range — через рідний сетер плюс події
input/change; браузер округлює до кроку елемента; - ARIA-повзунок — так, як ним керує користувач клавіатури: фокус, потім
Home/End, коли ціль — точно край діапазону, інакшеArrowRight/ArrowLeftпо одному натисканню, з перечитуваннямaria-valuenowпісля кожного і паузою на кадр, якщо він ще не зрушив. Жодних подій вказівника чи перетягування. Яка клавіша збільшує — спостерігається: перше натискання не в той бік міняє пару місцями (сторінки справа наліво), а повзунок, що ігнорує Left/Right, один раз пробується з Up/Down.
Він має брати фокус. Повзунок, що не бере, — без tabindex, так компонент вимикає бігунок,
не кажучи про це, — not_actionable і не отримує жодної клавіші.
Результат називає досягнуте значення, а не просто надіслане: 0.32 на повзунку з кроком 0.1
лишається на найближчій позиції, і результат каже nearest: true, wanted: 0.32. Поза діапазоном
— відхиляється з min/max, ніколи не обрізається. Понад 200 натискань — too_many_presses,
з moved: true, якщо частину шляху пройдено: форма тоді змінена, хоч крок і провалився.
Не підтримується: повзунок із двома бігунками перелічується як два повзунки без ознаки, який із них який; повзунок без підтримки клавіатури встановити неможливо.
Сегментовані вибори
Сегментований перемикач — тон, розмір, перемикач мов — це набір кнопок з aria-pressed усередині
role="group", radiogroup, tablist чи toolbar. Кожен варіант сканується як вибір: його
натискання виконується одразу разом із заповненнями і ніколи не притримується для згоди, бо воно
змінює те, що редагується, а не діє на світ. Обраний варіант несе selected: true, і помічнику
сказано, що клік на обраний варіант його вимикає — «зроби тон дружнішим» не має прибрати
дружній тон.
Окрема кнопка з aria-pressed без такого контейнера — за ARIA «кнопка, що виконує дію»
(Опублікувати, Вимкнути звук) — лишається за згодою.
Випадні списки
Рідний <select> і ARIA-комбобокс (role="combobox" — PrimeNG, MUI, React-Select, будь-що за
патерном APG) скануються як select. Операція select знаходить варіант за видимим підписом
— точно, потім за входженням, без урахування регістру, — а для комбобокса відкриває його, клікає
варіант і чекає, поки сторінка перемалюється. Коли збігу немає, повідомляє доступні варіанти, щоб
помічник виправив підпис, а не вгадував. role="option", присутній, поки оверлей відкритий,
сканується як клікабельний варіант, тож помічник може й відкрити список і перечитати його, щоб
перелічити варіанти.
append на випадному списку відхиляється.
Кнопкам спливних вікон потрібен aria-expanded
Кнопка, названа своїм поточним значенням — Період: останні 30 днів, — яка нічого не оголошує,
читається як команда з назвою «останні 30 днів»: помічник може сказати, що на екрані немає
фільтра на 7 днів, або спробувати select у кнопку, або натискання буде притримане, а потім
період повідомлять як змінений. Дайте кнопці aria-expanded (актуальний на кожне відкриття й
закриття), а там, де вона відкриває діалог, — aria-haspopup="dialog". З бібліотекою компонентів
передайте атрибути на внутрішній <button> — прив’язані до хост-елемента, вони опиняються там,
де їх не читає ні помічник, ні програма озвучування.
Розкривачі
Елементи згорнутої секції не намальовані, тож їх немає в маніфесті. Розкривач з
aria-expanded="false" перелічується як (згорнуто — натисніть, щоб відкрити), і його натискання
виконується одразу — це також відповідь на «чому того поля немає в списку?».