Перейти до основного вмісту
megapromotingПоговорімо

Експертиза · Design UI/UX

Система дизайну, у якій контраст обчислюється, рух має кнопку зупинки, а все, що не проходить перевірку, написано прямо.

Ми працюємо з кольоровими токенами з обчисленим коефіцієнтом контрасту, шаблонами клавіатури, перевіреними елемент за елементом, і анімаціями, що зупиняються відповідно до налаштування системи. Ми перевіряємо інструментом, на реальних сторінках, і публікуємо також те, що не пройшло.

Вже збудованоSistemul rulează pe site-ul acesta și se poate inspecta. Tokenul `--muted: #666b65` obține între 4,72:1 și 5,45:1 pe cele șapte fundaluri ale sitului — recalculat de noi cu formula de luminanță din WCAG, nu preluat dintr-un instrument. Opt culori scrise direct în foaia de stil produceau 2,88–4,49:1; le-am găsit cu axe-core 4.10.2 rulat pe zece pagini live și le-am înlocuit cu tokenul, iar corectura e deja în foaia servită de producție. A doua implementare verificabilă: mecanismul de oprire a animațiilor — 38 de elemente animate la infinit pe pagina de start, toate acoperite de un buton de pauză, plus regula globală care anulează animațiile la `prefers-reduced-motion: reduce`.

Більшість «систем дизайну» — це палітра й список компонентів. Наша починається з більш нудної та корисної речі: кожен колір тексту має обчислене співвідношення контрасту щодо кожного фону, на якому він фактично з’являється. Не «виглядає добре», а число. Токен другорядного тексту на цьому сайті, `--muted: #666b65`, дає від 4,72:1 до 5,45:1 на семи використаних фонах. Поріг, потрібний для малого тексту, — 4,5:1.

Це число не з’явилося зі здорового глузду. Ми запустили axe-core 4.10.2 на десяти сторінках власного сайту, і єдиним WCAG-правилом, яке системно порушувалося, був контраст: від 31 до 43 вузлів на сторінку, з яких 31 надходили з шапки та підвалу, тож множилися на всі 147 адрес. Вісім кольорів, записаних прямо в таблиці стилів, давали від 2,88:1 до 4,49:1. Найгірший, при 10 px і 3,72:1, був саме рядок із юридичними посиланнями — шлях, яким людина йде, коли хоче скористатися своїм правом.

Друга частина системи — рух, який розглядається як функція, а не як декор. На головній сторінці є 38 елементів, що анімуються нескінченно. Усі вони прикриті кнопкою паузи: під час натискання переходять у стан зупинки, мітка змінюється, а стан оголошується для читачів екрана. Окремо глобальне правило скасовує будь-яку анімацію та перехід, коли система просить зменшений рух, зупиняє плавне прокручування і навіть ховає кнопку паузи, яка стає непотрібною. Ми також перевірили класичну пастку — анімацію, що починається з майже нульової непрозорості й лишає вміст невидимим, коли її скасовано: тут її немає.

Все інше — дисципліна: видимий фокус-індикатор, 2 px, застосований лише під час навігації клавіатурою; пересування стрілками в групах tabsів, за рекомендованою моделлю; форми з помилками, оголошеними як alert, і підтвердженнями, оголошеними як state. І правило, якого ми тримаємося жорстко: те, що ми не змогли перевірити, пишеться як неперевірене. У власному аудиті є розділ про обмеження інструмента, і дві знайдені там вади все ще відкриті — вони нижче, з назвами.

Що входить

Робота, за складовими

Кольори — це токени, а контраст — це обчислене число

Палітра міститься в блоці з 14 змінних, а другорядний текст використовує один токен: `--muted: #666b65`. Співвідношення, перераховані за формулою відносної яскравості з WCAG на семи фонах сайту: 5,45:1 на білому, 5,15, 5,11, 5,03, 5,02, 4,79 і 4,72. Основний текст, `--ink: #181a19`, дає 17,49:1 на білому; зелений акцент `#355c46` — 7,58:1. Коли колір не досягає порога, змінюють токен, а не сперечаються на нараді.

Компоненти мають клавіатурний шаблон, а не лише вигляд

Група tabsів на головній сторінці використовує рухомий tab-index: лише активний tab доступний через Tab, інші виведені з порядку, а стрілки ліворуч/праворуч, Home і End переміщують фокус із скасуванням стандартної поведінки клавіші. Це модель із рекомендованих практик для доступних компонентів, реалізована, а не процитована. У базових компонентах сайту є 21 доступна мітка, 7 станів натиснуто/не натиснуто, 3 зв’язки між заголовком і регіоном, 2 стани вибору, 2 регіони, що оголошують зміни, і 2 зв’язки між командою та панеллю, якою вона керує.

Рух має кнопку зупинки й вимикається за вподобанням системи

На головній сторінці є 38 анімованих елементів, що нескінченно відтворюються, запускаються автоматично та тривають понад п’ять секунд — саме та ситуація, яку регулює критерій «Пауза, зупинка, приховування». Усі 38 закриті кнопками паузи: під час натискання анімації переходять у зупинений стан, а стан кнопки змінюється. Окремо, при `prefers-reduced-motion: reduce` глобальне правило скасовує будь-яку анімацію та перехід, зупиняє плавне прокручування, прибирає зміщення при наведенні миші та приховує кнопку паузи. У головному аркуші є сім таких блоків, плюс один у базовому аркуші.

Видимий індикатор фокусу, лише там, де треба

Контур 2 px solid, у акцентному зеленому, з відступом 5 px, застосований через `:focus-visible` — отже, він з’являється під час навігації з клавіатури і не з’являється при кліку миші. Перевірено в браузері, елемент за елементом, у шапці та на перших командах із вмісту: чотири різні елементи, той самий контур. Ніде в таблиці стилів немає видаленого контуру без замінника.

Форми, які оголошують свої стани

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

Перевірка виконується інструментом, на реальних сторінках

Ми запускаємо axe-core 4.10.2 на живій сторінці, не в тестовому середовищі, на вибірці з десяти сторінок, які охоплюють різні шаблони: головну сторінку, каталог, сторінку товару, індекс послуг, сторінку послуги, матрицю рішень, комбінацію з матриці, контакти, тарифи, статтю та юридичний документ. Сира відповідь записується на сторінці, разом із числом вузлів, а не підсумовується в «відповідає».

Те, що не пройшло, публікується, не округлюється

З того самого аудиту: при ширині 320 px команда в шапці та кнопка меню виходять за межі екрана на 22 px, і сторінка прокручується горизонтально — арифметика тут 362 px вмісту в контейнері 280 px. У юридичних документах посилання в тексті відрізняються від навколишнього тексту лише кольором, а співвідношення між акцентом і основним текстом становить 1,01:1, тож підкреслення є обов’язковим. Обидва випадки відкриті, з письмовим виправленням. Ми публікуємо їх, бо покупець, який вимагає доступності, має право бачити, як виглядає реальний список дефектів.

Без темної теми — сказано, не імітовано

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

Типографіка з правилами, а не з уподобаннями

Одна сім’я для заголовків і тексту, із міжлітерним інтервалом, налаштованим за рівнями — щільніше для великих заголовків, `-0,055em` для рівнів один і два, `-0,035em` для рівня три — та вагою 500 для заголовків. Абзаци використовують вирівнювання рядків, щоб на останньому рядку не залишалося одне слово. Контейнер має максимальну ширину 1240 px з полями 48 px, а кнопки всюди мають однакову висоту рядка. Це правила, записані в таблиці стилів, тож вони діють і після нашого відходу.

Як це виглядає

Шлях, крок за кроком.

01

Інвентар завдань і точок блокування

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

02

Токени та перевірка контрасту, до екранів

Визначаються кольори, фони, на яких вони фактично з’являються, і розраховане співвідношення кожної пари. Ми передаємо таблицю пар із їхніми співвідношеннями. Це значно дешевше, ніж наприкінці виявити, що обрану палітру не можна використати для дрібного тексту.

03

Компоненти, з шаблоном клавіатури, записаним разом із виглядом

Кожен інтерактивний компонент отримує, у тому самому коміті, вигляд і поведінку: що відбувається на Tab, на стрілки, на Escape, що оголошується і як. Доданий пізніше шаблон клавіатури — це переписування, а не доповнення.

04

Аудит з інструментом, на реальних сторінках, з переданим сирим результатом

Ми запускаємо інструмент на вибірці, що охоплює різні шаблони, і передаємо сирий вивід, а не резюме. Кожне зауваження отримує місце в коді, порушений критерій, запропоноване виправлення і критерій перевірки після виправлення — наприклад: кількість вузлів із низьким контрастом має зменшитися до нуля на сторінці, що містить лише заголовок і підвал.

05

Передача, з переліком неперевіреного

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

Token de culoare curaport calculat1componentă cu tiparde tastatură scrisodată cu aspectul2verificare cu unealtăpe pagini reale, curezultatul brutpublicat3Ce pică la pasul trei se întoarce la pasul unu.
Un ciclu în 3 pași

Дані

Чого торкаємося, де воно лежить і скільки лишається

Запитання, які ставить кожен, у кого є відповідальний за захист даних, — поставлені тут раніше, ніж їх поставить він.

Що ми збираємо на етапі дослідження
Завдання, які людям справді потрібно виконати, контекст, у якому вони їх виконують, і місце, де вони зупиняються. Коли це передбачає записи, інтерв’ю або спостереження за реальними сесіями, заздалегідь визначають, хто бере участь, що записується, хто має доступ і як довго це зберігається — письмово, а не за мовчазною домовленістю.
Результати аудиту доступності
Сирий вивід інструменту, групування вузлів за парою колір–фон, незалежно перераховані коефіцієнти та місце кожного кольору в коді. Це передається як версійований документ поруч із кодом, а не як презентація — щоб будь-хто міг відтворити вимірювання за командами в додатку.
Що потрапляє в код, а що залишається в обговоренні
Токени, компоненти, шаблони клавіатури та правила руху потрапляють у таблицю стилів і в компоненти. Переваги, які не можна виразити як правило — «щоб виглядало тепліше» — залишаються рішеннями для обговорення, а не просочуються як значення, записані прямо в компоненти. Звідти зазвичай походять кольори, які не проходять перевірку.
Переваги відвідувача
Перевага зменшеного руху зчитується із системи через media query і не зберігається в нас. Пам’ятати темну тему не потрібно. Вимірювання трафіку проходить через інструмент, налаштований на проєкті, і активується після згоди; це не стосується системи дизайну, але стосується тієї самої сторінки.
Що ми не припускаємо
Ми не припускаємо, що автоматичний результат означає відповідність. Інструмент охоплює частину критеріїв; решта потребує ручної перевірки, а деякі речі взагалі не вдалося перевірити доступними інструментами — активацію з клавіатури, наприклад, тому що використана панель браузера не виконує активацію за замовчуванням. У звіті написано так: неперевірено, не пройдено.

Випадок

Вісім кольорів, одна змінна і список, що залишився відкритим

Ситуація

Власний сайт, нещодавно перероблений, із уже наявною системою токенів. Ніхто нічого не скаржив. Питанням було не «чи добре виглядає?», а «що скаже інструмент, який не має думок?»

Що ми збудували

Я впровадив axe-core 4.10.2 у live-сторінку і запустив його на десяти вибраних сторінках для різних шаблонів. Єдиним правилом WCAG, яке систематично порушувалося, був контраст. Я згрупував вузли за парою текст–фон, перерахував кожне співвідношення за формулою відносної яскравості зі стандарту — щоб не залежати від одного інструмента — і знайшов кожен колір у таблиці стилів. Вісім значень, записаних безпосередньо в коді, спричиняли всі постійні помилки: 3,89:1 на 25 посиланнях у підвалі, 2,88:1 на номерах кроків, 3,72:1 на рядку з юридичними посиланнями, і ще п’ять між 3,99 та 4,49. Потрібний токен уже існував; проблема була в тому, що його обходили вісім правил.

Що вийшло

Вісім значень замінили на токен, а токен налаштували так, щоб він проходив поріг на всіх семи фонах сайту. Перевірено двічі: у репозиторії більше не з’являється жоден із восьми кольорів, а таблиця стилів, яку сьогодні віддає production, містить лише токен. Перераховано незалежно: 4,72:1 у найгіршому випадку та 5,45:1 на білому. Решта аудиту підтвердила те, що вже було правильним — індикатор фокусу, клавіатурний шаблон у групах вкладок, мітки та стани у формі, повне покриття анімацій кнопками паузи.

Чого цей випадок не каже

Два висновки залишилися відкритими і записані саме так: на ширині 320 px шапка виходить за екран на 22 px, а в юридичних документах посилання в тексті вирізняються лише кольором, із співвідношенням 1,01:1 щодо навколишнього тексту — одного кольору недостатньо, потрібне підкреслення. І межа методу: автоматичний інструмент покриває лише частину критеріїв. Активацію з клавіатури не вдалося перевірити доступними засобами, і вона позначена як неперевірена, а не пройдена.

Питання

Про що нас питають, перш ніж зателефонувати

Що саме означає у вас «доступний дизайн»?

Це означає числа, а не прикметники. Допоміжний текст на цьому сайті використовує один токен, `#666b65`, який дає від 4,72:1 до 5,45:1 на семи фонах, де він з’являється — потрібний поріг для малого тексту становить 4,5:1. Фокус — це контур 2 px, який з’являється лише під час навігації клавіатурою. Рух має кнопку зупинки й повністю скасовується за системної переваги зменшеного руху. Кожне з цих тверджень має місце в коді та спосіб перевірки.

Як ви перевіряєте? Яким інструментом?

axe-core 4.10.2, запущений на live-сторінці, на десяти сторінках, що покривають різні шаблони — головна сторінка, каталог, сторінка продукту, індекс і сторінка сервісу, матриця рішень і її комбінація, контакт, тарифи, стаття, юридичний документ. Сирий результат, із кількістю вузлів на сторінку, входить у документ. Понад це ми вручну перераховуємо співвідношення контрасту за формулою зі стандарту, щоб не залежати від одного інструмента. І явно пишемо, що саме не вдалося перевірити.

Що у вас не пройшло?

На момент аудиту єдиним систематично порушеним правилом був контраст: від 31 до 43 вузлів на сторінку, з яких 31 — із шапки та підвалу, тобто помножені на всі 147 адрес. Вісім кольорів, записаних безпосередньо в таблиці стилів, давали від 2,88 до 4,49:1; найгірший, для 10 px і 3,72:1, був рядок із юридичними посиланнями. Усі вісім тепер замінені на токен, а виправлення є в таблиці, яку віддає production. Залишаються відкритими два питання: на 320 px шапка виходить за екран на 22 px, а в юридичних документах посилання в тексті вирізняються лише кольором, із співвідношенням 1,01:1 щодо навколишнього тексту. Обидва мають записане виправлення.

Навіщо ви публікуєте дефекти власного сайту?

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

Сайт має темну тему?

Ні, і я кажу це тому, що це перевіряється: блок токенів оголошено для трьох селекторів, які отримують однакові значення, а в коді немає жодного правила для переваги схеми. Якщо емулювати темну схему в браузері, сторінка лишається білою. Добре те, що всі виміряні співвідношення контрасту дійсні в обох схемах. Те, що треба виправити, — це перемикач теми, який не змінює кольори, тобто мертвий код. Справжня темна тема означає повне повторне вимірювання контрасту — воно не переноситься зі світлої.

Анімації не дратують користувачів?

Можуть, і тому мають два виходи. Перший: кожен елемент, що анімується без кінця, покрито кнопкою паузи — на головній сторінці ми перевірили, що всі 38 покриті, нуль непокритих. Другий: за системної переваги зменшеного руху глобальне правило скасовує будь-які анімації та переходи, зупиняє плавне прокручування і навіть ховає кнопку паузи. Ми перевірили й класичну пастку: якщо анімація починається майже з нульової непрозорості й скасовується, вміст може залишитися невидимим. Тут цього не стається, бо елементи не мають зниженої базової непрозорості.

Ви постачаєте й код, чи лише макети?

Ми постачаємо токени та компоненти в коді. Система дизайну, яка лишається в інструменті проєктування, розмивається при першій терміновій зміні: хтось пише колір прямо в компоненті, бо «так тут виглядає краще», і через шість місяців у вас є вісім паралельних кольорів, що не проходять перевірку. Саме це сталося і в нас, це задокументовано вище, і тому токен — єдине джерело істини для кольору допоміжного тексту.

Що ви не можете перевірити?

Кілька конкретних речей, записаних саме так в аудиті. Активація з клавіатури: використана браузерна панель не дає активації за замовчуванням — натискання Enter на кнопці не генерує клік — тож ми не повідомляємо висновки щодо Enter і Space. Емуляція переваги зменшеного руху: ми не змогли увімкнути її в браузері, тож правило було перевірене в джерелі, а ручний тест із увімкненою перевагою лишається рекомендованим. І метрики відчутного завантаження не були доступні в інструменті, тож вони позначені як непоміряні, а не оцінені.

Гарантуєте відповідність WCAG?

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

На чому ґрунтуються твердження вище (15 джерел)
  1. Cele opt culori scrise direct în foaia de stil (2,88–4,49:1) nu mai există nici în depozit, nici în foaia de stil servită de producție; în locul lor e `var(--muted)`https://www.megapromoting.com/_next/static/chunks/0~95cl1qc44v9.css · 2026-09-06

14 з них — це код і файли з наших репозиторіїв. Ми не публікуємо їхні назви чи номери рядків: разом, на одній сторінці, це надто точно описало б, як побудовані системи, які належать не лише нам. Ми проходимо їх разом із вами, у репозиторії, за запитом — перевірка залишається можливою, просто вона відбувається в розмові.

Що вам хотілося б налагодити?

Розкажіть про свій процес. Разом визначимо, що варто збудувати, що можна підключити і як перевіримо результат.

Поговорімо