Создание доступных уведомлений, алёртов и других асинхронных элементов

Сергей Кригер

Clock icon

Создание доступных уведомлений, алёртов и других асинхронных элементов

Сергей Кригер

@_sergeikriger

SinnerSchrader логотип.

Загрузка страницы

Браузер перед загрузкой.

Загрузка страницы

URL в аддресной строке.

Загрузка страницы

Страница загружается.

Загрузка страницы

Страница загрузилась.

Загрузка страницы

Страница загрузилась.
Facebook login. Чат поддержки.

Blind users

Круглые очки.

Что, если ошибка?

Информировать

Live Regions

aria-live

aria-live="polite | assertive | off"

Как работает Live Region

         
        <div></div>
         
      

Шаг 1: Добавить аттрибут

         
        <div aria-live="polite"></div>
         
      

Шаг 2: Обновить контент

         
        <div aria-live="polite"></div>
         
        const el = document.querySelector('div');
        el.textContent = 'Вам понравилось.'
         
      

Polite vs. Assertive

polite  vs.  assertive  vs.  off

off

off  =  ничего

aria-live polite

"Мама всегда говорила, что жизнь как коробка шоколадных конфет – никогда не знаешь, что внутри."

aria-live assertive

"Мама всегда говорила, что жизнь как коробка шоколадных конфет – никогда не знаешь, что внутри."

Live Regions

aria-live="polite" aria-live="assertive" aria-live="off" aria-controls="[ID] [ID]"

role="log" role="status" role="alert" role="progressbar" role="marquee" role="timer"

Советы по
Live Region

Не будет работать

         
        <div></div>
         
        const el = document.querySelector('div');
        el.setAttribute('aria-live', 'polite');
        el.textContent = 'Вам понравилось.'
         
      

А так будет!

         
        <div aria-live="polite"></div>
         
        const el = document.querySelector('div');
        el.textContent = 'Вам понравилось.'
         
      

Совместимость

         
        <div role="status" aria-live="polite"></div>
         
        <div role="alert" aria-live="assertive"></div>
         
      

On Demand Live Region

         
        const liveRegion = new OnDemandLiveRegion({
          level: 'polite'
        });
         
        liveRegion.say('Вам понравилось.');
         
      

Действие

Focus

el.focus()

Cookies modal

"Мама всегда говорила, что жизнь как коробка шоколадных конфет – никогда не знаешь, что внутри."

Cookies modal

"Мама всегда говорила, что жизнь как коробка шоколадных конфет – никогда не знаешь, что внутри."

Советы по фокусу

Интерактивные элементы

<button> <a> <input> <textarea> ...

tabindex

<div tabindex="0 | 1 | 2 | ...">

Примеры обновлений

Браузер Google Chrome Браузер Firefox Браузер Safari Браузер Internet Explorer

tabindex + ARIA

<div tabindex="0" aria-label="...">

Примеры

Обновить

Envelop

"Мама всегда говорила, что жизнь как коробка шоколадных конфет – никогда не знаешь, что внутри."

Примеры обновлений

Иконка погода Иконка биржа Иконка мяч

Валидация форм

Загрузка файл

document.pdf
0kb

Резюме

Inclusive components by Heydon Pickering

Aria best practices.

Accessibility for everyone

Accessibility for everyone by Laura Kalbag.

Inclusive components by Heydon Pickering

Inclusive components by Heydon Pickering.

Blog of Tatiana Fokina

Blog of Tatiana Fokina.

Спасибо!..

@_sergeikriger

Credits

Icons made by Hadrien from www.flaticon.com is licensed by CC 3.0 BY
Icons made by Freepik from www.flaticon.com is licensed by CC 3.0 BY
Icons made by Google from www.flaticon.com is licensed by CC 3.0 BY
Icons made by Icon Works from www.flaticon.com is licensed by CC 3.0 BY
Icons made by Icongeek26 from www.flaticon.com is licensed by CC 3.0 BY
Icons made by Dave Gandy from www.flaticon.com is licensed by CC 3.0 BY
Icons made by Eleonor Wang from www.flaticon.com is licensed by CC 3.0 BY