Вся боль доступного Веба

или WCAG 2.0 для людей

Станислав Зубович, EPAM

#A11Y

#Д9Ь

#A11Y

Каким пользователям мы помогаем?

Кто все эти люди? О_о

~20% активных пользователей

Совершенно другой
Point of View

Совершенно другой User eXperience

WCAG 2.0

Сложно!

Checklist?

W3C Checklist

A11Y Checklist

Доступность

это не только

Checklist

Начнемс

Первые шаги

План такой:

Было?

Ну было же :)

Keyboard-only план

Скажем НЕТЪ!

			a, a:focus {
				outline: none;
				outline: 0;
			}
			
			
		

Keyboard-only план

Keyboard-only план

			$(‘a.trap’).keydown(function(event){
				event.preventDefault();
				var href = $(this).attr(‘href’);
				var text = $(this).text();;
				window.open(href, text);
			});
		

Keyboard-only план

Wanted: Free Events!

Wanted: Free Events!

Wanted: Free Events!

Визуальная часть

Визуальная часть

Визуальная часть

Визуальная часть

Формы

Нам нужна помощь?

Try Me

Как работает Screen Reader?

Screen Readers

Screen Reader игнорирует

Screen Reader не забудет

CSS Clipping

			.wcag-hidden {
				border: 0;
				clip: rect(0 0 0 0);
				height: 1px;
				margin: -1px;
				padding: 0;
				position: absolute;
				width: 1px;
			}
		
			<a href="#" class="icon">
				<span class="wcag-hidden">Next</span>
			</a>
			
a { background: url(next.png); }
Link Next

HTML
Имеет значение

Headings & Links

За границами банального

Должно же быть что-то еще, да?

WAI-ARIA

Roles

Roles in HTML

			<span class="btn toggle">Click</span>
		

Roles in HTML

			<span class="btn toggle">Click</span>
			<a href="#" class="btn toggle">Click</a>
		

Roles in HTML

			<span class="btn toggle">Click</span>
			<a href="#" class="btn toggle">Click</a>
			<a href="#" role="button" class="btn toggle">Click</a>
			
Click Button

Roles in HTML

			<table>
			<thead>
			...
			<a href="#">Info</a>
			...</table>
			
table with 2 rows and 1 columns ... Info Link

Roles in HTML

			<table role="presentation">
			<thead>
			...
			<a href="#">Info</a>
			...</table>
			
... Info Link

Roles in CSS

			.btn [role="button] {
				background: green;
				...
			}
		

Widget Roles

States & Properties

Content Relationships

			<label for="choosePassword">Choose Password:</label>
			<input id="choosePassword">
			<span class="help">Passwords must be 8 characters</span>
			
Choose Password: edit protected

Content Relationships

			<label for="choosePassword">Choose Password:
<span class="wcag-hidden">
Passwords must be 8 characters long</span></label>
<input id="choosePassword" type="password"> <span class="help">Passwords must be 8 characters</span>
Choose Password:Passwords must be 8 characters long

Content Relationships

			<label for="choosePassword">Choose Password:</label>
			<input id="choosePassword" 
aria-describedby="choosePasswordHelp">
<span class="help" id="choosePasswordHelp">
Passwords must be 8 characters long</span>
Choose Password:Passwords must be 8 characters long

Content Relationships

			<p id="error_choosePassword" class="error">Error</p>
			<label for="choosePassword">Choose Password:</label>
			<input id="choosePassword" aria-describedby=
"choosePasswordHelp error_choosePassword">
<span class="help" id="choosePasswordHelp">
Passwords must be 8 characters long</span>
Choose Password:Passwords must be 8 characters long. Error

Используйте ARIA аккуратно

High Contrast Mode

Кому нужен High Contrast mode?

А что под капотом?

No background???

Fix it!

Fix it!

			button {
				overflow: hidden;
			}
			button:before {
				content: url(sprite.png);
				margin: -X 0 0 -Y;
			}
		

High Contrast Mode mini checklist

High Contrast Browser Support

Про кого же еще мы забыли?

И напоследок

Волнуетесь об опыте пользовательского взаимодействия
и впечатлении пользователя?

Не обходите эту проблему стороной ©

Let's make web a better place

Спасибо за внимание

Вопросы?

j.mp/RS_WCAG

@BigBadDev

Powered by Shower