Как сделать большой продукт доступным

Примечание: Хабр не поддерживает указание альтернативного текста у картинок отдельно от видимой подписи, поэтому подписи длинные, не пугайтесь.

Символ инклюзивного дизайна, вплетенный в структуру, напоминающую цепочку ДНКСимвол инклюзивного дизайна, вплетенный в структуру, напоминающую цепочку ДНК

На первый взгляд создание доступной среды в цифровом продукте кажется простой задачей. В конце концов, что может быть проще, чем использовать нормальные кнопки вместо div? Но когда пытаешься масштабировать такой подход, все становится сложнее. В этой статье я начну с базовых компонентов (текстовые поля, попапы), а затем объясню, как сделать доступной целую платформу из множества разных приложений, которые написаны десятками разных команд.

Что я понимаю под масштабируемостью

Wrike — универсальное решение для управления рабочими процессами. Продукт большой, и наша клиентская база тоже: Wrike используют 21 000 компаний разных размеров. 

Люди из разных отделов работают по разным процессам с помощью разных инструментов. Например, менеджеры используют инструменты для планирования ресурсов и диаграммы Ганта, а дизайнеры — плагины для продуктов Adobe и возможность добавлять комментарии прямо на изображения и другие документы. 

Два скриншота Wrike. Первый: описание задачи со статусом, назначенным сотрудником, текстом описания, несколькими комментариями от коллег, включая подгруженную к задаче картинку. Второй: контекстное меню, где можно выбрать статус задачи из конкретного рабочего процессаДва скриншота Wrike. Первый: описание задачи со статусом, назначенным сотрудником, текстом описания, несколькими комментариями от коллег, включая подгруженную к задаче картинку. Второй: контекстное меню, где можно выбрать статус задачи из конкретного рабочего процессаЕще два скриншота Wrike. Первый: «график рабочей загрузки» с расчетными рабочими часами членов команды, на котором мышью перетаскивают задачу на новые даты. Второй: обсуждение картинки, прикрепленной к задаче, в режиме «до/после» с комментариями, прикрепленными к меткам на обеих версиях изображенияЕще два скриншота Wrike. Первый: «график рабочей загрузки» с расчетными рабочими часами членов команды, на котором мышью перетаскивают задачу на новые даты. Второй: обсуждение картинки, прикрепленной к задаче, в режиме «до/после» с комментариями, прикрепленными к меткам на обеих версиях изображения

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

Приложением должно быть удобно пользоваться на разных платформах (Mac, Windows, iOS, Android). Wrike может работать в браузере как одностраничное веб-приложение, но благодаря Electron может предоставлять пользователям на десктопах опыт близкий к нативному. А еще мы хотим, чтобы интерфейс был доступен людям с постоянной или временной инвалидностью.

Wrike разрабатывают 20+ продуктовых команд в трех странах. У нас в активе уже около двух с половиной миллионов строк кода и более 200 репозиториев. Основное требование к доступности — она должна масштабироваться среди всех наших команд. 

Как мы этого добиваемся? Как измеряем прогресс?

Начнем с основ

Для создания веб-страницы требуется:

При правильном использовании HTML страница, скорее всего, уже отвечает критериям доступности. Клавиатурная навигация в приложении, которое сверстано на HTML, будет работать предсказуемо. Правильная структура заголовков и цветовая контрастность текста делают приложение доступным для пользователей с нарушением цветового зрения и тех, кто использует программы экранного доступа (скринридеры).

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

Для проверки можно запустить Lighthouse или другой похожий инструмент и сразу получить автоматически сгенерированный отчет — базовый аудит доступности:

Пример отчета в Lighthouse. На отчете выводится плашка с оценкой 92. Отмечены проблемы с использованием ARIA-атрибутов и контрастом между цветом текста и цветом фонаПример отчета в Lighthouse. На отчете выводится плашка с оценкой 92. Отмечены проблемы с использованием ARIA-атрибутов и контрастом между цветом текста и цветом фона

Предположим, аудит показывает оценку 92 на странице, написанной на чистом HTML. Что это число говорит о странице? И как поддерживать этот уровень по мере того, как приложение становится все более и более сложным?

Apps in the wild

Два браузерных окна: окно слева (single-page application) содержит три шаблона, переключаться между которыми приложение может без перезагрузки страницы; окно справа (обычный веб-сайт) также содержит три страницы, переход между ними сопровождается полной перезагрузкой. Изображение © digitalclaritygroup.comДва браузерных окна: окно слева (single-page application) содержит три шаблона, переключаться между которыми приложение может без перезагрузки страницы; окно справа (обычный веб-сайт) также содержит три страницы, переход между ними сопровождается полной перезагрузкой. Изображение © digitalclaritygroup.com

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

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

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