# Создание доступных веб-страниц

> Скетчноут от [Tomomi Imura](https://twitter.com/girlie_mac)
## Викторина перед лекцией
[Викторина перед лекцией](https://ff-quizzes.netlify.app/web/)
> Сила Интернета заключается в его универсальности. Доступ для всех, независимо от инвалидности, является важным аспектом.
>
> \- Сэр Тимоти Бернерс-Ли, директор W3C и изобретатель Всемирной паутины
Вот что может вас удивить: создавая доступные веб-сайты, вы помогаете не только людям с ограниченными возможностями — вы делаете Интернет лучше для всех!
Вы когда-нибудь замечали пандусы на углах улиц? Они изначально были разработаны для инвалидных колясок, но теперь помогают людям с детскими колясками, курьерам с тележками, путешественникам с чемоданами на колесах и даже велосипедистам. Именно так работает доступный веб-дизайн — решения, которые помогают одной группе, часто оказываются полезными для всех. Здорово, правда?
В этом уроке мы изучим, как создавать веб-сайты, которые действительно работают для всех, независимо от того, как они пользуются Интернетом. Вы узнаете практические методы, которые уже встроены в веб-стандарты, попробуете инструменты тестирования и увидите, как доступность делает ваши сайты более удобными для всех пользователей.
К концу этого урока вы будете уверенно включать доступность в свой рабочий процесс разработки. Готовы узнать, как продуманные дизайнерские решения могут открыть Интернет для миллиардов пользователей? Давайте начнем!
> Вы можете пройти этот урок на [Microsoft Learn](https://docs.microsoft.com/learn/modules/web-development-101/accessibility/?WT.mc_id=academic-77807-sagibbon)!
## Понимание вспомогательных технологий
Прежде чем мы перейдем к программированию, давайте немного разберемся, как люди с различными возможностями на самом деле взаимодействуют с Интернетом. Это не просто теория — понимание этих реальных моделей навигации сделает вас гораздо лучшим разработчиком!
Вспомогательные технологии — это удивительные инструменты, которые помогают людям с ограниченными возможностями взаимодействовать с веб-сайтами так, как вы даже не могли себе представить. Как только вы поймете, как работают эти технологии, создание доступных веб-решений станет гораздо более интуитивным. Это как научиться видеть ваш код глазами другого человека.
### Экранные дикторы
[Экранные дикторы](https://en.wikipedia.org/wiki/Screen_reader) — это довольно сложные технологии, которые преобразуют цифровой текст в речь или выводят его на шрифт Брайля. Хотя они в основном используются людьми с нарушениями зрения, они также очень полезны для пользователей с нарушениями обучения, такими как дислексия.
Я люблю думать о экранном дикторе как о очень умном рассказчике, который читает вам книгу. Он читает контент вслух в логическом порядке, объявляет интерактивные элементы, такие как «кнопка» или «ссылка», и предоставляет сочетания клавиш для перемещения по странице. Но вот в чем дело — экранные дикторы могут работать только если мы создаем веб-сайты с правильной структурой и содержательным контентом. Здесь вы, как разработчик, вступаете в игру!
**Популярные экранные дикторы для различных платформ:**
- **Windows**: [NVDA](https://www.nvaccess.org/about-nvda/) (бесплатный и самый популярный), [JAWS](https://webaim.org/articles/jaws/), [Narrator](https://support.microsoft.com/windows/complete-guide-to-narrator-e4397a0d-ef4f-b386-d8ae-c172f109bdb1/?WT.mc_id=academic-77807-sagibbon) (встроенный)
- **macOS/iOS**: [VoiceOver](https://support.apple.com/guide/voiceover/welcome/10) (встроенный и очень функциональный)
- **Android**: [TalkBack](https://support.google.com/accessibility/android/answer/6283677) (встроенный)
- **Linux**: [Orca](https://wiki.gnome.org/Projects/Orca) (бесплатный и с открытым исходным кодом)
**Как экранные дикторы навигируют по веб-контенту:**
Экранные дикторы предоставляют несколько методов навигации, которые делают просмотр эффективным для опытных пользователей:
- **Последовательное чтение**: Читает контент сверху вниз, как при чтении книги
- **Навигация по ориентирам**: Перемещение между разделами страницы (заголовок, навигация, основной контент, футер)
- **Навигация по заголовкам**: Перемещение между заголовками для понимания структуры страницы
- **Списки ссылок**: Создание списка всех ссылок для быстрого доступа
- **Элементы управления формами**: Прямое перемещение между полями ввода и кнопками
> 💡 **Вот что меня удивило**: 68% пользователей экранных дикторов в основном навигируют по заголовкам ([WebAIM Survey](https://webaim.org/projects/screenreadersurvey9/#finding)). Это означает, что ваша структура заголовков — это как дорожная карта для пользователей. Если вы сделаете ее правильно, вы буквально поможете людям быстрее находить нужный контент!
### Построение рабочего процесса тестирования
Хорошая новость — эффективное тестирование доступности не обязательно должно быть сложным! Вам нужно будет сочетать автоматизированные инструменты (они отлично выявляют очевидные проблемы) с некоторым ручным тестированием. Вот систематический подход, который, как я обнаружил, позволяет выявить большинство проблем, не занимая весь ваш день:
**Основной рабочий процесс ручного тестирования:**
```mermaid
graph TD
A[Start Testing] --> B{Keyboard Navigation}
B --> C[Tab through all interactive elements]
C --> D{Screen Reader Testing}
D --> E[Test with NVDA/VoiceOver]
E --> F{Zoom Testing}
F --> G[Zoom to 200% and test functionality]
G --> H{Color/Contrast Check}
H --> I[Verify all text meets contrast ratios]
I --> J{Focus Management}
J --> K[Ensure focus indicators are visible]
K --> L[Testing Complete]
```
**Пошаговый контрольный список тестирования:**
1. **Навигация с клавиатуры**: Используйте только Tab, Shift+Tab, Enter, Space и клавиши со стрелками
2. **Тестирование экранного диктора**: Включите NVDA, VoiceOver или Narrator и навигируйте с закрытыми глазами
3. **Тестирование увеличения**: Проверьте на уровнях увеличения 200% и 400%
4. **Проверка контраста цветов**: Проверьте весь текст и элементы интерфейса
5. **Тестирование индикатора фокуса**: Убедитесь, что все интерактивные элементы имеют видимые состояния фокуса
✅ **Начните с Lighthouse**: Откройте DevTools вашего браузера, выполните аудит доступности с помощью Lighthouse, а затем используйте результаты для определения областей фокусировки ручного тестирования.
### Инструменты увеличения и масштабирования
Вы когда-нибудь увеличивали текст на телефоне, когда он слишком мелкий, или щурились на экран ноутбука при ярком солнечном свете? Многие пользователи ежедневно полагаются на инструменты увеличения, чтобы сделать контент читаемым. Это касается людей с ослабленным зрением, пожилых людей и всех, кто когда-либо пытался читать сайт на улице.
Современные технологии увеличения вышли за рамки простого увеличения. Понимание того, как работают эти инструменты, поможет вам создавать адаптивные дизайны, которые остаются функциональными и привлекательными на любом уровне увеличения.
**Современные возможности увеличения в браузерах:**
- **Масштабирование страницы**: Пропорционально увеличивает весь контент (текст, изображения, макет) — это предпочтительный метод
- **Только текстовое увеличение**: Увеличивает размер шрифта, сохраняя исходный макет
- **Увеличение с помощью жестов**: Поддержка мобильных устройств для временного увеличения
- **Поддержка браузеров**: Все современные браузеры поддерживают увеличение до 500% без нарушения функциональности
**Специализированное программное обеспечение для увеличения:**
- **Windows**: [Magnifier](https://support.microsoft.com/windows/use-magnifier-to-make-things-on-the-screen-easier-to-see-414948ba-8b1c-d3bd-8615-0e5e32204198) (встроенный), [ZoomText](https://www.freedomscientific.com/training/zoomtext/getting-started/)
- **macOS/iOS**: [Zoom](https://www.apple.com/accessibility/mac/vision/) (встроенный с расширенными функциями)
> ⚠️ **Дизайнерское соображение**: WCAG требует, чтобы контент оставался функциональным при увеличении до 200%. На этом уровне горизонтальная прокрутка должна быть минимальной, а все интерактивные элементы должны оставаться доступными.
✅ **Проверьте свой адаптивный дизайн**: Увеличьте браузер до 200% и 400%. Адаптируется ли ваш макет? Можно ли по-прежнему получить доступ ко всем функциям без чрезмерной прокрутки?
## Современные инструменты тестирования доступности
Теперь, когда вы понимаете, как люди навигируют по Интернету с помощью вспомогательных технологий, давайте изучим инструменты, которые помогут вам создавать и тестировать доступные веб-сайты.
Думайте об этом так: автоматизированные инструменты отлично выявляют очевидные проблемы (например, отсутствие alt-текста), а ручное тестирование помогает убедиться, что ваш сайт удобен в реальном использовании. Вместе они дают уверенность, что ваши сайты подходят для всех.
### Тестирование контраста цветов
Вот хорошая новость: контраст цветов — одна из самых распространенных проблем доступности, но она также одна из самых простых для исправления. Хороший контраст полезен для всех — от пользователей с нарушениями зрения до тех, кто пытается читать текст на телефоне на пляже.
**Требования WCAG к контрасту:**
| Тип текста | WCAG AA (минимум) | WCAG AAA (улучшенный) |
|------------|-------------------|-----------------------|
| **Обычный текст** (менее 18pt) | Контраст 4.5:1 | Контраст 7:1 |
| **Крупный текст** (18pt+ или 14pt+ жирный) | Контраст 3:1 | Контраст 4.5:1 |
| **Элементы интерфейса** (кнопки, границы форм) | Контраст 3:1 | Контраст 3:1 |
**Основные инструменты тестирования:**
- [Colour Contrast Analyser](https://www.tpgi.com/color-contrast-checker/) - Десктопное приложение с выбором цвета
- [WebAIM Contrast Checker](https://webaim.org/resources/contrastchecker/) - Веб-приложение с мгновенной обратной связью
- [Stark](https://www.getstark.co/) - Плагин для инструментов дизайна Figma, Sketch, Adobe XD
- [Accessible Colors](https://accessible-colors.com/) - Поиск доступных цветовых палитр
✅ **Создавайте лучшие цветовые палитры**: Начните с цветов вашего бренда и используйте проверку контраста для создания доступных вариаций. Документируйте их как доступные цветовые токены вашей дизайн-системы.
### Комплексный аудит доступности
Наиболее эффективное тестирование доступности сочетает несколько подходов. Ни один инструмент не выявляет все проблемы, поэтому создание тестовой рутины с использованием различных методов обеспечивает тщательную проверку.
**Тестирование в браузере (встроено в DevTools):**
- **Chrome/Edge**: Аудит доступности Lighthouse + панель Accessibility
- **Firefox**: Инспектор доступности с подробным деревом
- **Safari**: Вкладка Audit в Web Inspector с симуляцией VoiceOver
**Профессиональные расширения для тестирования:**
- [axe DevTools](https://www.deque.com/axe/devtools/) - Стандарт автоматизированного тестирования
- [WAVE](https://wave.webaim.org/extension/) - Визуальная обратная связь с выделением ошибок
- [Accessibility Insights](https://accessibilityinsights.io/) - Комплексный набор инструментов тестирования от Microsoft
**Интеграция командной строки и CI/CD:**
- [axe-core](https://github.com/dequelabs/axe-core) - Библиотека JavaScript для автоматизированного тестирования
- [Pa11y](https://pa11y.org/) - Инструмент тестирования доступности командной строки
- [Lighthouse CI](https://github.com/GoogleChrome/lighthouse-ci) - Автоматизированная оценка доступности
> 🎯 **Цель тестирования**: Стремитесь к оценке доступности Lighthouse 95+ как базовому уровню. Помните, автоматизированные инструменты выявляют только около 30-40% проблем доступности — ручное тестирование все еще необходимо!
## Построение доступности с самого начала
Ключ к успеху в доступности — включать ее в основу с самого начала. Знаю, заманчиво думать: «Я добавлю доступность позже», но это как пытаться добавить пандус к дому после его постройки. Возможно? Да. Легко? Не совсем.
Думайте о доступности как о планировании дома — гораздо проще включить доступность для инвалидных колясок в первоначальные архитектурные планы, чем переделывать все позже.
### Принципы POUR: основа доступности
Руководство по доступности веб-контента (WCAG) основано на четырех основных принципах, которые образуют аббревиатуру POUR. Не переживайте — это не скучные академические концепции! На самом деле, это практические рекомендации для создания контента, который подходит для всех.
Как только вы освоите принципы POUR, принятие решений по доступности станет гораздо более интуитивным. Это как иметь мысленный контрольный список, который направляет ваши дизайнерские решения. Давайте разберемся:
**🔍 Воспринимаемость**: Информация должна быть представлена так, чтобы пользователи могли воспринимать ее через доступные им органы чувств
- Предоставляйте текстовые альтернативы для нетекстового контента (изображения, видео, аудио)
- Обеспечьте достаточный контраст цветов для всего текста и элементов интерфейса
- Предлагайте субтитры и расшифровки для мультимедийного контента
- Разрабатывайте контент, который остается функциональным при увеличении до 200%
- Используйте несколько сенсорных характеристик (не только цвет) для передачи информации
**🎮 Оперативность**: Все элементы интерфейса должны быть доступны через доступные методы ввода
- Сделайте все функции доступными через навигацию с клавиатуры
- Предоставьте пользователям достаточно времени для чтения и взаимодействия с контентом
- Избегайте контента, вызывающего судороги или вестибулярные расстройства
- Помогайте пользователям эффективно навигировать с четкой структурой и ориентирами
- Убедитесь, что интерактивные элементы имеют достаточные размеры (минимум 44px)
**📖 Понятность**: Информация и работа интерфейса должны быть ясными и понятными
- Используйте четкий, простой язык, подходящий для вашей аудитории
- Убедитесь, что контент отображается и работает предсказуемо и последовательно
- Предоставляйте четкие инструкции и сообщения об ошибках для ввода данных пользователем
- Помогайте пользователям понимать и исправлять ошибки в формах
- Организуйте контент с логическим порядком чтения и иерархией информации
**💪 Надежность**: Контент должен работать надежно на разных технологиях и вспомогательных устройствах
- Используйте валидный, семантический HTML как основу
- Обеспечьте совместимость с текущими и будущими вспомогательными технологиями
- Следуйте веб-стандартам и лучшим практикам разметки
- Тестируйте на разных браузерах, устройствах и вспомогательных инструментах
- Структурируйте контент так, чтобы он деградировал плавно, если расширенные функции не поддерживаются
## Создание доступного визуального дизайна
Хороший визуальный дизайн и доступность идут рука об руку. Когда вы проектируете с учетом доступности, вы часто обнаруживаете, что эти ограничения приводят к более чистым и элегантным решениям, которые полезны для всех пользователей.
Давайте изучим, как создавать визуально привлекательные дизайны, которые подходят для всех, независимо от их зрительных возможностей или условий, в которых они просматривают ваш контент.
### Стратегии цвета и визуальной доступности
Цвет — мощный инструмент для коммуникации, но он никогда не должен быть единственным способом передачи важной информации. Дизайн, выходящий за рамки использования цвета, создает более надежные и инклюзивные решения, которые работают в различных ситуациях.
**Дизайн для людей с различиями в цветовом восприятии:**
Примерно 8% мужчин и 0,5% женщин имеют какие-либо различия в цветовом восприятии (часто называемые "цветовой слепотой"). Наиболее распространенные типы:
- **Дейтеранопия**: Трудности в различении красного и зеленого
- **Протанопия**: Красный цвет кажется более тусклым
- **Тританопия**: Трудности с синим и желтым (редкий случай)
**Инклюзивные стратегии использования цвета:**
```css
/* ❌ Bad: Using only color to indicate status */
.error { color: red; }
.success { color: green; }
/* ✅ Good: Color plus icons and context */
.error {
color: #d32f2f;
border-left: 4px solid #d32f2f;
}
.error::before {
content: "⚠️";
margin-right: 8px;
}
.success {
color: #2e7d32;
border-left: 4px solid #2e7d32;
}
.success::before {
content: "✅";
margin-right: 8px;
}
```
**Выход за рамки базовых требований к контрасту:**
- Тестируйте свои цветовые решения с помощью симуляторов цветовой слепоты
- Используйте узоры, текстуры или формы наряду с цветовым кодированием
- Убедитесь, что интерактивные состояния остаются различимыми без использования цвета
- Учитывайте, как ваш дизайн выглядит в режиме высокого контраста
✅ **Проверьте доступность цветов**: Используйте инструменты, такие как [Coblis](https://www.color-blindness.com/coblis-color-blindness-simulator/), чтобы увидеть, как ваш сайт выглядит для пользователей с различными типами цветового восприятия.
### Индикаторы фокуса и дизайн взаимодействия
Индикаторы фокуса — это цифровой эквивалент курсора, они показывают пользователям клавиатуры, где они находятся на странице. Хорошо продуманные индикаторы фокуса улучшают взаимодействие для всех, делая его понятным и предсказуемым.
**Современные лучшие практики для индикаторов фокуса:**
```css
/* Enhanced focus styles that work across browsers */
button:focus-visible {
outline: 2px solid #0066cc;
outline-offset: 2px;
box-shadow: 0 0 0 4px rgba(0, 102, 204, 0.25);
}
/* Remove focus outline for mouse users, preserve for keyboard users */
button:focus:not(:focus-visible) {
outline: none;
}
/* Focus-within for complex components */
.card:focus-within {
box-shadow: 0 0 0 3px rgba(74, 144, 164, 0.5);
border-color: #4A90A4;
}
/* Ensure focus indicators meet contrast requirements */
.custom-focus:focus-visible {
outline: 3px solid #ffffff;
outline-offset: 2px;
box-shadow: 0 0 0 6px #000000;
}
```
**Требования к индикаторам фокуса:**
- **Видимость**: Должны иметь контрастность не менее 3:1 с окружающими элементами
- **Ширина**: Минимальная толщина 2px вокруг всего элемента
- **Сохранение**: Должны оставаться видимыми, пока фокус не переместится
- **Отличие**: Должны визуально отличаться от других состояний интерфейса
> 💡 **Совет по дизайну**: Отличные индикаторы фокуса часто используют комбинацию обводки, теней и изменения цвета для обеспечения видимости на разных фонах и в различных контекстах.
✅ **Проверьте индикаторы фокуса**: Пройдитесь по вашему сайту с помощью клавиши Tab и отметьте, какие элементы имеют четкие индикаторы фокуса. Есть ли элементы, которые трудно увидеть или которые полностью отсутствуют?
### Семантический HTML: основа доступности
Семантический HTML — это как GPS для вспомогательных технологий на вашем сайте. Используя правильные HTML-элементы для их предназначения, вы предоставляете экранным считывателям, клавиатурам и другим инструментам подробную карту, которая помогает пользователям эффективно ориентироваться.
Вот аналогия, которая мне очень понравилась: семантический HTML — это разница между хорошо организованной библиотекой с четкими категориями и полезными указателями и складом, где книги разбросаны случайным образом. В обоих местах есть одни и те же книги, но где вы предпочли бы искать нужную?
**Основы структуры доступной страницы:**
```html
Your Site Name
Article Title
Published on
First Section
Content that relates to this section...
Second Section
More related content...
```
**Почему семантический HTML улучшает доступность:**
| Семантический элемент | Назначение | Преимущества для экранных считывателей |
|-----------------------|------------|---------------------------------------|
| `` | Заголовок страницы или раздела | "Область баннера" - быстрая навигация к началу |
| `