Сергей Горобцов "Веб для незрячих"
Я.Субботник в Новосибирске
О докладе:
Вводная по основным минимальным моментам поддержки вспомогательных технологий в вебе. Мы поговорим о способах взаимодействия с программами экранного чтения. Будут приведены рекомендации по работе с элементами форм, а также рассказано о проблемах кастомных элементов форм. А еще мы рассмотрим accessibility в HTML5.
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Сергей Горобцов "Веб для незрячих"
1. Веб для незрячих
Сергей Горобцов
Руководитель группы
интерфейсов смежных сервисов
Я.Субботник, Новосибирск, 19 ноября 2011 года
2. Картина мира
• более 250 млн. людей со зрительной дисфункцией
• около 100 млн. людей с полной слепотой
• в России официально зарегистрированных незрячих
около 275 тысяч человек
• Примерно 6-‐12% от 270 тысяч человек пользуются
интернетом
• в РФ не принята практика внедрения accessability
2
8. Системы считывания экранной
информации
• анализ страницы
• построение структуры страницы
• озвучивание элементов, на которых в данный
момент находится фокус, озвучивание действий
пользователя
8
9. Узкие места
• отсутствие семантики
• отсутствие поддержки клавиатурной навигации
• кастомные элементы форм, а, как следствие,
отсутствие понимания сценария и состояния этого
элемента
• фоновые изменения внутри виджетов
9
10. Проблемный пример
• кастомный чекбокс
• кастомная кнопка, доступная только при
отмеченном чекбоксе
принимаю правила Подтвердить
10
11. Проблемный пример
<div class="b-checkbox" id="ch1"></div>
<label for="ch1">принимаю правила</label>
<div class="b-button">Подтвердить</div>
принимаю правила Подтвердить
11
12. WAI-‐ARIA
WAI-‐ARIA, the Accessible Rich Internet Applica4ons Suite,
определяет способы, как сделать веб-‐контент
и веб-‐приложения более доступными для людей
с ограниченными возможностями. В особенности
это касается динамического контента
и продвинутых пользовательских интерфейсов,
разработанных при помощи Ajax, HTML, JavaScript и
им подобных технологий.
h_p://www.w3.org/WAI/intro/aria
12
13. Клавиатурная навигация
Элементы имеющие фокус «по-‐дефолту»
<a>, <input>, <button>, <object>, <area>, <select>,
<textarea>
tabindex = 0, tabindex = [n]
<div tabindex="0">div имеющий фокус «в потоке»</div>
tabindex = -‐1
<div tabindex="-1">div доступный через focus()</div>
13
16. Кто я?
<div class="b-checkbox" id="ch1"
tabindex="0" role="checkbox"></div>
<label for="ch1">принимаю правила</label>
<div class="b-button" tabindex="0" role="button"
>Подтвердить</div>
принимаю правила Подтвердить
16
17. Значения и свойства
Атрибут aria-‐ помогает описать значение или текущее
состояние элемента
aria-...
...activedescendant, busy, checked, describedby,
disabled, expanded, haspopup, hidden, invalid, label,
labelledby, level, multiline, orientation, posinset,
pressed, readonly, required, selected, setsize,
valuetext, valuemin, valuemax, valuenow...
17
18. Значения и свойства
<div class="b-checkbox" id="ch1"
tabindex="0" role="checkbox"
aria-checked="false" aria-required="true"></div>
<label for="ch1">принимаю правила</label>
<div class="b-button" tabindex="0" role="button"
aria-disabled="true">Подтвердить</div>
принимаю правила Подтвердить
18
19. Значения и свойства
<div class="b-checkbox" id="ch1"
tabindex="0" role="checkbox"
aria-checked="checked" aria-required="true"></div>
<label for="ch1">принимаю правила</label>
<div class="b-button" tabindex="0" role="button"
aria-disabled="false">Подтвердить</div>
принимаю правила Подтвердить
19
20. Значения и свойства
<div id="sliderlabel">вес в граммах</div>
<div class="b-slider">
<div class="b-slider__min">минимальное</div>
<div class="b-slider__max">максимальное</div>
<div class="b-slider__train" tabindex="0" role="slider"
aria-valuemin="64" aria-valuemax="2048"
aria-valuenow="512" aria-valuetext="512 грамм"
aria-labelledby="sliderlabel">512</div>
</div>
минимальное 512 максимальное
20
21. Роли уровня landmark
Помогают определить структуру документа, а так же
добавляют дополнительный уровень навигации.
Имеют аналогии в HTML5 тегах.
role=...
application, banner, complementary, contentinfo, form,
main, navigation, search, article, dirrectory, log,
note, region, status
21
22. Роли уровня landmark
banner <header>, <header role=banner>
complementary <aside>
contenznfo <footer>, <footer role=contenznfo>
main <seczon>, <seczon role=main>
navigazon <nav>, <nav role=navigazon>
22
24. Live Regions
• aria-‐live: off / polite / asserzve
• aria-‐busy: false / true
• aria-‐atomic: false / true
• aria-‐relevant: addizons / removals / text / all
24
25. Использование уже сейчас
• Отсутствие побочных эффектов. Для начала
достаточно простой поддержки landmark roles
• все 4 основных браузерных движка реализовали
поддержку
• поддержка на стороне систем: VoiceOver, JAWS,
Window-‐Eyes, NVDA, Zoomtext и т.д
25