Вернуться к статьям

Полезные статьи Wcoders

Доступность интерфейса веб-сервиса: формы, контраст, клавиатура, ошибки и WCAG

Практический разбор доступности веб-сервиса: формы, клавиатура, контраст, модальные окна, ошибки и проверка по WCAG 2.2.

Дизайн-система веб-сервиса Тестирование веб-сервиса UI/UX-дизайн веб-сервисов B2B SaaS Dashboard
Доступный интерфейс веб-сервиса с формами и клавиатурной навигацией

Введение

Доступность интерфейса веб-сервиса - это не отдельная опция "для особой аудитории" и не косметическая доработка в конце проекта. Это качество интерфейса, которое помогает людям пользоваться продуктом в разных условиях: с клавиатуры, на маленьком экране, при слабом зрении, с screen reader, с временной травмой руки, в ярком освещении, при усталости, с нестабильным интернетом, с масштабированием страницы, через голосовой ввод или без мыши.

Веб-сервис отличается от обычного сайта тем, что пользователь не только читает страницу. Он регистрируется, входит в личный кабинет, заполняет формы, исправляет ошибки, работает с таблицами, фильтрует данные, оплачивает, загружает документы, меняет настройки, получает уведомления, открывает модальные окна, проходит онбординг и возвращается к продукту снова. Если интерфейс недоступен, проблема становится не только вопросом удобства. Пользователь может не отправить заявку, не оплатить, не увидеть ошибку, не скачать документ, не понять статус или не завершить рабочий процесс.

WCAG, Web Content Accessibility Guidelines, дает международный набор критериев доступности веб-контента. Актуальные требования и уровни соответствия опубликованы в WCAG 2.2 W3C. Для веб-сервисов особенно важны не абстрактные пункты стандарта, а практические вещи: видимые labels у форм, достаточный контраст, управление с клавиатуры, понятный focus, текстовые ошибки, доступные модальные окна, правильная структура страницы, корректные состояния компонентов и тестирование реальных сценариев.

Главная мысль проста: доступный интерфейс обычно становится лучше для всех пользователей. Понятная форма помогает не только человеку со screen reader, но и клиенту, который быстро заполняет заявку с телефона. Видимый focus помогает не только пользователю без мыши, но и сотруднику, который привык работать клавиатурой в админке. Хороший текст ошибки помогает всем, кто не хочет угадывать, что пошло не так.

Что такое доступность веб-сервиса

Доступность веб-сервиса - это способность интерфейса быть понятным, управляемым и надежным для пользователей с разными возможностями, устройствами и способами взаимодействия. Это касается визуального дизайна, HTML-разметки, frontend-логики, текстов, клавиатуры, статусов, ошибок, компонентов, тестирования и процессов команды.

В доступном веб-сервисе:

  • у полей есть понятные labels;
  • кнопки имеют доступные названия;
  • контраст текста достаточен;
  • смысл не передается только цветом;
  • все важные действия доступны с клавиатуры;
  • focus виден;
  • порядок переходов логичен;
  • ошибки описаны текстом;
  • модальные окна не ловят пользователя в тупик;
  • таблицы имеют понятную структуру;
  • состояния загрузки и успеха понятны;
  • пользователь может масштабировать страницу;
  • custom-компоненты не ломают нативную доступность;
  • screen reader получает правильную информацию;
  • дизайн-система учитывает accessibility с первого релиза.

Доступность не означает, что интерфейс должен быть примитивным. Веб-сервис может иметь сложные таблицы, фильтры, личный кабинет, графики, админку, платежи и workflow. Но сложность должна быть структурирована так, чтобы пользователь мог понять, где он находится, что можно сделать, какое действие выполнено и где возникла ошибка.

Почему WCAG важен, но не заменяет здравый смысл

WCAG 2.2 - это стандарт с принципами, критериями успеха и уровнями соответствия. Он помогает командам говорить на одном языке: контраст, keyboard access, focus visible, labels, error identification, name, role, value. Но сам по себе список критериев не гарантирует хороший интерфейс.

Можно формально добавить labels и все равно сделать форму длинной, непонятной и тяжелой. Можно обеспечить контраст, но спрятать главное действие. Можно сделать кнопку доступной с клавиатуры, но поставить ее после десятков лишних элементов в focus order. Поэтому WCAG нужно использовать как технический и методический ориентир, а не как замену продуктового проектирования.

W3C WAI формулирует базовые принципы доступности вокруг четырех направлений: perceivable, operable, understandable и robust. На практическом языке веб-сервиса это означает:

  • пользователь должен воспринимать информацию;
  • пользователь должен управлять интерфейсом;
  • пользователь должен понимать содержание и действия;
  • интерфейс должен корректно работать с браузерами и assistive technologies.

Для бизнеса важен результат: человек должен завершить задачу. Если пользователь не может отправить форму, оплатить, исправить ошибку, найти документ или управлять таблицей без мыши, доступность интерфейса недостаточна, даже если часть критериев формально выполнена.

Уровни WCAG: A, AA и AAA

WCAG использует уровни соответствия A, AA и AAA. Уровень A содержит базовые требования. AA обычно рассматривают как практический ориентир для большинства веб-проектов. AAA включает более строгие критерии, которые не всегда реалистично выполнить для каждого интерфейса.

Для веб-сервиса разумный практический минимум - проектировать основные сценарии с учетом WCAG 2.2 уровня AA. Это не юридическая консультация и не гарантия соответствия. Это инженерный ориентир качества, который помогает избежать типовых проблем.

Что особенно важно для веб-сервиса:

  • 1.4.3 Contrast Minimum;
  • 1.4.11 Non-text Contrast;
  • 2.1.1 Keyboard;
  • 2.4.3 Focus Order;
  • 2.4.7 Focus Visible;
  • 2.5.3 Label in Name;
  • 3.2.1 On Focus;
  • 3.2.2 On Input;
  • 3.3.1 Error Identification;
  • 3.3.2 Labels or Instructions;
  • 3.3.3 Error Suggestion;
  • 4.1.2 Name, Role, Value;
  • 4.1.3 Status Messages.

Не нужно пытаться превратить статью или ТЗ в полный перевод WCAG. Важно выделить критерии, которые влияют на рабочие сценарии: формы, навигацию, ошибки, компоненты, роли, таблицы и уведомления.

Хотите запустить похожий проект?

Опишите задачу, и команда Wcoders подскажет, какой формат подойдет: MVP, Telegram Mini App, веб-сервис, интеграция или аудит текущего продукта.

Доступность начинается с HTML

Многие проблемы accessibility появляются не из-за сложного дизайна, а из-за неправильной базовой разметки. Нативные HTML-элементы уже имеют встроенное поведение: кнопка нажимается клавиатурой, input связывается с label, select работает с assistive technologies, form может быть отправлена, checkbox имеет состояние.

Проблема начинается, когда команда заменяет все на div:

  • div вместо button;
  • custom-select без keyboard support;
  • clickable card без роли и focus;
  • поле без label;
  • модальное окно без focus management;
  • tab-interface без правильной семантики;
  • таблица из flex-блоков без структуры.

ARIA может помочь, но не должна быть первым инструментом там, где достаточно нативного HTML. MDN и W3C регулярно повторяют этот принцип: лучше использовать семантические элементы, а ARIA применять там, где нативного элемента недостаточно.

Для веб-сервиса это особенно важно, потому что интерфейс содержит много интерактивных элементов. Чем больше кастомных компонентов, тем выше риск сломать клавиатуру, screen reader, focus и состояния.

Формы: labels, подсказки и обязательные поля

Формы - одна из самых важных зон доступности. Через формы пользователь регистрируется, входит, оставляет заявку, оплачивает, создает заказ, загружает документ, меняет профиль, приглашает сотрудника и отправляет данные в CRM.

W3C WAI Forms Tutorial рекомендует предоставлять labels для всех form controls. В большинстве случаев это делается через элемент label, связанный с полем. Это помогает screen reader, voice input, клавиатурной навигации и обычным пользователям, потому что label увеличивает понятность и кликабельную область.

Практические правила:

  • у каждого поля должен быть видимый label;
  • placeholder не должен заменять label;
  • обязательные поля нужно обозначать понятно;
  • формат ввода нужно объяснять до ошибки;
  • подсказки должны быть рядом с полем;
  • группы radio и checkbox нужно объединять;
  • длинные формы лучше разбивать на шаги;
  • ошибки должны быть связаны с полем;
  • данные не должны исчезать после ошибки.

Пример слабого решения: поле с placeholder "Email" без label. Когда пользователь начинает вводить текст, подсказка исчезает. Если форма длинная, человек может потерять контекст. Для screen reader это также может быть проблемой, если поле не имеет доступного имени.

Пример сильного решения: visible label "Email", hint "На этот адрес придет подтверждение", корректный input type, понятная ошибка и сохранение значения после неудачной отправки.

Ошибки формы: не только красный цвет

WCAG 3.3.1 Error Identification требует, чтобы автоматически обнаруженная ошибка была идентифицирована, а описание ошибки было представлено пользователю в тексте. Это важный пункт для веб-сервисов: пользователь должен понять, что не так и как исправить.

Плохие ошибки:

  • поле просто подсвечено красным;
  • сообщение "Ошибка";
  • сообщение появляется только сверху страницы;
  • пользователь должен сам найти проблемное поле;
  • введенные данные стираются;
  • ошибка говорит техническим языком;
  • ошибка исчезает слишком быстро;
  • screen reader не получает информацию.

Хорошие ошибки:

  • текст рядом с полем;
  • понятное объяснение;
  • конкретная рекомендация;
  • сохраненные данные;
  • связь ошибки с input;
  • summary ошибок для длинной формы;
  • focus на проблемном месте после отправки;
  • текст не зависит только от цвета.

Примеры:

  • "Введите email в формате name@example.com";
  • "Пароль должен быть не короче 12 символов";
  • "Файл слишком большой. Максимальный размер - 10 МБ";
  • "Выберите дату не раньше сегодняшнего дня";
  • "Этот номер уже привязан к другому аккаунту. Войдите или восстановите доступ".

Важно различать ошибки пользователя и ошибки системы. Если CRM недоступна, нельзя писать "Заполните форму правильно". Нужно честно объяснить: "Заявка сохранена, но не отправлена в CRM. Мы повторим отправку автоматически". Это уже связано не только с accessibility, но и с качеством продукта.

Error suggestion и помощь в исправлении

WCAG 3.3.3 Error Suggestion говорит о предложении способов исправления, если ошибка автоматически обнаружена и подсказка не создает риск безопасности или не меняет смысл контента. Для веб-сервиса это особенно полезно в формах регистрации, платежей, профиля, реквизитов и документов.

Ошибка должна не только говорить "неверно", но и помогать:

  • какой формат нужен;
  • какое значение допустимо;
  • что сделать дальше;
  • можно ли повторить;
  • к кому обратиться;
  • какие данные сохранятся.

Пример: пользователь вводит ИНН компании. Плохое сообщение: "Неверное значение". Хорошее сообщение: "ИНН должен содержать 10 или 12 цифр. Проверьте количество символов". Если система может проверить организацию, можно добавить подсказку: "Мы не нашли организацию по этому ИНН. Проверьте номер или введите данные вручную".

Но не всегда можно давать подробности. Для входа в аккаунт не стоит раскрывать, существует ли конкретный email, если это создает риск перечисления пользователей. В таких местах accessibility и безопасность должны работать вместе.

Контраст текста

Контраст - один из самых видимых критериев доступности. Если текст слишком светлый, тонкий или размещен на сложном фоне, его трудно читать. Это касается не только людей со слабым зрением. Низкий контраст мешает на мобильном экране, при ярком солнце, на плохом мониторе и при усталости.

WCAG 2.2 в критерии 1.4.3 Contrast Minimum устанавливает минимальные требования к контрасту текста. В практическом интерфейсе обычно ориентируются на контраст не ниже 4.5:1 для обычного текста и 3:1 для крупного текста на уровне AA.

Что проверить:

  • основной текст;
  • вторичный текст;
  • подписи полей;
  • placeholder;
  • ошибки;
  • disabled-состояния;
  • текст на кнопках;
  • бейджи статусов;
  • табы;
  • ссылки;
  • текст в таблицах;
  • текст поверх изображений или цветных блоков.

Слабое место многих интерфейсов - вторичный текст. Подписи, подсказки и placeholder делают слишком светлыми "для легкости". Но именно эти элементы помогают понять форму. Если подсказка не читается, пользователь ошибается чаще.

Контраст не-текстовых элементов

Доступность касается не только текста. WCAG 1.4.11 Non-text Contrast требует, чтобы важные визуальные элементы имели достаточный контраст. Для веб-сервиса это особенно важно, потому что интерфейс состоит из controls, borders, focus, toggles, checkboxes, radio, графиков, иконок и статусов.

Проверять нужно:

  • границы полей;
  • focus outline;
  • checkbox;
  • radio;
  • switch;
  • иконки действий;
  • иконки статусов;
  • линии графиков;
  • selected state;
  • active tab;
  • disabled state;
  • borders таблиц;
  • drag handles;
  • resize handles.

Например, если поле ввода имеет почти невидимую границу, пользователь может не понять, где вводить данные. Если focus outline слишком бледный, клавиатурный пользователь теряет позицию. Если состояние active tab отличается только тонкой серой линией, разделы трудно различать.

Не передавать смысл только цветом

WCAG 1.4.1 Use of Color требует, чтобы цвет не был единственным способом передачи информации. В веб-сервисе это частая проблема.

Плохие примеры:

  • обязательные поля отмечены только красным label;
  • ошибка показана только красной рамкой;
  • успешные платежи зеленые, проблемные красные, но без текста;
  • график использует только цвет без подписей;
  • выбранный элемент отличается только оттенком;
  • статус заявки понятен только по цвету бейджа.

Лучше использовать сочетание:

  • текст;
  • иконку;
  • форму;
  • подпись;
  • pattern;
  • aria-label там, где нужен доступный текст;
  • legend для графиков;
  • явный статус.

Например, бейдж должен писать "Оплачено", "Ошибка оплаты", "Ожидает проверки", а не просто быть зеленым, красным или желтым. Тогда статус понятен и людям с нарушением цветовосприятия, и пользователям screen reader, и сотрудникам, которые быстро сканируют таблицу.

Клавиатурная навигация

W3C WAI прямо указывает, что многие люди не используют мышь и полагаются на клавиатуру. Для веб-сервиса это критично: пользователь должен уметь пройти основной сценарий без мыши.

Проверять нужно:

  • все ссылки доступны через Tab;
  • все кнопки доступны через Tab;
  • custom-select открывается и управляется клавиатурой;
  • checkbox и radio переключаются;
  • modal открывается и закрывается;
  • focus не теряется;
  • focus не попадает в скрытые элементы;
  • dropdown можно закрыть;
  • таблицы и фильтры доступны;
  • порядок focus логичен;
  • skip link есть там, где нужна быстрая навигация;
  • нет keyboard trap.

Keyboard trap - ситуация, когда пользователь попал в компонент и не может выйти клавиатурой. Часто это случается в модальных окнах, кастомных виджетах, календарях, чатах, каруселях, сложных таблицах.

Для проверки достаточно начать с простого упражнения: отложить мышь и пройти регистрацию, отправку заявки, оплату, фильтр таблицы, открытие документа и закрытие modal. Если сценарий не проходится, accessibility нужно исправлять.

Focus visible

WCAG 2.4.7 Focus Visible требует, чтобы пользователь видел, какой элемент сейчас имеет клавиатурный focus. Без видимого focus человек не понимает, где находится, и не может уверенно управлять интерфейсом.

Частая ошибка - глобально убрать обводку у элементов в фокусе через CSS. Так часто делают ради "красоты", но ломают интерфейс для людей, которые пользуются клавиатурой. Правильнее создать аккуратный, заметный и системный focus style.

Хороший focus:

  • хорошо виден;
  • контрастен;
  • не перекрывается соседними элементами;
  • одинаково работает в компонентах;
  • не исчезает слишком быстро;
  • виден в модальных окнах;
  • виден на темном и светлом фоне;
  • учитывает :focus-visible.

Для дизайн-системы focus должен быть отдельным правилом. Если каждый компонент сам решает, как показывать focus, интерфейс становится непредсказуемым.

Порядок focus

Видимый focus бесполезен, если порядок переходов нелогичен. WCAG 2.4.3 Focus Order требует, чтобы focus проходил в последовательности, сохраняющей смысл и управляемость.

Проблемы:

  • focus прыгает из header в footer;
  • в modal focus уходит за фон;
  • скрытые элементы получают focus;
  • после закрытия modal focus не возвращается на кнопку;
  • в форме focus идет не по порядку полей;
  • в таблице действия идут до данных;
  • sticky-элементы нарушают порядок;
  • мобильное меню остается в tab order после закрытия.

Для веб-сервиса нужно проверять реальные сценарии, а не только отдельную страницу. Например, пользователь открывает таблицу заявок, применяет фильтр, открывает заявку, меняет статус, закрывает drawer и должен вернуться к понятному месту, а не в начало страницы.

Модальные окна и drawer

Модальные окна - частый источник accessibility-проблем. Если modal открыт, пользователь должен работать с ним, а не с контентом за ним. Focus должен перейти внутрь, перемещаться по интерактивным элементам modal и возвращаться после закрытия туда, откуда modal был открыт.

Что нужно проверить:

  • modal имеет доступное название;
  • focus переходит внутрь при открытии;
  • focus не уходит на фон;
  • Escape закрывает modal, если это безопасно;
  • кнопка закрытия доступна;
  • порядок focus логичен;
  • screen reader понимает контекст;
  • фон недоступен для взаимодействия;
  • после закрытия focus возвращается;
  • опасные действия подтверждаются явно.

Drawer похож на modal, если блокирует остальную страницу. Если drawer используется как боковая панель деталей, нужно решить, должен ли он вести себя как modal или как часть страницы. Это не только дизайнерский выбор, но и accessibility-решение.

Таблицы, фильтры и большие списки

Веб-сервисы часто строятся вокруг таблиц: заявки, заказы, платежи, документы, пользователи, товары, партнеры, отчеты. Таблицы должны быть доступны не только визуально, но и структурно.

Важно:

  • использовать таблицу для табличных данных;
  • обозначать заголовки колонок;
  • сохранять понятный порядок чтения;
  • не прятать важные действия только в hover;
  • делать фильтры доступными с клавиатуры;
  • показывать состояние пустого списка;
  • объяснять "ничего не найдено";
  • не передавать статус только цветом;
  • давать текстовые названия иконкам действий;
  • не создавать бесконечный tab-order по сотням строк без необходимости.

Сложные data grid могут требовать специальных ARIA-паттернов и тщательного keyboard behavior. Если таблица простая, лучше не усложнять ее role=grid. Нативная таблица часто надежнее.

Материал Поиск и фильтры в каталоге раскрывает удобство подбора и фильтрации. Для accessibility добавляется вопрос: может ли пользователь применить фильтр, сбросить его, понять количество найденного и открыть результат без мыши.

Статусы, уведомления и сообщения

Веб-сервис постоянно сообщает о событиях: заявка сохранена, платеж прошел, документ загружен, ошибка интеграции, письмо отправлено, сессия истекает, доступ ограничен, данные обновлены.

Эти сообщения должны быть доступны:

  • текст сообщения понятен;
  • сообщение не исчезает слишком быстро;
  • важные ошибки не показываются только toast;
  • success-state связан с действием;
  • status message доступен screen reader;
  • пользователь знает, что изменилось;
  • критичное сообщение не перекрывает кнопку;
  • цвет не является единственным признаком.

WCAG 4.1.3 Status Messages относится к сообщениям, которые можно определить программно так, чтобы assistive technologies могли сообщить о них пользователю без получения focus. Для веб-сервиса это полезно при сохранении формы, обновлении фильтра, загрузке файла или появлении ошибки.

Не каждое сообщение нужно озвучивать. Но если действие завершилось или не завершилось, пользователь должен об этом узнать надежно.

Иконки и кнопки без текста

Иконки экономят место, особенно в таблицах и админке. Но кнопка только с иконкой должна иметь доступное имя. Иначе screen reader скажет что-то вроде "button" без смысла.

Проверить нужно:

  • edit button;
  • delete button;
  • download button;
  • refresh button;
  • close button;
  • search icon;
  • filter icon;
  • menu button;
  • calendar button;
  • upload button.

Если кнопка визуально показывает только иконку, ей нужен текст для assistive technologies, например aria-label="Скачать документ". Если рядом есть видимый текст, лучше не дублировать лишнее.

Также важно учитывать Label in Name. Если визуальный текст кнопки "Сохранить", доступное имя должно содержать "Сохранить", чтобы пользователи голосового ввода могли активировать элемент по видимому названию.

ARIA: когда помогает и когда вредит

ARIA помогает описывать custom-компоненты, когда нативного HTML недостаточно. Но ARIA не добавляет поведение само по себе. Если поставить role="button" на div, элемент не станет автоматически работать как кнопка: нужно добавить keyboard behavior, focus, состояния и правильную обработку событий.

Правило простое:

  • если есть нативный HTML-элемент, используйте его;
  • ARIA применяйте для уточнения семантики;
  • не используйте ARIA для исправления плохой структуры, если можно исправить HTML;
  • не добавляйте roles без понимания keyboard pattern;
  • проверяйте результат screen reader;
  • не переописывайте семантику без причины.

Примеры уместного применения:

  • aria-expanded для раскрывающегося блока;
  • aria-controls там, где связь полезна;
  • aria-describedby для подсказки или ошибки поля;
  • aria-live для важных сообщений;
  • aria-label для иконки-кнопки без видимого текста.

Пример неудачного применения: сделать кастомный select на div, добавить role и забыть поддержку стрелок, Escape, Enter, focus и screen reader announcements.

Доступность личного кабинета

Личный кабинет часто содержит важные данные: заявки, документы, счета, платежи, статусы, договоры, уведомления, историю действий. Если он недоступен, пользователь вынужден обращаться к менеджеру, хотя продукт должен был дать самостоятельный сервис.

Что важно:

  • понятная навигация;
  • доступный вход;
  • видимые ошибки авторизации;
  • восстановление доступа;
  • читаемые статусы;
  • доступные документы;
  • понятные кнопки скачивания;
  • таблицы или списки с заказами;
  • предупреждения перед опасными действиями;
  • поддержка клавиатуры;
  • корректное масштабирование.

Особое внимание - документам. Если пользователь скачивает PDF, сам PDF тоже может быть недоступным. В рамках веб-сервиса нужно хотя бы обеспечить понятные названия документов, тип файла, дату, статус и корректную кнопку скачивания.

О ролях, документах и действиях пользователя подробнее рассказываем в статье Личный кабинет для клиентов и партнеров.

Доступность админ-панели

Админ-панель часто делают "для своих", поэтому доступность откладывают. Это ошибка. Сотрудники работают в админке каждый день, и доступность здесь напрямую влияет на скорость, ошибки и обучение.

В админке важны:

  • keyboard access;
  • понятные таблицы;
  • доступные фильтры;
  • видимый focus;
  • предсказуемые массовые действия;
  • понятные статусы;
  • ошибки интеграций;
  • подтверждение опасных действий;
  • доступная навигация;
  • поддержка масштабирования;
  • не только hover-действия;
  • текстовые названия иконок.

Если действие доступно только при наведении мышью, клавиатурный пользователь может его не найти. Если кнопка удаления стоит рядом с кнопкой просмотра и выглядит похоже, сотрудник может ошибиться. Accessibility в админке - это еще и снижение операционных рисков.

Состав рабочих экранов и права сотрудников подробнее разбираем в статье Админ-панель для веб-сервиса. Например, в B2B SaaS Dashboard есть отчёты, фильтры и роли: именно такие сценарии важно проверять не только мышью, но и с клавиатуры.

Доступность онбординга

Онбординг должен помогать пользователю войти в продукт, а не создавать новые барьеры. Tooltips, tours, overlay, шаги настройки и welcome-экраны часто ломают keyboard navigation и screen reader.

Проверить нужно:

  • можно ли пропустить tour;
  • можно ли пройти его клавиатурой;
  • focus не уходит за overlay;
  • подсказки доступны screen reader;
  • шаги имеют понятные заголовки;
  • пользователь знает, сколько шагов осталось;
  • подсказка не закрывает поле;
  • действие можно выполнить без hover;
  • tour не запускается каждый раз заново.

Онбординг должен быть особенно аккуратным в B2B и SaaS. Если пользователь впервые входит в продукт и не может закрыть подсказку или попасть в главное действие клавиатурой, первый опыт ломается.

Мобильная доступность

Мобильная версия - это не только responsive layout. Доступность на mobile включает размер интерактивных элементов, читаемость, масштабирование, правильные input types, отсутствие горизонтальной прокрутки, понятную клавиатуру, доступные ошибки и стабильные состояния.

Проверить:

  • кнопки достаточно крупные;
  • между действиями есть расстояние;
  • текст не становится слишком мелким;
  • форма не ломается при zoom;
  • input type вызывает нужную клавиатуру;
  • ошибка видна рядом с полем;
  • fixed footer не перекрывает контент;
  • modal помещается на экране;
  • таблица адаптируется в карточки;
  • focus и чтение сохраняют порядок.

WCAG 2.2 добавляет критерии, связанные с фокусом, целевыми размерами и мобильными сценариями. Но даже без формального аудита видно: если пользователь не может нажать нужную кнопку пальцем или прочитать ошибку формы, сервис теряет конверсии.

Доступность дизайн-системы

Лучший способ внедрять accessibility - заложить ее в дизайн-систему. Если кнопка, поле, modal, toast, table и select сделаны доступно, новые экраны автоматически наследуют хорошую основу.

В дизайн-системе нужно описать:

  • focus style;
  • contrast tokens;
  • error states;
  • labels;
  • aria patterns;
  • keyboard behavior;
  • modal behavior;
  • button names;
  • icon button rules;
  • disabled state;
  • loading state;
  • empty state;
  • guidelines для форм;
  • accessibility checklist для компонентов.

В статье Дизайн-система для веб-сервиса подробно разобраны компоненты, формы, таблицы и состояния. Accessibility в этой логике - не отдельный слой, а критерий качества каждого компонента.

Доступность и безопасность

Иногда accessibility пересекается с безопасностью. Например, форма входа должна быть понятной, но не должна раскрывать, зарегистрирован ли email. Восстановление пароля должно быть доступным, но ссылки и коды должны быть защищены. Ошибки платежа должны помогать, но не раскрывать лишнюю техническую информацию.

Примеры баланса:

  • вход: "Если данные верны, вы получите доступ" вместо раскрытия существования аккаунта;
  • восстановление: понятная инструкция без показа чужих данных;
  • права: сообщение "У вас нет доступа к разделу" без перечисления закрытых сущностей;
  • платеж: понятная ошибка и ID обращения, но без чувствительных данных;
  • загрузка файла: объяснение формата и размера, но без внутренних путей сервера.

Accessibility не требует раскрывать секреты. Она требует, чтобы пользователь понимал состояние и следующий шаг в безопасных рамках.

Доступность и SEO

Доступность и SEO частично пересекаются: заголовки, текстовые ссылки, alt для изображений, структура страницы, скорость, читаемость, корректная разметка. Но это не одно и то же.

Для публичных страниц Wcoders важны:

  • один понятный H1;
  • логичная структура H2/H3;
  • текстовые ссылки с понятным anchor;
  • alt у значимых изображений;
  • отсутствие текста только в картинках;
  • читаемый контраст;
  • доступная форма заявки;
  • работа клавиатурой;
  • корректные ошибки формы.

Для закрытого веб-сервиса SEO может быть неважен, но accessibility остается важной. Личный кабинет, админка или B2B-портал могут быть закрыты от индексации, но ими пользуются реальные люди.

Как проверять доступность вручную

Автоматические инструменты полезны, но они находят только часть проблем. Многое нужно проверять вручную.

Базовая ручная проверка:

  • пройти страницу только клавиатурой;
  • убедиться, что focus виден;
  • проверить порядок focus;
  • открыть и закрыть modal;
  • заполнить форму с ошибками;
  • отправить пустую форму;
  • проверить labels;
  • увеличить масштаб до 200%;
  • проверить контраст;
  • проверить иконки-кнопки;
  • проверить table actions;
  • пройти сценарий на мобильном;
  • проверить screen reader хотя бы на ключевых экранах.

W3C WAI Easy Checks предлагает начать с простых проверок: title, alt, headings, contrast, resize, keyboard access, forms, labels и errors. Это хороший первый уровень для команды, которая еще не проводит полный accessibility-аудит.

Автоматическая проверка

Автоматические проверки помогают поймать часть ошибок:

  • отсутствующие labels;
  • низкий контраст;
  • неправильные ARIA-атрибуты;
  • пустые buttons;
  • отсутствие alt;
  • ошибки структуры;
  • элементы без доступного имени;
  • некоторые проблемы form controls.

Инструменты могут быть встроены в:

  • browser extensions;
  • CI;
  • Storybook;
  • unit tests;
  • visual regression;
  • E2E tests;
  • linting.

Но автоматический инструмент не поймет, ясен ли текст ошибки, логичен ли порядок действий, удобно ли проходить таблицу с клавиатуры, помогает ли форма пользователю. Поэтому автоматизация - это фильтр, а не гарантия доступности.

Screen reader проверка

Проверка screen reader помогает понять, как интерфейс воспринимается без визуальной картинки. Для Windows часто используют NVDA, для macOS и iOS - VoiceOver. Не нужно сразу становиться экспертом, но полезно регулярно проверять ключевые сценарии.

Что слушать:

  • понятны ли заголовки;
  • у кнопок есть имена;
  • поля имеют labels;
  • ошибки озвучиваются;
  • modal имеет название;
  • статусы понятны;
  • таблица читается структурно;
  • иконки не читаются как мусор;
  • скрытый декоративный контент не мешает;
  • порядок чтения соответствует смыслу.

Частая проблема: visually hidden текст добавляют без системы, и screen reader начинает читать лишнее. Другая проблема: важный текст есть только визуально, но не связан с control. Нужен баланс: assistive technology должна получать смысл, а не шум.

Accessibility в QA-процессе

Доступность нужно включать в QA до запуска, а не проверять после жалоб. Если продукт уже большой, исправлять все компоненты дорого.

В чек-лист релиза стоит добавить:

  • контраст;
  • keyboard navigation;
  • focus visible;
  • labels;
  • ошибки формы;
  • modal behavior;
  • screen reader для ключевых форм;
  • mobile zoom;
  • table actions;
  • icon buttons;
  • status messages;
  • отсутствие keyboard trap.

В чек-листе тестирования веб-сервиса перед запуском есть проверки форм, ролей, платежей и мобильной версии. Доступность нужно проверять вместе с этими сценариями, а не отдельным формальным проходом в конце.

Доступность и продуктовая аналитика

Accessibility-проблемы часто видны в аналитике косвенно. Пользователи бросают форму, не завершают регистрацию, не проходят оплату, повторно нажимают кнопку, чаще обращаются в поддержку, не открывают документы, долго находятся на экране.

Полезно отслеживать:

  • ошибки формы;
  • повторные отправки;
  • abandon на шаге;
  • возврат к предыдущему шагу;
  • неуспешную загрузку файла;
  • попытки отправить пустую форму;
  • закрытие modal без действия;
  • падение конверсии на мобильных;
  • рост обращений после релиза.

Аналитика не заменяет accessibility-аудит, но помогает найти проблемные сценарии. Если поле часто вызывает ошибку, возможно, проблема не только в валидации, но и в label, hint, формате или тексте ошибки.

Что включить в первый релиз доступности

Для первого релиза веб-сервиса не обязательно проводить большой внешний аудит, если проект небольшой. Но базовые вещи должны быть сделаны.

Минимальный набор:

  • видимые labels у форм;
  • понятные ошибки;
  • достаточный контраст;
  • keyboard navigation для основных сценариев;
  • видимый focus;
  • доступные кнопки и ссылки;
  • корректные состояния disabled и loading;
  • modal с focus management;
  • текстовые статусы;
  • иконки-кнопки с accessible name;
  • проверка мобильной версии;
  • тестирование формы заявки, регистрации и оплаты;
  • отсутствие критичных keyboard traps.

Если в первом релизе есть платежи, личный кабинет, документы, B2B-портал или админка, accessibility нужно проверять особенно внимательно. Ошибка здесь влияет на реальные процессы.

Что подготовить для подрядчика

Чтобы подрядчик правильно оценил accessibility, полезно подготовить не общую фразу "сделать по WCAG", а конкретный контекст.

Подготовьте:

  • какие сценарии критичны;
  • какие роли есть в сервисе;
  • какие формы используются;
  • есть ли таблицы и фильтры;
  • есть ли платежи;
  • есть ли документы;
  • нужен ли screen reader testing;
  • какой уровень WCAG целевой;
  • нужна ли документация для компонентов;
  • какие браузеры и устройства важны;
  • нужно ли тестирование keyboard-only;
  • кто будет принимать работу;
  • нужен ли отчет по accessibility.

Фраза "соответствие WCAG" без уровня, объема и метода проверки может быть слишком размыта. Лучше описать конкретно: "ключевые публичные формы и личный кабинет проектируем с учетом WCAG 2.2 AA, проверяем контраст, клавиатуру, focus, labels, ошибки и screen reader на основных сценариях".

Частые ошибки

Первая ошибка - считать accessibility задачей frontend в конце проекта. На самом деле она касается дизайна, текстов, компонентов, backend-ошибок, QA и продукта.

Вторая ошибка - заменять label placeholder. Placeholder исчезает и не всегда дает полю доступное имя.

Третья ошибка - удалять focus outline. Клавиатурный пользователь теряет управление.

Четвертая ошибка - передавать статус только цветом. Нужен текст или другой дополнительный признак.

Пятая ошибка - делать custom-компоненты без keyboard behavior.

Шестая ошибка - показывать ошибки только сверху формы. Пользователь должен видеть связь с конкретным полем.

Седьмая ошибка - не проверять modal и drawer. Именно там часто ломается focus.

Восьмая ошибка - использовать ARIA вместо нормального HTML. ARIA не исправляет плохую интерактивную логику.

Девятая ошибка - не тестировать мобильную версию с zoom и реальными формами.

Десятая ошибка - думать, что автоматический сканер гарантирует доступность. Он находит часть проблем, но не оценивает весь пользовательский сценарий.

Как Wcoders может подойти к доступности

Для Wcoders доступность логично внедрять как часть разработки веб-сервиса, дизайн-системы и QA. Особенно если проект включает личный кабинет, админку, платежи, документы, формы заявок, таблицы, роли, B2B-портал или SaaS.

Практический подход:

  • определить критичные пользовательские сценарии;
  • заложить accessibility в дизайн-систему;
  • использовать семантический HTML;
  • проверить формы, labels и ошибки;
  • настроить focus styles;
  • проверить keyboard navigation;
  • унифицировать статусы и сообщения;
  • проверить контраст;
  • протестировать модальные окна;
  • провести ручную проверку ключевых экранов;
  • добавить автоматические accessibility checks;
  • включить accessibility в чек-лист релиза.

Такой подход не превращает доступность в отдельный тяжелый процесс. Она становится частью нормального качества интерфейса. Пользователь получает понятный и управляемый продукт, а бизнес снижает риск потерянных заявок, ошибок сотрудников и лишней нагрузки на поддержку.

FAQ

Что такое доступность интерфейса веб-сервиса?

Это способность интерфейса быть понятным и управляемым для разных пользователей, включая тех, кто работает с клавиатуры, screen reader, увеличением масштаба, слабым зрением или без мыши.

Что такое WCAG?

WCAG, Web Content Accessibility Guidelines, - это набор рекомендаций W3C по доступности веб-контента. Для веб-сервисов часто ориентируются на WCAG 2.2 уровня AA как практический технический ориентир.

Достаточно ли хорошего контраста?

Нет. Контраст важен, но доступность включает формы, labels, клавиатуру, focus, ошибки, структуру, ARIA, screen reader, мобильную версию и тестирование сценариев.

Можно ли использовать placeholder вместо label?

Лучше не использовать placeholder как замену label. Видимый label помогает пользователю понимать поле даже после начала ввода и улучшает доступность формы.

Нужно ли делать весь интерфейс доступным с клавиатуры?

Да, основные функции должны быть доступны без мыши. Пользователь должен пройти регистрацию, заполнить форму, открыть modal, применить фильтр, оплатить или выполнить другое ключевое действие с клавиатуры.

Почему нельзя убирать focus outline?

Focus показывает, где сейчас находится клавиатурный пользователь. Если его скрыть, человек не понимает, какой элемент будет активирован.

Автоматический тест проверит доступность полностью?

Нет. Автоматические инструменты находят часть ошибок, но не заменяют ручную проверку клавиатуры, screen reader, понятности ошибок и реальных сценариев.

Когда лучше думать о доступности?

С самого начала: в UX, UI, дизайн-системе, frontend-компонентах, текстах ошибок, QA и приемке релиза. Исправлять доступность в конце обычно дороже.

Итог

Доступность интерфейса веб-сервиса - это практическое качество продукта. Она помогает пользователям заполнять формы, читать статусы, управлять интерфейсом с клавиатуры, видеть ошибки, понимать контраст, работать с таблицами, проходить оплату и пользоваться личным кабинетом без лишних барьеров.

WCAG 2.2 дает полезный стандартный язык, но доступность не сводится к формальному чек-листу. Нужно проектировать реальные сценарии: регистрация, заявка, оплата, документ, таблица, modal, фильтр, ошибка, уведомление, админка.

Если доступность заложена в дизайн-систему, компоненты, frontend и QA, веб-сервис становится надежнее для всех. Он меньше ломает пользовательский путь, проще поддерживается, лучше масштабируется и вызывает меньше вопросов у клиентов и сотрудников.

Хотите запустить похожий проект?

Опишите задачу, и команда Wcoders подскажет, какой формат подойдет: MVP, Telegram Mini App, веб-сервис, интеграция или аудит текущего продукта.

Экспертиза Wcoders

За проектом стоит команда, которая думает о продукте, рисках и запуске

Мы смотрим на задачу шире кода: разбираем бизнес-сценарий, роли пользователей, интеграции, нагрузку, безопасность, стоимость поддержки и путь продукта после первого релиза.

01

Кто делает

В работу подключаем продуктовую аналитику, UX, frontend, backend и инфраструктуру ровно в том объеме, который нужен проекту.

02

Как принимаем решения

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

03

Как проектируем архитектуру

Сразу продумываем роли, данные, API, интеграции, админку, безопасность и точки роста, чтобы продукт не пришлось пересобирать заново.

04

Как контролируем запуск

Проверяем ключевые сценарии, формы, платежи, уведомления, мобильную версию, скорость и поведение системы при ошибках.

Еще по теме

Другие полезные материалы

Собрали рядом материалы, которые помогают лучше разобраться в задаче и выбрать правильный формат разработки.

Компоненты дизайн-системы для веб-сервиса
29 мин чтения

Дизайн-система для веб-сервиса: компоненты, формы, таблицы, состояния и единый UI

Как собрать единый интерфейс веб-сервиса: токены, формы, таблицы, состояния и документация без расхождений между макетами и кодом.

Тестирование веб-сервиса перед запуском: формы, роли, платежи, мобильная версия и интеграции
39 мин чтения

Тестирование веб-сервиса перед запуском: формы, роли, платежи, мобильная версия и интеграции

Практический чек-лист проверки веб-сервиса перед запуском: формы, роли, платежи, мобильная версия, CRM, 1С, аналитика, безопасность и SEO.

Поиск и фильтры в каталоге: удобный подбор товаров, услуг, объектов и заявок
27 мин чтения

Поиск и фильтры в каталоге: как сделать удобный подбор товаров, услуг, объектов или заявок

Разбираем поиск и фильтры в каталоге веб-сервиса: категории, фасеты, сортировку, пустую выдачу, SEO, мобильную версию, производительность, аналитику и админ-панель.