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

> Скетчноут от [Tomomi Imura](https://twitter.com/girlie_mac)
```mermaid
journey
title Вашето приключение в ученето за достъпност
section Основи
Разбиране на потребителите: 5: You
Тестови инструменти: 4: You
Принципи на POUR: 5: You
section Изграждане на умения
Семантичен HTML: 4: You
Визуален дизайн: 5: You
ARIA техники: 4: You
section Умение във практика
Навигация с клавиатура: 5: You
Достъпност на формуляри: 4: You
Тестове в реалния свят: 5: You
```
## Въпросник преди урока
[Въпросник преди урока](https://ff-quizzes.netlify.app/web/)
> Силата на уеб е в неговата универсалност. Достъпът за всички, независимо от увреждане, е съществен аспект.
>
> \- сър Тимъти Бърнърс-Лий, директор на W3C и изобретател на Световния широк интернет
Ето нещо, което може да ви изненада: когато създавате достъпни уебсайтове, вие не просто помагате на хора с увреждания — вие всъщност правите уеб по-добър за всички!
Забелязвали ли сте онези наклони на тротоарите на ъгловете? Първоначално са проектирани за инвалидни колички, но сега помагат на хора с детски колички, доставчици с колички, пътници с ролков багаж и колоездачи. Точно така работи достъпният уеб дизайн — решения, които помагат на една група, често в крайна сметка ползват всички. Доста готино, нали?
В този урок ще разгледаме как да създадем уебсайтове, които наистина работят за всички, без значение как сърфират в мрежата. Ще откриете практични техники, които вече са вградени в уеб стандартите, ще усвоите работа с тестови инструменти и ще видите как достъпността прави сайтовете ви по-лесни за използване за всички потребители.
Към края на урока ще имате увереност да направите достъпността естествена част от работния си процес на разработка. Готови ли сте да разгледаме как внимателните дизайнерски решения могат да отворят уеб за милиарди потребители? Да започваме!
```mermaid
mindmap
root((Уеб достъпност))
Users
Четци на екран
Навигация с клавиатура
Гласово управление
Увеличение
Technologies
HTML семантика
ARIA атрибути
CSS индикатори за фокус
Събития с клавиатура
Benefits
По-широка аудитория
По-добро SEO
Съответствие със закона
Универсален дизайн
Testing
Автоматизирани инструменти
Ръчно тестване
Обратна връзка от потребители
Реални помощни технологии
```
> Можете да преминете този урок в [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
flowchart TD
A[🚀 Започнете тестване] --> B{⌨️ Навигация с клавиатура}
B --> C[Преминаване през всички интерактивни елементи с Tab]
C --> D{🎧 Тестване с екранен четец}
D --> E[Тествайте с NVDA/VoiceOver]
E --> F{🔍 Тестване на увеличение}
F --> G[Увеличете на 200% и тествайте функционалността]
G --> H{🎨 Проверка на цвят/контраст}
H --> I[Проверете дали целият текст отговаря на съотношенията на контраст]
I --> J{👁️ Управление на фокуса}
J --> K[Уверете се, че индикаторите за фокус са видими]
K --> L[✅ Тестването е завършено]
style A fill:#e3f2fd
style L fill:#e8f5e8
style B fill:#fff3e0
style D fill:#f3e5f5
style F fill:#e0f2f1
style H fill:#fce4ec
style J fill:#e8eaf6
```
**Стъпка по стъпка контролен списък за тестове:**
1. **Навигация с клавиатура**: Използвайте само Tab, Shift+Tab, Enter, Space и стрелките
2. **Тестване с четещ екран**: Включете NVDA, VoiceOver или Narrator и навигирайте с затворени очи
3. **Тестване на увеличение**: Тествайте на нива 200% и 400%
4. **Проверка на цветен контраст**: Проверете целия текст и UI компоненти
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 |
| **UI компоненти** (бутони, граници на формуляри) | съотношение 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**: Accessibility Inspector с подробен дървовиден изглед
- **Safari**: Одит в 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) - Автоматизирано оценяване на достъпност
> 🎯 **Цел на тестването**: Стремете се към резултат от 95+ на Lighthouse като базова линия. Запомнете, автоматизираните инструменти улавят само около 30-40% от проблемите с достъпността — ръчното тестване остава задължително!
### 🧠 **Проверка на умения: Готови ли сте да откривате проблеми?**
**Нека проверим как се чувствате по отношение на тестването на достъпност:**
- Кой метод на тестване ви се струва най-достъпен в момента?
- Можете ли да си представите да използвате навигация само с клавиатура за цял ден?
- Кой е един бариерен проблем с достъпността, който лично сте изпитали онлайн?
```mermaid
pie title "Проблеми с достъпността, открити от различни методи"
"Автоматизирани инструменти" : 35
"Ръчно тестване" : 40
"Обратна връзка от потребителите" : 25
```
> **Подсилващ увереността съвет**: Професионалните тестери на достъпност използват точно това съчетание от методи. Вие усвоявате индустриални практики!
## Изграждане на достъпност от основата
Ключът към успеха в достъпността е да я вградите от самото начало. Знам, че е изкушаващо да мислите „Ще добавя достъпността по-късно“, но това е като да опитвате да добавите рампа след като домът вече е построен. Възможно ли е? Да. Лесно ли е? Не наистина.
Представете си достъпността като планиране на къща — много по-лесно е да включите достъпност за инвалиди в първоначалните архитектурни планове, отколкото да я пригодите впоследствие.
### Принципите POUR: основата на вашата достъпност
Уеб стандартите за достъпност (WCAG) се основават на четири основни принципа, които образуват акронима POUR. Не се безпокойте — това не са сухи академични понятия! Те са практични насоки за създаване на съдържание, което работи за всички.
След като овладеете POUR, вземането на решения за достъпност става много по-интуитивно. Това е като да имате ментален контролен списък, който води дизайнерските ви избори. Нека ги разгледаме подробно:
```mermaid
flowchart LR
A[🔍 ВЪЗПРИЕМАЕМО Могат ли потребителите да го усетят?] --> B[🎮 УПРАВЛЯЕМО Могат ли потребителите да го използват?]
B --> C[📖 РАЗБИРАЕМО Могат ли потребителите да го разберат?]
C --> D[💪 ЗДРАВОСЛОВНО Работи ли навсякъде?]
A1[Алтернативен текст Субтитри Контраст] --> A
B1[Достъп с клавиатура Без припадъци Времеви ограничения] --> B
C1[Ясен език Предвидимо Помощ при грешки] --> C
D1[Валиден код Съвместим Готов за бъдещето] --> D
style A fill:#e1f5fe
style B fill:#e8f5e8
style C fill:#fff3e0
style D fill:#f3e5f5
```
**🔍 Възприемаемо**: Информацията трябва да бъде представена по начини, които потребителите могат да възприемат чрез наличните им сетива
- Предоставете текстови алтернативи за нехудожествено съдържание (изображения, видеа, аудио)
- Осигурете достатъчен цветен контраст за всички текстове и UI компоненти
- Предлагайте субтитри и транскрипти за мултимедийно съдържание
- Дизайн на съдържание, което остава функционално при преподреждане до 200%
- Използвайте различни сетивни характеристики (не само цвят) за предаване на информация
**🎮 Операбилно**: Всички интерфейсни компоненти трябва да бъдат оперирани чрез наличните входни методи
- Направете цялата функционалност достъпна чрез клавиатурна навигация
- Осигурете достатъчно време на потребителите за четене и взаимодействие със съдържанието
- Избягвайте съдържание, което причинява припадъци или вестибуларни нарушения
- Помагайте на потребителите да навигират ефективно чрез ясна структура и ориентири
- Осигурете подходящи размери за интерактивните елементи (минимум 44px)
**📖 Разбираемо**: Информацията и управлението на интерфейса трябва да са ясни и разбираеми
- Използвайте ясен, прост език, подходящ за аудиторията ви
- Осигурете съдържанието да се появява и функционира по предвидими и постоянни начини
- Предлагайте ясни инструкции и съобщения за грешки при потребителски вход
- Помагайте на потребителите да разбират и коригират грешки във формите
- Организирайте съдържанието с логичен ред на четене и информационна йерархия
**💪 Здрав**: Съдържанието трябва да работи надеждно с различни технологии и помощни устройства
- **Използвайте валиден, семантичен HTML като основа**
- **Осигурете съвместимост с настоящи и бъдещи помощни технологии**
- **Спазвайте уеб стандартите и най-добрите практики при маркирането**
- **Тествайте в различни браузъри, устройства и помощни инструменти**
- **Структурирайте съдържанието така, че да се деградира плавно, когато разширени функции не се поддържат**
### 🎯 **Проверка на принципите POUR: Как да ги запазим**
**Бърза рефлексия върху основите:**
- Можете ли да си спомните уеб функция, която не успява при всеки принцип от POUR?
- Кой принцип ви се струва най-естествен като разработчик?
- Как тези принципи биха подобрили дизайна за всички, а не само за потребители с увреждания?
```mermaid
quadrantChart
title Матрица за въздействие на принципите POUR
x-axis Ниско усилие --> Високо усилие
y-axis Ниско въздействие --> Високо въздействие
quadrant-1 Бързи победи
quadrant-2 Основни проекти
quadrant-3 Помислете по-късно
quadrant-4 Стратегически фокус
Alt Text: [0.2, 0.9]
Color Contrast: [0.3, 0.8]
Semantic HTML: [0.4, 0.9]
Keyboard Nav: [0.6, 0.8]
ARIA Complex: [0.8, 0.7]
Screen Reader Testing: [0.7, 0.6]
```
> **Запомнете**: Започнете с подобрения с голямо въздействие и малко усилия. Семантичен HTML и alt текст предоставят най-голям достъпностен бонус с минимални усилия!
## Създаване на достъпен визуален дизайн
Добър визуален дизайн и достъпността вървят ръка за ръка. Когато проектирате с мисъл за достъпността, често откривате, че тези ограничения водят до по-чисти, по-елегантни решения, които са полезни за всички потребители.
Нека разгледаме как да създадем визуално привлекателни дизайни, които работят за всички, независимо от техните зрителни способности или условията, при които разглеждат вашето съдържание.
### Стратегии за цвят и визуална достъпност
Цветът е мощен инструмент за комуникация, но никога не трябва да бъде единственият начин за предаване на важна информация. Проектирането отвъд използването само на цветове създава по-здрави, всеобхватни изживявания, които работят в повече ситуации.
**Проектирайте за различия във възприятията на цветовете:**
Приблизително 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 около целия елемент
- **Постоянство**: Трябва да остава видим, докато фокусът не се премести някъде другаде
- **Различимост**: Трябва да е визуално различим от други състояния на UI
> 💡 **Съвет при проектиране**: Отличните индикатори често използват комбинация от контур, сянка и промени в цвета, за да осигурят видимост на различни фонове и в различни контексти.
✅ **Проведете одит на индикаторите за фокус**: Навигирайте с таб клавиша през вашия сайт и отбележете кои елементи имат ясни индикатори за фокус. Има ли някой, който е труден за виждане или липсва напълно?
### Семантичен HTML: Основата на достъпността
Семантичният HTML е като да дадете на помощните технологии GPS система за вашият уебсайт. Когато използвате правилните HTML елементи за предназначението им, вие практически предоставяте на екранните четци, клавиатурите и другите инструменти подробна карта, която помага на потребителите да навигират ефективно.
Ето една аналогия, която много ми помогна: семантичният HTML е разликата между добре организирана библиотека с ясни категории и указателни табели и склад, където книгите са разпръснати на случаен принцип. И в двата случая има еднакви книги, но в кое място бихте предпочели да търсите нещо? Точно така!
```mermaid
flowchart TD
A[🏠 HTML Документ] --> B[📰 горна част]
A --> C[🧭 навигация]
A --> D[📄 основно]
A --> E[📋 долна част]
B --> B1[h1: Име на сайта Лого и бранд]
C --> C1[ul: Навигация Основни връзки]
D --> D1[article: Съдържание section: Подсекции]
D --> D2[aside: Странична лента Свързано съдържание]
E --> E1[nav: Връзки в долната част Информация за авторски права]
D1 --> D1a[h1: Заглавие на страница h2: Основни раздели h3: Подраздели]
style A fill:#e3f2fd
style B fill:#e8f5e8
style C fill:#fff3e0
style D fill:#f3e5f5
style E fill:#e0f2f1
```
**Строителни блокове на достъпната структура на страницата:**
```html
Your Site Name
Article Title
Published on
First Section
Content that relates to this section...
Second Section
More related content...
```
**Защо семантичният HTML трансформира достъпността:**
| Семантичен елемент | Предназначение | Полза за екранен четец |
|--------------------|---------------|-----------------------|
| `` | Заглавие на страница или секция | "Banner landmark" - бърза навигация към върха |
| `