Как стать автором
Обновить
3361.16
RUVDS.com
VDS/VPS-хостинг. Скидка 15% по коду HABR15

HTML и CSS ошибки, влияющие на доступность. Мой опыт и моего незрячего знакомого Ильи. Часть 12

Время на прочтение6 мин
Количество просмотров665


Хабр, я снова пришёл к вам с практическими советами про доступность вместе с Ильей. Мы показываем, как HTML и CSS могут улучшить или ухудшить её. Напоминаю, что Илья — мой незрячий знакомый, который помогает мне найти наши косяки в вёрстке.


Сегодня мы рассмотрим следующие аспекты:

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

Давайте начнём!


▍ Делаем веб-интерфейсы дружелюбнее к пользователям с дислексией


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


Только это можно очень легко сломать. Достаточно неправильно использовать атрибут spellcheck. Если вы используете значение false, то браузеры отключат проверку правописания.


<body>
  <form class="form" spellcheck="false">
    <!-- здесь элементы формы -->
  </form>
</body>

Не делаете так, пожалуйста! Подсветка ошибок очень сильно помогает мне. Но я не только думаю о себе. Она также полезна для людей с дислексией.


Я познакомился с Викторией. У нее есть дислексия. Я попросил рассказать, какие сложности она встречает в интерфейсах.


«Типичная ошибка, которая очень сильно портит мне жизнь — это бесконечные опечатки. Представьте, что я легко могу сделать ошибку в своём ФИО. И даже Т9 тут не справляется.


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


Пока я слушал Викторию, у меня появлялись идеи, как помочь. В CSS появился псевдо-класс ::spelling-error. Он даёт нам больше возможностей для стилизации. На примере формы отправки сообщения покажу, как он работает.


<body>
  <form class="form">
    <div class="form__group">	
      <label for="name">Имя</label>
      <input id="name" type="text">
    </div>
    <div class="form__group">	
      <label for="email">Email</label>
      <input id="email" type="email">
    </div>	
    <div class="form__group">
      <label for="msg">Сообщение</label>
      <textarea id="msg">Здравсвуйте! Я хотела спросить. Сколько будет стоеть эта футболка?</textarea>
    </div>
    <div class="form__group">
      <button>Отправить</button>
    </div>
  </form>
</body>

::spelling-error {
  background-color: rgba(255, 42, 81, 0.2);
  text-decoration: underline 2px solid rgba(255, 42, 81, 1);
  text-underline-offset: 4px;
}



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


Только мы можем использовать ограниченный набор свойств, а именно: color, background-color, cursor, caret-color, outline, text-decoration, text-emphasis-color и text-shadow. Не густо, но раньше не было ничего.


Я спросил у Виктории, будет ли полезно выделение опечаток, и получил интересный ответ.


«Да, это полезно. Если выбирать из вариантов с подчёркиванием ошибок и без, то, конечно, я выберу вариант с подчёркиванием. Только есть нюанс. Красная волнообразная линия под словом дает вайб учительницы, которая ставила двойки за диктант. Это неприятная ассоциация.


А вот окантовка вокруг слова с ошибкой воспринимается так, что исправляет программа. На неё уже не обижаешься».


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


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


▍ Просто увеличим кликабельную область пунктов в навигации


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




Как вы бы реализовали отступ между пунктами? Я сделал опрос среди подписчиков. Большинство выбрали использовать свойство gap. Что ж, это вполне себе рабочее решение. Внешне проблем не будет. Но я предлагаю вам улучшить его.


Я напомню, что у меня есть травма рук. Тремор, боль в суставах и всё такое. Для меня критичны размеры интерактивных элементов. Честно говоря, мне хочется, чтобы они были максимально большими. К моему сожалению, так не будет. В этом случае интерфейс будет выглядеть некрасиво.


Только не спешите сдаваться. Можно поступить хитрее. Вернёмся к примеру с навигацией. По дизайну есть отступ между пунктами меню. Почему бы его не сделать тоже интерактивным?


В этом поможет свойство padding. Например, отступ между вторым и третьим пунктом разделим пополам. Первую половину добавить ко второму элементу справа, а вторую — к третьему слева. Именно так сделано на самом сайте Хабра.




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


Всегда старайтесь делать размеры интерактивных элементов больше, чем они визуально отображены. Это необходимо мне, как человеку с травмой рук. Да что мне, вам же тоже удобнее будет.


А какое решение будете использовать вы лично — это дело второстепенное. Вы сами решите без моего участия. Но если нужна помощь, то у вас уже есть приём со свойством padding. А ещё я рассказал о трюке на основе псевдо-элементов. Тоже посмотрите.


▍ Что думают пользователи скринридера о сокращениях


В интерфейсах очень часто используются сокращения. Зрячие пользователи уже давно к ним привыкли. Например, сокращение «пн» (понедельник), «м-н» (микрорайон), «200К» (двести тысяч) не вызывает проблем. Мне стало интересно узнать, как пользователи с потерей зрения воспринимают такие элементы.


Как сказал Илья, многое зависит от опыта. Если человек ранее был знаком с сокращением, то быстро сориентируется.


«В целом популярные сокращения, например, дни недели, не вызывают сложностей. Это дело практически мгновенной привычки».


Только в этой ситуации всё равно могут возникнуть небольшие сложности. Сокращения можно перепутать на слух. В этой ситуации пользователи скринридера используют возможность озвучки посимвольно.


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


Теперь перейдём к более сложной ситуации с малоизвестными сокращениями. Они вызывают у многих проблемы. Зрячие пользователи видят, в каком контексте сокращения используются. Например, сокращение «К», обозначающее тысячи.




Зрячим пользователям легко понять смысл, потому что они воспринимают сразу экран интерфейса. Они видят заголовок, число, иконку глаза и сразу думают: «О, это просмотры статьи!». Пользователи с потерей зрения не могут так.


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


Вернёмся к блоку с количеством просмотров статьи. Я думал, как реализовать символ «К». Можно обвернуть его в отдельный элемент <span> и скрыть атрибутом aria-hidden. Рядом добавить альтернативный текст, используя паттерн «vissualy-hidden».


<body>
  <svg height="24" width="24" aria-hidden="true">
    <!-- здесь иконка «Глаз» -->
  </svg>
  <span>4.5</span>
  <span aria-hidden="true">К</span>
  <span class="visually-hidden" role="presentation">тысячи просмотров</span>
</body>

Скринридеры скажут: «Четыре точка пять тысячи просмотров». Уже неплохо.


Правда, в этом решении меня смущает, что индексироваться будет сразу символ «К» и альтернативный текст. Мне кажется, что это нехорошо. Честно, не знаю почему. Просто боюсь, что негативно повлияет на индексирование. Могу быть неправым.


В итоге я придумал второе решение. Символ «К» сверстал, используя графику, и скрыл её атрибутом aria-hidden.


<body>
  <svg height="24" width="24" aria-hidden="true">
    <!-- здесь иконка «Глаз» -->
  </svg>
  <span>4.5</span>
  <svg height="24" width="24" aria-hidden="true">
    <!-- здесь иконка «К» -->
  </svg>
  <span class="visually-hidden" role="presentation">тысячи просмотров</span>
</body>

В этом случае поисковые роботы поймут, что на странице текст «4.5 тысячи просмотров». Вроде гораздо лучше. Но тут я хочу попросить вашей помощи. Что вы думаете? Как лучше верстать такие сокращения? Я буду рад услышать любые мысли. Спасибо!


▍ Заключение


С помощью этой статьи мы с Ильей хотели рассказать вам:

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

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


P.S. Если вы хотите больше узнать о цифровой доступности, пишите мне в ТГ. Ссылка в профиле.


P.S.S. Все статьи серии доступны по тегу html_css_a11y_story_melnik909.

Теги:
Хабы:
+24
Комментарии1

Публикации

Информация

Сайт
ruvds.com
Дата регистрации
Дата основания
Численность
11–30 человек
Местоположение
Россия
Представитель
ruvds