vyvchy
    Теми розділу

    03 · Веб і мережі для AQA

    Семантичний HTML і доступність (a11y)

    Зміст

    Доступність (accessibility, a11y) для AQA — це дві практичні речі одночасно: користувачі, які інакше не скористаються продуктом, і , які не залежать від верстки й тому переживають її рефакторинг. Обидві ростуть з одного кореня — правильної семантики розмітки — і ламаються теж разом: якщо автотест не знаходить кнопку за роллю, її не знайде й читач екрана.

    Ця глава — повний виклад теми на сайті: семантика, дерево доступності, ARIA, критерії WCAG, ручна й автоматична перевірка, законодавча рамка. Матрицю браузерів, й адаптивну розкладку розбирає сусідня глава «Кросбраузерність і адаптивна верстка».

    Семантичний HTML: правильний елемент для правильної роботи

    Семантичний HTML (semantic HTML) — використання правильних елементів HTML за їхнім призначенням. Причина не в естетиці коду: браузер за це безкоштовно дає вбудовані «гачки» доступності, а порушена семантика — одне з головних місць, де доступність серйозно ламається.

    Питання, яке виникає першим: навіщо, якщо CSS і JavaScript зроблять із будь-якого елемента що завгодно? Бо нативний <button> має не лише доречні стилі — він має вбудовану клавіатурну доступність: між кнопками переходять клавішею Tab і активують їх пробілом, Return або Enter. Те саме з посиланнями й полями форм: Tab перемикає фокус, Enter активує, стрілки гортають опції <select>. Це отримується безкоштовно, просто вибором доречного елемента.

    <button>Відтворити відео</button>
    
    <div tabindex="0" role="button">Відтворити відео</div>

    Другий рядок — ціна «фальшивої кнопки»: tabindex="0" повертає можливість отримати фокус, зокрема через Tab, role="button" повідомляє користувачів читачів екрана, що з елементом можна взаємодіяти, і зверху потрібні власні обробники клавіатури. Тобто руками відтворюється те, що <button> дає з коробки. Візуальна схожість тут не рятує: віджет із <div> без ролі може бути несприйнятним або некерованим для людини з інвалідністю, бо допоміжна технологія не розпізнає його ролі. Побічний аргумент проти «зробимо потім»: послідовна семантика не довша в написанні й дає переваги поза доступністю — простішу підтримку й кращу індексацію пошуковими системами.

    Структура і порядок у коді

    Один із найкращих засобів доступності для користувача читача екрана — добра текстова структура: заголовки, абзаци, списки, а до них секційні елементи <nav>, <footer>, <article> як додаткові підказки для навігації. Без заголовків читач екрана не має дороговказів: зміст сторінки не витягується, і вся сторінка сприймається як один гігантський блок, що зачитується суцільно.

    Третя частина структури — порядок у вихідному коді. CSS може переставити блоки візуально, але логічним порядок має бути в джерелі: саме в ньому вміст зачитають.

    Пастка

    Найдешевша перевірка структури не потребує жодного інструмента: спробуйте скласти зміст сторінки за самими лише заголовками. Не складається — читач екрана теж його не отримає.

    Посилання проти кнопок

    <a href="#"> або href="javascript:void(0)" з обробником onclick — класичний антипатерн. Ламається копіювання й перетягування посилань, відкриття в новій вкладці, закладки й поведінка, поки JavaScript ще вантажиться чи вимкнений, — і окремо: допоміжним технологіям передається хибна семантика. Рекомендація MDN однозначна: у таких випадках потрібен <button>.

    Дзеркальна вимога: посилання з target="_blank" або посилання на файл має містити індикатор того, що станеться при активації — несподіване перемикання дезорієнтує людей зі слабким зором, користувачів читачів екрана й людей із когнітивними особливостями. І колір не може бути єдиною ознакою посилання: потрібні 4.5:1 до тла, щонайменше 3:1 між текстом посилання й навколишнім текстом і 3:1 між станами — звичайним, відвіданим, фокусом.

    Дерево доступності: друге подання сторінки

    Браузер перетворює розмітку на внутрішнє подання — DOM-дерево, — а на його основі будує окреме дерево доступності (accessibility tree). Саме ним платформні API доступності віддають сторінку допоміжним технологіям (assistive technology), зокрема читачам екрана.

    HTML-розмітка

    DOM-дерево

    Дерево доступності

    API доступності
    операційної системи

    Читач екрана

    HTML-розмітка

    DOM-дерево

    Дерево доступності

    API доступності
    операційної системи

    Читач екрана

    Ключове слово тут — окреме: DOM і дерево доступності не те саме, тому перевіряти доступність за самою лише вкладкою Elements недостатньо. Для цього є панель доступності в інструментах розробника.

    Властивість вузлаНа яке питання відповідає
    name (імʼя)Як до цього звернутися? Посилання з текстом «Read more» має імʼя «Read more»
    description (опис)Що додати понад імʼя? Наприклад, яку інформацію містить таблиця
    role (роль)Що це за річ: кнопка, панель навігації, список
    state (стан)Позначено чи ні, згорнуто чи розгорнуто

    Крім цього дерево зазвичай містить інформацію про можливі дії: за посиланням можна перейти, у текстове поле можна вводити.

    Доступне імʼя (accessible name) — імʼя елемента інтерфейсу; така властивість є в кожного платформного API доступності. Значення може походити з видимого джерела (текст на кнопці) або невидимого (текстова альтернатива, що описує піктограму), і читач екрана зчитує його разом із роллю: для кнопки «OK» він може вимовити «push-button OK». Доступний опис (accessible description) — додаткова інформація понад імʼя, візуально вона може бути непомітною.

    Ось тут доступність перестає бути «чужою темою». Локатор за роллю та доступним іменем спирається рівно на ці поля — і саме тому не залежить від верстки: перейменування CSS-класів чи перебудова дерева доступності не змінюють. Побічний ефект іще цінніший: такий локатор працює детектором дефектів семантики. Стратегії пошуку елемента як предмет розбирає глава «DOM, селектори та події», а API локаторів конкретного інструмента — розділ «Інструменти».

    ARIA: коли мові розмітки бракує слів

    WAI-ARIA — технічна специфікація, що дає каркас для опису семантики там, де мова розмітки її не має; орієнтована вона насамперед на розробників, які створюють власні віджети й компоненти. Цілі специфікації названі прямо: розширити доступну інформацію, яку може подати автор; покращити доступність динамічного контенту, згенерованого скриптами; забезпечити сумісність із допоміжними технологіями.

    Семантика ARIA ділиться на дві частини: ролі (тип елемента інтерфейсу, атрибут role) та стани й властивості, які ця роль підтримує (атрибути aria-*). Різниця принципова: роль — це тип, вона не змінюється з часом чи діями користувача, а стани й властивості описують саме те, що змінюється під час взаємодії.

    Якщо запамʼятати з розділу одне речення, то це:

    ARIA доповнює нативну семантику мови, а не заміняє її.

    Нормативне продовження: коли мова-хост дає можливість із рівноцінною доступністю, треба брати саме її, а ARIA застосовувати лише там, де мові бракує потрібної ролі, стану чи властивості. Причина — найкращий можливий запасний варіант для агентів без підтримки ARIA і збереження цілісності семантики самої мови. Практичний висновок для ревʼю: надлишкова ARIA — теж дефект, і правильна правка тут не «додати атрибут», а «замінити елемент».

    Дві пастки, на яких ловляться найчастіше.

    Перша: role не змінює DOM. Коли роль ARIA перекриває семантику мови-хоста, у DOM не відбувається жодних змін — лише в дереві доступності. Тонкість поруч: role перекриває неявну роль елемента, але для станів і властивостей пріоритет мають еквіваленти мови-хоста, щоб уникнути конфлікту; звідси класична помилка на кшталт <button role="presentation">. Сама роль presentation знімає з елемента власну семантику: для елемента з цією роллю, який не отримує фокус, користувацький агент не повинен виставляти API доступності його неявну нативну семантику, але вміст і нащадки без явної чи успадкованої ролі presentation лишаються доступними.

    Друга: стани треба оновлювати. Зміна стану або властивості породжує сповіщення для допоміжних технологій, яке може повідомити користувача про зміну. Звідси типовий дефект динамічного віджета: візуальний стан змінився (клас, колір, стрілочка перевернулася), а aria-* — ні. Для користувача читача екрана не сталося нічого.

    WCAG: чотири шари, три рівні

    Тепер нормативна рамка, у якій усе це живе. WCAG (Web Content Accessibility Guidelines) має чотиришарову структуру, і для тестувальника важливо, який шар із неї перевіряється.

    4 принципи: сприйнятність, керованість,
    зрозумілість, надійність

    13 настанов
    загальні цілі, не перевірювані

    критерії успіху
    ЄДИНЕ, що перевіряється

    техніки
    інформативні, не нормативні

    4 принципи: сприйнятність, керованість,
    зрозумілість, надійність

    13 настанов
    загальні цілі, не перевірювані

    критерії успіху
    ЄДИНЕ, що перевіряється

    техніки
    інформативні, не нормативні

    Принципів чотири, і найменш очевидний з них — надійність: контент має бути достатньо надійним, щоб його інтерпретувало широке коло користувацьких агентів, включно з допоміжними технологіями. Настанов тринадцять, вони задають каркас і самі по собі не перевірювані. Критерії успіху — навпаки: вони надаються саме для випадків, де потрібні вимоги й перевірка відповідності — у проєктній специфікації, закупівлях, регулюванні, договорах. Техніки інформативні: «достатня» техніка показує один зі способів виконати критерій, а не єдиний обовʼязковий. Звідси правило написання кейсів: кейс пишеться на критерій успіху, а «сторінка відповідає настанові 1.4» — неперевірюване формулювання за побудовою стандарту.

    Рівнів відповідності три: A (найнижчий), AA і AAA (найвищий), і вони кумулятивні — AA означає виконання всіх критеріїв A і AA. Промисловим орієнтиром є AA, і підстава названа в самому стандарті: вимагати AAA як загальну політику для цілих сайтів не рекомендується, бо для частини контенту виконати всі критерії AAA неможливо. Ще одна деталь, про яку забувають у звітах: відповідність оголошується лише для цілих сторінок і не досягається, якщо частину сторінки виключено.

    Ця глава спирається на версію 2.2. Вона зворотно сумісна з 2.1, вилучає критерій 4.1.1 Parsing і додає девʼять нових: 2.4.11 Focus Not Obscured (Minimum) (AA), 2.4.12 Focus Not Obscured (Enhanced) (AAA), 2.4.13 Focus Appearance (AAA), 2.5.7 Dragging Movements (AA), 2.5.8 Target Size (Minimum) (AA), 3.2.6 Consistent Help (A), 3.3.7 Redundant Entry (A), 3.3.8 Accessible Authentication (Minimum) (AA), 3.3.9 Accessible Authentication (Enhanced) (AAA). Робоча група радить брати за ціль саме 2.2, навіть якщо формальні зобовʼязання посилаються на попередні версії.

    КритерійРівеньСуть
    1.1.1 Non-text ContentAНетекстовий контент має текстову альтернативу з тим самим призначенням (з переліченими винятками)
    1.4.3 Contrast (Minimum)AAКонтраст тексту — щонайменше 4.5:1 (з винятками)
    1.4.4 Resize TextAAТекст масштабується до 200% без втрати контенту чи функціональності
    2.1.1 KeyboardAУся функціональність керована з клавіатури, без вимог до таймінгу натискань; виняток — дії, що залежать від траєкторії руху
    2.4.7 Focus VisibleAAІндикатор фокуса видимий
    2.5.8 Target Size (Minimum)AA (нове у 2.2)Ціль для вказівних пристроїв — щонайменше 24×24 CSS-пікселі (з винятками)
    4.1.2 Name, Role, ValueAІмʼя й роль програмно визначувані, стани програмно встановлювані, про зміни надходять сповіщення

    Останній рядок варто прочитати уважно: це нормативна основа і для семантичного HTML, і для ARIA, а стосується він усіх компонентів інтерфейсу — включно з елементами форм, посиланнями й компонентами, згенерованими скриптами. <div> з обробником кліку цього критерію не виконує.

    Пара 2.1.1 і 2.4.7 — зазвичай найдешевша ручна перевірка доступності: пройти основний сценарій самою лише клавіатурою й подивитися, чи видно фокус на кожному кроці. Тобто «прибрали синю рамку, бо негарно» — не питання смаку, а порушення критерію рівня AA. Порядок обходу за Tab при цьому можна показати накладкою в інструментах розробника, і розбіжність між візуальним порядком і порядком у коді видно одразу.

    Критерій 1.4.4 звʼязує цю главу з сусідньою: вимога масштабування тексту прямо повʼязана із забороною user-scalable=no — WCAG вимагає щонайменше дворазового масштабування, а найкращою практикою є пʼятиразове. Сам метатег viewport як механізм розбирає глава «Кросбраузерність і адаптивна верстка».

    І межа відповідальності стандарту, корисна в суперечках «чому це не полагодили»: доступність залежить не лише від контенту, а й від доступних браузерів та інших користувацьких агентів, свою роль відіграють і інструменти авторингу. Частину проблем правками сторінки закрити не можна.

    Автоматизація: axe і межа 57%

    Практичне питання: скільки з цього закриває машина. axe — рушій тестування доступності для сайтів та інших інтерфейсів на HTML, зроблений так, щоб вбудовуватися в наявне тестове середовище й ганятися поруч зі звичайними функціональними тестами: локально, без підключення до стороннього сервера, з перевіркою порушень на кількох рівнях вкладених iframe і автодобором правил за контекстом перевірки.

    Головне число теми — з документації рушія: автоматично знаходиться в середньому 57% проблем WCAG. Решту закриває людина, а сумнівні випадки рушій віддає окремо як «неповні» — на ручний перегляд. Тобто зелений прогін автоматичної перевірки не означає відповідності WCAG.

    Результат axe.run — не «пройшло/не пройшло», а чотири окремі масиви.

    МасивЩо означаєЩо з ним робити
    violationsПровалені перевіркиЗаводити дефекти: рушій декларує нуль хибних спрацювань (крім власних вад)
    passesПройдені перевіркиБачити, що вже закрито; корисно разом із ручним тестуванням
    incompleteРушій не зміг вирішити — «елементи на перегляд»Дивитися руками: це і є пропущена робота
    inapplicableВідповідних елементів на сторінці немаєНе читати як успіх: правило просто не запускалося

    Причини потрапляння в incomplete названі прямо: технічні обмеження самого правила або помилка JavaScript під час перевірки. Для звіту про дефект рушій дає майже все готове: impact (minor, moderate, serious, critical) як шкалу пріоритету, description і helpUrl як пояснення, а для кожного проблемного вузла — фрагмент HTML і CSS-селектор у полі target. Тонкість: правило складається з окремих перевірок, і для правила повідомляється найвищий рівень серйозності серед провалених.

    Перед формулюванням «порушує WCAG» варто глянути на теги правила: кожне має тег версії й рівня (wcag2a, wcag2aa, wcag21aa, wcag22aa тощо) або мітку best-practice, якщо це не вимога стандарту, а також номер критерію — wcag111 означає критерій 1.1.1. Правила покривають WCAG 2.0/2.1/2.2 рівнів A, AA і AAA плюс окремий набір кращих практик (наприклад, наявність h1 на сторінці), тож частина спрацювань порушенням стандарту не є. Теги experimental, ACT, TT, section508 стоять лише в частини правил — набір до прогону обирають свідомо, а не запускають «усе підряд».

    Дві структурні межі бʼють по найболючіше. Рушій аналізує лише відрендерений контент (включно з візуально прихованим) — це свідоме рішення заради меншої кількості хибних спрацювань. Тому типовий сценарій має пʼятий крок: завантажити сторінку → викликати axe.run → перевірити або зберегти звіт → повторити для невідрендереного контенту, попередньо зробивши його видимим. Практично: модалка, вкладка й акордеон — три окремі прогони, а не один. Друга межа — середовище: підтримка JSDOM обмежена, і правило color-contrast там не працює, тобто контраст без реального браузера не закрити.

    Цінність автоматизації при цьому не в заміні людини: вона економить час, не потребує спеціальної експертизи й дозволяє спрямувати експерта туди, де він справді потрібен. Вбудувати перевірку можна на модульному, інтеграційному чи браузерному рівні — і чим раніше, тим дешевше. Інтеграцію axe у конкретний розбирає розділ «Інструменти».

    Lighthouse: та сама родина правил у вигляді бала

    Другий автоматичний аудитор — Lighthouse, відкритий інструмент оцінки якості вебсторінок. Доступність тут одна з категорій, а не весь інструмент: поруч живуть продуктивність, SEO та інші перевірки. Запускають його трьома способами — у Chrome DevTools (зокрема на сторінках за автентифікацією), із командного рядка або як Node-модуль; саме останній вбудовують у безперервну інтеграцію, а для захисту від існує окремий Lighthouse CI. Обидва не-браузерні сценарії вимагають установленого Chrome.

    Найцікавіше — як рахується число. Оцінка доступності — зважене середнє всіх перевірок доступності, причому ваги взято з оцінок впливу на користувача від axe: під капотом та сама родина правил, тільки подана як бал. Правила підрахунку варто знати точно:

    • Кожна перевірка — pass або fail, без часткового заліку. Якщо частина кнопок має доступні імена, а частина ні, сторінка отримує 0 за цю перевірку.
    • Ручні перевірки й перевірки з низьким впливом в оцінку не входять — на число вони не впливають узагалі.
    • Ваги різні, максимум у таблиці — 10: його мають, зокрема, доступні імена кнопок, підписи до полів форми й заборона user-scalable="no". Достатній контраст тексту й фону до максимуму не належить — у нього 7.

    Пастка

    100 балів доступності ≠ доступний сайт, і це випливає з методики, а не з песимізму: ручні й low-impact перевірки в оцінку не входять за побудовою. Читати треба перелік провалених перевірок, а не бал; порівнювати бали двох сторінок «у лоб» теж не варто — оцінка зважена, і однакове число може означати різні набори проблем.

    MDN згадує Lighthouse саме в переліку інструментів аудиту доступності — поруч із Firefox Accessibility Inspector і ANDI — і одразу називає межу: такі інструменти самі по собі проблем доступності не вирішують, потрібна комбінація інструментів, знань, досвіду й тестування з користувачами.

    Читач екрана: чим і як перевіряють руками

    Читач екрана (screen reader) — найпоширеніший вид допоміжних технологій і водночас найпоширеніший інструмент перевірки доступності. Це програма, що зачитує вміст сторінки чи інших застосунків і дозволяє користуватися компʼютером, не бачачи візуального вмісту. Працює вона не з HTML: браузер віддає їй дерево доступності — імена й описи елементів, їхню роль і стан.

    MDN ділить читачі на три групи: платні комерційні — JAWS (Windows); безкоштовні — NVDA (Windows), ChromeVox (Chrome, Windows, macOS), Orca (Linux); вбудовані в операційну систему — VoiceOver (macOS та iOS), ChromeVox (Chromebook), TalkBack (Android). Ціна входу різна й це впливає на план: NVDA лише під Windows і встановлюється окремо, а VoiceOver іде безкоштовно з macOS, iPhone та iPad — на техніці Apple перевірка не потребує жодних установок. MDN радить тримати один-два читачі прямо на робочій машині й спробувати попрацювати ними на власних улюблених сайтах.

    Базова механіка керування однакова: усе будується на клавіші-модифікаторі, яку тиснуть разом зі скороченнями, щоб команди читача не конфліктували з системними. У VoiceOver це CapsLock або Ctrl + Option, у NVDA — Insert (типово) або CapsLock.

    Мінімальна методика — чотири проби:

    1. Заголовки. Чи знаходить їх читач і чи можна ними навігувати. Без семантичних заголовків він не отримує цієї інформації взагалі.
    2. Посилання поза контекстом. У списку посилань кожен текст має бути зрозумілим сам по собі; набір «click here» пробу провалює.
    3. Поля форми. Із <label> читач озвучує підпис поля, без нього — «blank».
    4. Таблиці. З правильними заголовками клітинка зачитується разом зі своєю колонкою й рядком; без них не звʼязується нічого.

    Цей набір не дублює автоматику: axe перевірить наявність <label>, але не оцінить, чи має сенс те, що зачитано. І застереження для звіту: поведінка та керування в різних читачів відрізняються, тож «перевірено читачем екрана» без назви й версії — неповний звіт.

    Читачі екрана — не вся картина допоміжних технологій. Є ще екранні збільшувачі (збільшення, корекція кольору, розмір курсора), програми розпізнавання мовлення (керування голосом і диктування), перемикачі (switch controls) для людей із дуже обмеженою рухливістю та альтернативні вказівні пристрої — трекболи, джойстики, тачпади.

    Доступність як вимога закону

    У частини команд доступність — не питання доброї волі. European Accessibility Act (EAA) — директива ЄС (офіційно — Директива (ЄС) 2019/882), мета якої прибрати барʼєри від різних національних правил і налагодити спільний ринок доступних продуктів і послуг; спирається вона на зобовʼязання з Конвенції ООН про права осіб з інвалідністю.

    Ключова відмінність від сусідньої норми — обсяг. Директива 2016/2102 про доступність вебсайтів і мобільних застосунків стосується лише публічного сектору й спирається на WCAG 2.1; у реєстрі політик W3C обсяг EAA зазначено як публічний і приватний сектор, а версія WCAG — 2.2. Акт покриває не «все підряд», а перелік продуктів і послуг, визнаних найважливішими для людей з інвалідністю: компʼютери й операційні системи, смартфони, банківські послуги, електронні книги, електронну комерцію, телефонні послуги, банкомати й термінали продажу квитків, послуги пасажирських перевезень.

    Пастка

    Рядок про електронну комерцію — той, через який тема стосується звичайного вебпродукту. Якщо ви тестуєте інтернет-магазин, доступність перестає бути «доброю практикою» і стає предметом .

    Дати в директиві стоять окремо: держави-члени мали ухвалити національні заходи до 28 червня 2022, а застосовувати їх — із 28 червня 2025. Поруч живуть застереження, без яких дата вводить в оману: окремі зобовʼязання держава-член могла відкласти щонайбільше до 28 червня 2027, для послуг на раніше законно вживаних продуктах передбачено перехідний період до 28 червня 2030, а старий вміст виведено з обсягу за датою публікації — зокрема архівні розділи сайту, які після 28 червня 2025 не оновлюють і не редагують.

    Легко склеїти два різні акти й у стандартах. EN 301 549 (він включає WCAG 2.1 рівня AA дослівно, без змін, для вебвмісту, а для не-вебдокументів і софту — WCAG 2.0 AA в тлумаченні WCAG2ICT) — це поле Relevant Standard картки директиви 2016/2102; картка EAA такого поля не має взагалі й називає WCAG 2.2. Спільне в них те, що власних критеріїв європейські норми не вигадують, тож наявний чекліст WCAG лишається робочим інструментом — але версію й акт беруть ті, що справді стосуються продукту. І останнє: директива переноситься в національне законодавство, тому конкретні вимоги звіряють із законом ринку, на якому продається продукт.

    Наша практика (не канон). «Дедлайн уже минув» — не привід закривати тему в плані аудиту: актуальна вимога до конкретного продукту залежить від його історії (коли продукт виведено на ринок, чи діє перехідний період), а не лише від календаря. Директива описує строки, а не тестову практику — цей висновок для планування наш.

    Типові помилки

    • Виглядає як «додамо role і aria-* — буде доступно», а насправді ARIA доповнює нативну семантику, а не заміняє її: якщо існує нативний елемент, правильна правка — замінити розмітку, а не додати атрибут.
    • Виглядає як «в Elements атрибут стоїть, значить працює», а насправді role DOM не змінює — змінюється лише дерево доступності, і дивитися треба в панель доступності.
    • Виглядає як «прогін axe зелений — сторінка відповідає AA», а насправді автоматика знаходить у середньому 57% проблем, сумнівне лежить в incomplete, а відповідність оголошується для цілих сторінок.
    • Виглядає як «inapplicable — це пройдені перевірки», а насправді правило просто не запускалося: відповідних елементів на сторінці не знайшлося.
    • Виглядає як «axe знайшов порушення WCAG», а насправді частина правил має тег best-practice і вимогою стандарту не є — рівень видно з тегів правила.
    • Виглядає як «100 балів у Lighthouse — доступний сайт», а насправді ручні й low-impact перевірки в оцінку не входять за побудовою методики.
    • Виглядає як «віджет змінив стан», а насправді змінився лише CSS-клас: без оновлення aria-* допоміжна технологія сповіщення не отримає.
    • Виглядає як «доступність — це для державних сайтів», а насправді це обсяг директиви 2016/2102; EAA охоплює й приватний сектор, зокрема електронну комерцію.

    Підсумок

    1. Доступність вибудовується знизу вгору, і перший рівень найдешевший: нативний елемент дає клавіатуру, роль і структуру безкоштовно, а ARIA потрібна лише там, де мові розмітки бракує слів.
    2. DOM і дерево доступності — різні подання: допоміжна технологія й локатор за роллю бачать імʼя, опис, роль і стан, а не вашу верстку.
    3. Перевіряється лише критерій успіху, а не настанова; рівні кумулятивні, промисловий орієнтир — AA, і відповідність оголошується для цілої сторінки.
    4. Автоматика закриває, за даними axe, у середньому 57% і чесно позначає сумнівне; решта — клавіатурний прохід, видимість фокуса, структура заголовків, надлишкова ARIA, оновлення станів і осмисленість доступних імен.
    5. Для продуктів у периметрі EAA (зокрема електронної комерції) доступність є вимогою до продукту, а цільова версія стандарту в реєстрі політик W3C — WCAG 2.2.

    Можливі питання

    • «Чим <div> з обробником кліку гірший за <button> Перевіряють, чи бачите ви за семантикою механізм. Сильна відповідь називає, що саме доводиться відтворювати руками — фокус, активацію з клавіатури, роль — і додає, що критерій 4.1.2 такий елемент не виконує.
    • «Що таке дерево доступності і чим воно відрізняється від DOM?» Дивляться, чи розумієте, що це друге подання, побудоване на основі DOM, і що звідси випливає: перевірка у вкладці Elements недостатня, а локатор за роллю стабільніший за CSS-селектор.
    • «Коли застосовувати ARIA?» Очікують головне правило («доповнює, а не заміняє») і приклад надлишкової ARIA як дефекту, а не лише перелік атрибутів.
    • «Як влаштований WCAG і що таке рівні A/AA/AAA?» Питання про нормативну грамотність: перевірюваними є лише критерії успіху, рівні кумулятивні, AAA не рекомендують як загальну політику, відповідність — для цілих сторінок.
    • «Скільки проблем доступності можна знайти автоматично?» Слухають число й межу: у середньому 57%, сумнівне — в incomplete, зелений прогін відповідності не означає. Слабка відповідь зупиняється на «прогнали axe».
    • «З чого почнете ручну перевірку доступності?» Міні-кейс, у якому важить порядок: клавіатурний прохід і видимість фокуса, потім структура заголовків, потім читач екрана з чотирма пробами — заголовки, посилання, підписи полів, таблиці.

    Джерела

    Семантичний HTML: правильний елемент для правильної роботи

    • MDN — HTML: A good basis for accessibility — вбудована клавіатурна доступність нативних елементів, ціна фальшивої кнопки, структура й порядок у джерелі, псевдокнопки з посилань, контраст посилань.
    • W3C — Accessible Rich Internet Applications (WAI-ARIA) 1.2 — чому візуальна схожість не замінює семантики: без розпізнаваної ролі віджет некерований для допоміжної технології.

    Дерево доступності: друге подання сторінки

    • MDN — Accessibility tree (glossary) — побудова дерева на основі DOM, чотири властивості вузла, можливі дії, незалежність локаторів за роллю від верстки.
    • W3C — Accessible Rich Internet Applications (WAI-ARIA) 1.2 — доступне імʼя й опис, зчитування імені разом із роллю, API доступності як канал до допоміжних технологій.

    ARIA: коли мові розмітки бракує слів

    • W3C — Accessible Rich Internet Applications (WAI-ARIA) 1.2 — призначення й цілі специфікації, ролі проти станів і властивостей, правило доповнення нативної семантики, role не змінює DOM, пріоритет мови-хоста, роль presentation, сповіщення про зміну стану.
    • MDN — HTML: A good basis for accessibility — мінімальна латка для фальшивої кнопки: tabindex="0" плюс role="button".

    WCAG: чотири шари, три рівні

    Автоматизація: axe і межа 57%

    • axe-core — API documentation — чотири масиви результату й причини incomplete, поля порушення, найвищий рівень серед перевірок, теги правил, лише відрендерений контент і типовий сценарій із пʼятим кроком.
    • axe-core — README (репозиторій) — вбудовування в наявне тестове середовище, 57% проблем WCAG автоматично, нуль хибних спрацювань, обмеження JSDOM, кращі практики поверх WCAG, цінність автоматизації.
    • W3C — Web Content Accessibility Guidelines (WCAG) 2.2 — нормативна межа: перевірювані лише критерії успіху.

    Lighthouse: та сама родина правил у вигляді бала

    Читач екрана: чим і як перевіряють руками

    • MDN — Accessibility tooling and assistive technology — читач екрана як найпоширеніша допоміжна технологія й інструмент перевірки, робота з дерева доступності, три групи читачів, ціна входу, клавіша-модифікатор, чотири базові проби, відмінності між читачами та інші види допоміжних технологій.

    Доступність як вимога закону

    Пояснення

    «Поясни» працює з власним API-ключем Anthropic: запит іде з вашого браузера прямо до Anthropic.

    Свій API-ключ (BYOK)

    Вставте власний ключ Anthropic — пояснення працюватиме на реальній моделі. Ключ зберігається лише у вашому браузері (localStorage), нікуди не надсилається, крім api.anthropic.com, і не логується.