0Pricing
HTML Academy · Урок

role button alert dialog и landmark

Применяйте роли ARIA, чтобы сообщать вспомогательным технологиям назначение элементов

«role button alert dialog и landmark» — бесплатный урок HTML Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения HTML Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс HTML Academy содержит 4 уроков всего.

Атрибут role=button

Используйте role="button", когда элемент, не являющийся кнопкой, должен работать как кнопка (в редких случаях):

<span
  role="button"
  tabindex="0"
  onclick="handleClick()"
  onkeydown="e.key==='Enter'||e.key===' ' ? handleClick() : null"
  aria-pressed="false"
>
  Toggle Feature
</span>
<!-- Better: use a real <button> element! -->
<!-- Only use role="button" when you cannot change the HTML element -->

Атрибут role=alert

role="alert" немедленно объявляет об изменениях содержимого пользователям программ чтения с экрана:

<div role="alert" id="error-msg"></div>

<script>
// When injecting an error:
document.getElementById('error-msg').textContent = 'Invalid email address.';
// Screen readers announce this immediately without the user moving focus
// role="alert" implies aria-live="assertive" aria-atomic="true"
</script>

Атрибут role=dialog

role="dialog" обозначает компонент модального диалогового окна:

<div
  role="dialog"
  aria-modal="true"
  aria-labelledby="dialog-title"
  aria-describedby="dialog-desc"
  id="confirm-dialog"
  tabindex="-1"
>
  <h2 id="dialog-title">Confirm Deletion</h2>
  <p id="dialog-desc">This action cannot be undone.</p>
  <button>Cancel</button>
  <button>Delete</button>
</div>

Элемент dialog и роль role=dialog

В современном HTML5 есть встроенный элемент <dialog>:

<dialog id="confirm" aria-labelledby="dialog-title">
  <h2 id="dialog-title">Confirm Deletion</h2>
  <p>This cannot be undone.</p>
  <form method="dialog">
    <button value="cancel">Cancel</button>
    <button value="confirm">Delete</button>
  </form>
</dialog>

<script>
document.getElementById('confirm').showModal();
</script>
<!-- Native dialog handles focus trap and Escape key automatically -->

Обзор ролей ориентиров

Роли ориентиров ARIA организуют страницу в области, между которыми можно перемещаться:

<header role="banner">...</header>
<nav role="navigation">...</nav>
<main role="main">...</main>
<aside role="complementary">...</aside>
<footer role="contentinfo">...</footer>
<form role="form" aria-label="Search">...</form>
<section role="region" aria-label="Stats">...</section>
<!-- Note: prefer semantic HTML elements over ARIA roles
     Only add role= when using generic divs/spans -->

Несколько ориентиров навигации

Если на странице несколько элементов nav, различайте их с помощью aria-label:

<nav aria-label="Primary navigation">
  <ul>...</ul>
</nav>

<nav aria-label="Table of contents">
  <ol>...</ol>
</nav>

<nav aria-label="Footer links">
  <ul>...</ul>
</nav>
<!-- Screen reader landmark list shows: "Primary navigation, navigation"
     "Table of contents, navigation" etc. -->

Атрибут role=status

role="status" в ненавязчивой форме объявляет о несрочных обновлениях:

<!-- Use for: success messages, loading complete, items added -->
<div role="status" aria-live="polite" id="cart-status"></div>

<script>
// When item added to cart:
document.getElementById('cart-status').textContent = '3 items in cart';
// Screen reader announces this when it finishes reading current content
// Less urgent than role="alert"
</script>

Атрибут role=region

role="region" создаёт именованный ориентир для раздела:

<section
  role="region"
  aria-labelledby="stats-heading"
>
  <h2 id="stats-heading">Site Statistics</h2>
  <dl>...</dl>
</section>
<!-- role="region" only creates a landmark IF it has an accessible name
     Without aria-label or aria-labelledby, it is not a landmark -->

Атрибут role=search

role="search" обозначает функцию поиска:

<form role="search" action="/search">
  <label for="q">Search</label>
  <input type="search" id="q" name="q">
  <button type="submit">Go</button>
</form>
<!-- role="search" landmark: screen readers list it as "Search, search"
     Users jump directly to the search form -->

Роли role=presentation и none

role="presentation" (псевдоним: role="none") удаляет семантику элемента:

<!-- Table used for layout (bad practice, but if inherited): -->
<table role="presentation">
  <tr><td>Layout column 1</td><td>Layout column 2</td></tr>
</table>
<!-- role="presentation" removes the table semantics
     Screen reader won't announce it as a table
     Children's semantics are also affected -->

Быстрая проверка

В чём разница между role=alert и role=status?

Итоги: роли ARIA

Распространённые роли ARIA:

  • role="button" — элемент, не являющийся кнопкой, работает как кнопка (добавьте tabindex + JS)
  • role="alert" — немедленное настойчивое объявление
  • role="dialog" — модальное диалоговое окно (предпочтительно использовать встроенный <dialog>)
  • role="status" — ненавязчивое объявление об обновлении
  • role="region" — ориентир для именованного раздела
  • role="search" — ориентир для формы поиска

Часто задаваемые вопросы

Урок «role button alert dialog и landmark» бесплатный?

Да — полный текст урока «role button alert dialog и landmark» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс HTML Academy, подпишись на CoddyKit PRO. Курс HTML Academy содержит 4 уроков всего.

Чему я научусь в уроке «role button alert dialog и landmark»?

Применяйте роли ARIA, чтобы сообщать вспомогательным технологиям назначение элементов Ты практикуешь HTML Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать HTML Academy?

Предыдущий опыт не требуется. HTML Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «role button alert dialog и landmark»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке HTML Academy?

Да. Каждый урок HTML Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Когда использовать ARIA вместо встроенного HTML
  2. role button alert dialog и landmark
  3. aria-label aria-labelledby и aria-describedby
  4. aria-hidden и aria-live
← Назад к HTML Academy