GH GambleHub

UX-доступність та інтерфейси для всіх

1) Навіщо це важливо

Юридично та етично: інтерфейс не повинен виключати людей з порушеннями зору, слуху, моторики, когнітивних особливостей.
Бізнес-ефект: більше користувачів, вище конверсія і утримання, краще SEO і якість коду.
Операційно: доступність - це процес, а не «випадковий фікс».


2) Основи та принципи (POUR)

Perceivable (Сприйманість): контраст, тексти-альтернативи, субтитри.
Operable (Керованість): все доступно з клавіатури, видимий фокус, пауза/стоп анімацій.
Understandable (Зрозумілість): передбачувана навігація, ясні помилки, прості формулювання.
Robust (Надійність): коректна семантика HTML/ARIA, сумісність з асистивними технологіями.


3) Семантика, заголовки і ARIA

Семантична розмітка перш ARIA: '<button>','< nav>','< form>','< table>'- за призначенням.
Ієрархія заголовків: один'< h1>'на сторінку, далі логічна структура'< h2>'-'< h3>'.
Landmarks: '<header>','< main>','< aside>','< footer>','< nav>'- допомагають скрінрідерам.
ARIA тільки при необхідності: `role`, `aria-label`, `aria-describedby`, `aria-expanded`, `aria-live`.
Стани/помилки через'aria-invalid','aria-errormessage'.


4) Клавіатура і фокус-менеджмент

Повна керованість клавіатурою: 'Tab/Shift + Tab'- порядок,'Enter/Space'- активувати,'Esc'- вихід.
Видимий фокус завжди; не відключати outline.
Пастки фокусу: в модалках - циклічний фокус, повернення фокусу на джерело після закриття.
Приховані елементи не повинні потрапляти в таб-порядок ('display:none`, `aria-hidden="true"`).
Скіп-посилання: «Перейти до основного вмісту» - на початку сторінки.


5) Колір, контраст і типографіка

Контраст тексту: не менше 4. 5:1 для звичайного тексту і 3:1 для великого.
Не покладатися тільки на колір: дублюйте іконкою/патерном/підписом.
Розмір клікабельних цілей: мінімум 40-48 px, достатні поля навколо.
Шрифти: читаються гарнітури, міжрядковий 1. 4–1. 6, довжина рядка 45-90 знаків.


6) Рух, анімації та епілептогенний спалах

Поважайте системний прапор prefers-reduced-motion - додавайте спрощені анімації/відключайте паралакс.
Уникайте мерехтінь> 3 раз/сек.
Всі авто-рухи повинні мати Pause/Stop/Hide.


7) Форми, помилки і валідація

Явно зв'язуйте мітки і поля: `<label for="id">`.
Плейсхолдер - не мітка.
Повідомлення про помилки поруч з полем і у зведенні помилок вгорі; зв'язуйте через'aria-describedby'.
Пояснюйте формат введення, приклад, маску; вказуйте одиниці і валюту.
Не скидайте заповнені поля при помилці; зберігайте фокус на проблемному полі.

Приклад (фрагмент):
html
<label for="email">Эл. почта</label>
<input id="email" name="email" type="email" aria-describedby="email-hint email-err">
<div id="email-hint" class="hint">Мы не рассылаем спам</div>
<div id="email-err" class="error" role="alert">Укажите адрес в формате name@example.com</div>

8) Компоненти та інтерактив: патерни

Кнопки vs посилання: дія ='< button>', перехід ='< a>'.
Таби/акордеони: стрілки навігації,'aria-controls','aria-selected'.
Модалки/діалоги: 'role = «dialog»','aria-modal = «true»', пастка фокусу,'Esc'закриває.
Tooltip/Popover: доступність по клавіатурі, таймаути не заважають читанню.
Drag & Drop: альтернативи - кнопки «перемістити вгору/вниз», клавіатурні стрілки; події не тільки мишею.


9) Медіа: відео/аудіо/графіки

Відео: субтитри, розшифровка (transcript), альтернативна доріжка аудіо-описів (AD).
Аудіо: текстова розшифровка.
Графіки/діаграми: текстове резюме («що важливо»), таблиця даних, описові підписи осей.
Живі області: 'aria-live = «polite «/» assertive »'- обережно, щоб не« кричати» занадто часто.


10) Таблиці та списки

Використовуйте'< th scope =" colrow">', підписи, підсумки.
Заморожені колонки/рядки - не ламати таб-порядок.
Великі таблиці - посторінково; завжди надавайте експорт (CSV/JSON).

11) i18n, локалі та RTL

Атрибут'lang'на html-корені; локальні формати чисел/дат/валют.
RTL підтримка (арабська/іврит): дзеркалювання іконок, порядок навігації, курсорів.
Уникайте вшитих в іконки слів (текст повинен бути перекладним).
Прості формулювання, уникати жаргону; глосарій термінів.


12) Час, сесії, капчі та альтернативи

Таймаути - з попередженням і можливістю продовжити.
CAPTCHA: віддайте перевагу альтернативам (питання, невидимі аналізатори ботів, підтвердження поштою/телефоном); якщо використовуєте - текстову альтернативу і не тільки візуальну.
Автентифікація: підтримка менеджерів паролів, «показати пароль», WebAuthn.


13) Доступність для сенсорних і моторних порушень

Жести повинні мати еквіваленти кліку/клавіатурі.
Не вимагайте тривалих утримань/подвійних тапів без альтернативи.
«Pointer cancellation»: дія повинна виконуватися на відпускання, не на «натискання», щоб дати шанс скасувати.


14) Стану, повідомлення та алерти

Використовуйте'role = «status »/» alert»'для динамічних повідомлень.
Не перекривайте фокус «липкими» банерами.
Toast-повідомлення - з паузою при фокусі/hover і доступом з клавіатури.


15) Тест-план (ручний і авто)

Ручний (мінімум):
  • Пройти всі ключові сценарії тільки клавіатурою.
  • Перевірити видимість фокусу на кожному елементі.
  • Збільшити масштаб до 200% - інтерфейс залишається функціональним без горизонтального скролла.
  • Увімкнути системний режим «зменшення руху» - анімації не заважають.
  • Пройти сценарій зі скрінрідером (NVDA/VoiceOver), переконатися в правильних ролях/мітках/порядку.
Автотести (в CI):
  • Лінти доступності на рівні компонентів.
  • Перевірка контрасту, альтернативних текстів, порядку заголовків, валідності ARIA.
  • Снапшоти семантики (role tree) для критичних екранів.

16) Метрики якості доступності

A11y Coverage: частка компонентів з пройденими чек-листами.
Keyboard-only Pass Rate: відсоток сценаріїв, прохідних клавіатурою.
Contrast Violations/1k елементів.
SR Flow Time: час проходження сценарію зі скрінрідером.
User-feedback: скарги на доступність, час реакції та виправлення.


17) Чек-лист компонента

  • Правильна семантика/роль без надлишкової ARIA
  • Підписані мітки,'aria-'коректні
  • Повна керованість клавіатурою, видимий фокус
  • Контраст тексту/іконок/меж в нормі
  • Помилки та статки озвучуються скрінрідером
  • Повага prefers-reduced-motion
  • Розмір клікабельної області ≥ 40-48 px
  • Локалізація і RTL не ламають макет

18) Анти-патерни

«Див-кнопки» без ролі/клавіатури.
Приховування фокусу'outline: none'без альтернативи.
Плейсхолдер замість label.
Помилки тільки кольором.
Модалки без пастки фокусу і без'Esc'.
Drag-only без клавіатури.
Довгі автопрокрутки/паралакс без опції відключити.


19) Ролі і процес

A11y-власник в команді (Product/Design/Dev).
Дефінішн-оф-дан (DoD) включає доступність.
Дизайн-рев'ю: перевірка контрасту, фокусу, лейблів.
Код-рев'ю: семантика/ARIA, тест клавіатурою.
Регулярні аудити і план поліпшень.


20) Впровадження за ітераціями

Ітерація 1 - Фундамент (2 тижні):
  • Семантика/заголовки, контраст, фокус і клавіатура, базові форми і помилки.
Ітерація 2 - Інтерактив (3-4 тижні):
  • Модалки, таби/акордеони, таблиці/графіки з текстовим резюме, відео-субтитри, знижена анімація.
Ітерація 3 - Масштаб і контроль (безперервно):
  • Автотести в CI, RTL/i18n, метрики, регулярні аудити, навчання команди.

21) Шаблони та сніпети

Модалка (спрощено):
html
<div role="dialog" aria-modal="true" aria-labelledby="dlg-title" aria-describedby="dlg-desc">
<h2 id="dlg-title">Подтвердите действие</h2>
<p id="dlg-desc">Эта операция необратима.</p>
<button>Отмена</button>
<button>Подтвердить</button>
</div>
Кнопка «пропустити до вмісту»:
html
<a class="skip-link" href="#main">Перейти к основному содержимому</a>
<main id="main">...</main>
Повага prefers-reduced-motion:
css
@media (prefers-reduced-motion: reduce) {
{ animation-duration: 0.01ms!important; animation-iteration-count: 1!important; transition: none!important; }
}

22) Міні-FAQ

Чи потрібна окрема «версія для слабозорих»?
Ні, ні. Одна адаптивна, доступна версія для всіх з налаштуваннями.

Чи достатньо перевірити тільки контраст?
Ні, ні. Контраст - лише частина. Потрібні клавіатура, фокус, семантика, форм-помилки, медіа і т.д.

ARIA вирішить все?
ARIA не виправить невірну семантику. Спочатку правильні теги, потім ARIA-уточнення.


Підсумок

Доступність - це системна дисципліна: семантика клавіатура/фокус контраст/колір форми/помилки медіа/графіки тест-план і метрики. Робіть доступність частиною DoD і культури команди - і ваш продукт стане по-справжньому універсальним, надійним і зручним для всіх.

Contact

Зв’яжіться з нами

Звертайтеся з будь-яких питань або за підтримкою.Ми завжди готові допомогти!

Розпочати інтеграцію

Email — обов’язковий. Telegram або WhatsApp — за бажанням.

Ваше ім’я необов’язково
Email необов’язково
Тема необов’язково
Повідомлення необов’язково
Telegram необов’язково
@
Якщо ви вкажете Telegram — ми відповімо й там, додатково до Email.
WhatsApp необов’язково
Формат: +код країни та номер (наприклад, +380XXXXXXXXX).

Натискаючи кнопку, ви погоджуєтесь на обробку даних.