Для 90% людей це, мабуть, ніколи не знадобиться ні в роботі ні на співбесідах, тож я зконцентруюсь на тих 10% кому це буде корисним.

Говорячи про семантику всі думають про семантичні теги:

  1. <header />

  2. <main />

  3. <footer />

  4. <section />

  5. <article />

  6. І так далі…

Їх багато. Але коли діло доходить до Доступності то майже ніхто не знає як це робиться, хоч і знають про ‘Семантику’.

Для чого потрібна Семантика ?

Семантика це інструмент дарований із приходом HTML 5, який допомагає налаштувати ‘Доступність’ сайту для скрінрідерів, голосових помічників та клавіатурам Браеля і т.п.

Люди візуально можуть розпізнати елементи, але не завжи ці елементи зверстані так як виглядають, і тому скрінрідери не можуть їх рорпізнати. Тут на допомогу прийшли - семантичні теги, roles, aria-*;

Семантичні теги можна розглянути зайшовши на будь який туторіал, це не цікаво.

Сьогодні поговоримо про [ARIA-*]

Перед початком, ця стаття буде розділена на декілька частин:
  1. ARIA-* (у цій статті)

  2. ROLES

  3. Все разом і як тим користуватись

ARIA

Accessible Rich Internet Applications (ARIA) - Визначає спосіб зробити веб контент або веб застосунки (особливо ті що розроблені за допомогою Ajax, JavaScript) більш доступними для людей із обмеженими можливостями.

ARIA - це просто набір атрибутів які можна додати у будь яку розмітку, але особливо добре це підходить для HTML. Ці атрибути вказують лише на призначення елементу, його стан та взаємодію із іншими елементами.

Майже всі ARIA атрибути мають API, тому їх можна налаштовувати динамічно через JavaScript не змінюючи при цьому HTML (Такий підхід використовують коли є легасі сайт і немає доступу до HTML але потрібно покращити доступність).

ARIA дуже велика тема про яку мало хто знає, і ще менше вміє цим користуватись. Але менше з тим її підтримка браузерами дуже гарна (98.29%, для порівняння підтримка css-flex - 98.16%) . Тож сміливо можна використовувати.

Коли потрібна ARIA ?

Загалом, майже ніколи…

ARIA - абсолютно ніяк не впливає на відображення контенту браузерами, єдине виключення атрибут tabindex - але він впливає на порядок перемикання по елементах натискаючи кнопку TAB, але сьогодні тільки про ARIA.

Використовуючи звичайні HTML 5 теги правильно, ви зможете досягти гарної ‘Доступності', якщо замовник просить покращити доступність тоді уже використовуйте ARIA; Або якщо це легасі HTML 4 код (все на дівах), де ви не можете змінювати HTML.

Також інколи у SPA використовуючи сторонні (легасі) бібіотеки які впривають на контент або які надають готові рішення у вигляді компонентів можна додати ARIA. але краще робити форк таких бібліотек і змінювати код а ніж додавати на всі теги додаткові атрибути через JavaScript.

Детальніше про ARIA

ARIA тісно пов’язані із атрибутом role, тому не всі ARIA атрибути можна використовувати для певних груп тегів.

Про те як поєднувати role та ARIA у наступних матеріалах.

Зараз розберемо які є ARIA атрибути і для чого вони потрібні:

Атрибут

Опис

aria-activedescendant

Ідентифікує поточний активний елемент, коли фокус знаходиться на цьому елеменнті або на нащадках які можуть мати атрибут - фокус

aria-atomic

Вказує на зміни динамічно контенту на сторінці. (по типу - випадаючі нотифікації)

aria-autocomplete

Вказує на поведінку автокомпліту, всього існує 4 варіанти:
1. none - без підказок
2. list - коли при вводі користувачем йому показується список підказок.
3. inline - коли показується текст із підказкою яка завершує початок вводу.
4. both - list & inline - разом.

aria-braillelabel

Цей атрибут виключно для вказання значення тексту для шрифту Браеля.
Приклад.

aria-brailleroledescription

Для вказання значеннь у томуж Шрифті Браеля тільки як опис елементів які не ідентифіковані семантично.

aria-busy

Для позначення того що йде процесинг, лоадери, підгрузки, завантаження. т.п;
values: true | false;

aria-checked

Вказує на стан атрибуту "checked" у чекбоксів а радіо кнопок. Або інших елементів у яких може бути такий атрибут.

aria-colcount

Для того щоб позначити кількість колонок у таких елементах як:
table, grid, treegrid - Але у цьому атрибуту є сенс якщо колонки розділені якимось елеменнтом але належать одній групі елементів.
Приклад

aria-colindex

Для вказання порядку колонки відносно загальної кількості. Працє у таких елементах: table, grid, treegrid

aria-colindextext

Для того щоб розширити aria-colindex і передати окрім порядку колонки також текст який може знаходитись у недрах леяуту.
Приклад

aria-colspan

Як і атрибут colspan - вказує на кількість зайнятих колонок цим елементом.

aria-controls

Вказує на те що цей елемент (або елементи) контролюється елементом якому вказали цей атрибут. Посилання на елементи відбувається за допомомогою ідентифікатора - id;

aria-current

вказує на те що даний елемент є представленим у даний момент, часто вживаються із посиланнями.

Приклад

aria-describedby

Вказує на опис елементу на який силається елемент якому задали цей атрибут, ссилання відбувається через id;

aria-description

Можна надати більш розгорнутий опис елементу, якщо це наприклад, іконка, або кнопка зроблена через div

aria-details

Цей атрибут використовується для того щоб задати додаткову інформацію про контент або сам елемент.

aria-disabled

Вказує на те що стан елементу disabled - із таким елементом не можна взаємодіяти (натискати, редагувати).

aria-dropeffect

Говорить про те що відбудеться із елементом коли закінчиться ефект перетягування:
1. copy - створиться копіця цього елементу.
2. execute - викронається функція параметрами якої будуть данні цього елементу.
3. move - елемент змінить позицію.
4. none (default) - нічого не відбудеться.
5. popup - після перетягування відкриється діалогове вікно або нотифікація.

aria-errormessage

Цей атрибут вказує на елемент у якому задаєтсья помилка для цього елементу, через id; Використовується у валідаціях форм.

aria-expanded

Вказує стан елементу - згорнутий чи розгорнутий. для елементів - (details, expand-panels)

aria-flowto

вказує браузеру або скрінрідеру у якому порядку зчитувати текст на сторінці, можна вказати id елементу або елементів.

aria-grabbed

Вказує на стан елементу - чи тягають його у данний момент

aria-haspopup

Вказує на те чи при якихось маніпуляціях із цим елементом відкриється діалог або попап.
Варіанти

aria-hidden

Вказує на те чи цей елемент схований у данний момент. Старайтесь не вживати інші ARIA атрибути які відповідають за порядок, або фокус стан елементу коли aria-hidden=false.
Інколи це може зламати скріндірери.

aria-invalid

Вказує на помилку значення яке задав користувач.

aria-keyshortcuts

Можна задати комбінацію кнопок - які активують елемент

aria-label

Вказує на елемент у якму заданий опис цього елементу, через ідентифікатор id.

aria-labelledby

Це як aria-label але на стероїдах, працює так само, але:
1. має найвищій приорітет
2. може приймати декілька id, а не 1 як aria-label.
3. можна задати тільки 1 aria-labelledby для елементу, інші будуть ігноруватись.
Інші моменти про які варто знати

aria-level

Вказує порядок всередині ієрархії, наприклад якщо задати роль елменту - heading, і aria-level="3" - то це теж саме що використати елементи h3;

aria-live

Вказує на те що елемент може оновлятись і який саме тип оновлення очікувати.

aria-modal

Вказує чи це діалоговий елемент при його відображенні.

aria-multiline

Вказує на те чи можнна ввести більше 1 рядка тексту в поле.

aria-multiselectable

Вказує на те чи можна вибирати більше оденого значення. Наприклад для селекту чи автокомпліту.

aria-orientation

Вказує орієнтацію елментів:
horizontal, vertical, undefined (default)

aria-owns


Вказує на реальний батьківський елемент якщо по ієрархії його складно визначити, або потрібно ссилатись на інший елемент.

aria-placeholder

Текст підказки

aria-posinset

Вказує порядковий номер елементу у групі.

aria-pressed

Говорить про стан кнопки - чи вона натиснути, чи ні у данний момент.
може мати значення - mixed - для кнопок які мають більше станів (toggle).

aria-readonly

Вказує на те що цей елемент не доступний для редагування.

aria-relevant

використовується у aria-live щоб вказати про те які конккретно нотифікації викличе user agent коли відбудуться зміни в aria-live (складно але то вам навряд колись знадобиться)

aria-required

Вказує на те що це поле - обов’язкове.

aria-roledescription

Таблиця roles - доволі абстрактна, тому цей атрибут дозволяє вказати опис у зручному для читання форматі, або більш розгорнуто

aria-rowcount

Загальна кількість рядків у таблиці чи списку.

aria-rowindex

Який реальний порядок цього елементу у списку чи таблиці.

aria-rowindextext

Окрім порядку рядку можна задати реальне текстове значення.

aria-rowspan

Кількість рядків які об’єднує у собі цей елемент

aria-selected

Вказує на стан selected - і говорить про те чи вибраний цей елемент.

aria-setsize


Вказує реальну кількість елементів у таблиці чи списку, або іншій групі елементів, якщо не всі елементи реально відображені. Наприклад таблиця із кнопкою load more;

aria-sort

Вказує у якому порядку відсортовані елементи: ascending, descending, none (default), other.

aria-valuemax

Вказує на максимальне допустиме значення у цьому елементі.

aria-valuemin

Вказує на мінімальне допустиме значення у цьому елементі.

aria-valuenow

Вказує на значення елементу у данний момент (для елементу range)

aria-valuetext

Вказує читабельний варіант атрибуту - aria-valuenow


Замахався то все оформляти, так дійсно - цих атрибутів багато, поки шукав матеріал, зрозумів що знав меншу половину…

Але це лише теорія, яка можливо, наштовхне вас на цікаві ідеї.

Підсумки

Реально в 95% роботи вам то не знадобиться, а комусь і у 100%. Але я не люблю писати про щось ‘ Хайпове', це інформація і вона може бути корисною або ні, але вона залишиться ‘бути‘.

Поділись своїми ідеями в новій публікації.
Ми чекаємо саме на твій довгочит!
Valentyn Tupota
Valentyn Tupota@valentyn_tupota

Software Engineer

1.4KПрочитань
6Автори
37Читачі
На Друкарні з 11 жовтня

Більше від автора

  • Neural Network [guide] 1

    Все починається із першого нейрону. Алгоритм лінійної регресії для одного нейрону, та принципи його використання.

    Теми цього довгочиту:

    It
  • Frontend [TypeScript] 2

    TypeScript - Як писати код швидше та надійніше. Про неочевидні речі.

    Теми цього довгочиту:

    It
  • Frontend [TypeScript] 1

    TypeScript - Як писати код швидше та надійніше.

    Теми цього довгочиту:

    It

Вам також сподобається

  • Коли лусне корпоративна бульбашка

    Ця стаття призначена для людей, які володіють просунутими навичками програмування та мають щонайменше один рік досвіду роботи в індустрії. Вона має на меті пролити світло на критичні аспекти, які професіонали такого рівня повинні враховувати для подальшого розвитку своєї кар'єри.

    Теми цього довгочиту:

    Програмування
  • Чому розробникам варто вчити філософію

    Для розробника це може здатися нелогічним, але здатність створювати чіткі моделі для завдань, які ви хочете розв’язати, і розуміти, навіщо, перш ніж почати працювати над тим, як це зробити, стає все більш важливою навичкою — особливо в епоху штучного інтелекту.

    Теми цього довгочиту:

    Кодування

Коментарі (3)

Дякую. Про ролі буде?

Вам також сподобається

  • Коли лусне корпоративна бульбашка

    Ця стаття призначена для людей, які володіють просунутими навичками програмування та мають щонайменше один рік досвіду роботи в індустрії. Вона має на меті пролити світло на критичні аспекти, які професіонали такого рівня повинні враховувати для подальшого розвитку своєї кар'єри.

    Теми цього довгочиту:

    Програмування
  • Чому розробникам варто вчити філософію

    Для розробника це може здатися нелогічним, але здатність створювати чіткі моделі для завдань, які ви хочете розв’язати, і розуміти, навіщо, перш ніж почати працювати над тим, як це зробити, стає все більш важливою навичкою — особливо в епоху штучного інтелекту.

    Теми цього довгочиту:

    Кодування