Живые регионы (ARIA live regions) — это области веб-страницы, в которых динамически обновляемый контент должен быть доступен для технологий помощи, таких как экранные чтецы. Они позволяют пользователям получать актуальную информацию без необходимости вручную перезагружать страницу или перемещаться к обновлённому элементу.
Библиотека Aria-query предоставляет мощный инструмент для работы с ARIA-атрибутами и схемами, включая определение живых регионов, их роли, состояния и свойства. Основная цель — облегчить проверку корректности ARIA-разметки и автоматизацию анализа доступности интерфейсов.
Живой регион определяется с помощью атрибута aria-live.
Его значения:
Дополнительно могут использоваться атрибуты:
true, полностью
пересылается всё содержимое региона при обновлении; если
false, только изменённая часть.additions, removals,
text).Aria-query предоставляет два ключевых объекта:
Roles — коллекция ролей ARIA с их свойствами и
поддержкой атрибутов. Позволяет определить, какие роли поддерживают
aria-live:
import { roles } from 'aria-query';
const liveRoles = Array.from(roles.keys()).filter(role => {
const roleProps = roles.get(role);
return roleProps.props.has('aria-live');
});
console.log(liveRoles); // ['alert', 'log', 'status', ...]
Здесь происходит проверка, какие стандартные ARIA-роли включают поддержку живых регионов, что полезно при динамической генерации элементов интерфейса.
Properties — коллекция всех ARIA-свойств,
включая aria-live, с их допустимыми значениями и
типами:
import { properties } from 'aria-query';
const ariaLiveProp = properties.get('aria-live');
console.log(ariaLiveProp);
// { type: 'token', values: ['off', 'polite', 'assertive'] }
Это позволяет программно проверять валидность значения атрибута перед установкой.
Используя Aria-query вместе с DOM, можно создавать элементы с корректной ARIA-разметкой:
import { properties, roles } from 'aria-query';
function createLiveRegion(role = 'status', live = 'polite', atomic = true) {
if (!roles.has(role)) {
throw new Error(`Роль ${role} не поддерживается`);
}
const region = document.createElement('div');
region.setAttribute('role', role);
region.setAttribute('aria-live', live);
region.setAttribute('aria-atomic', atomic.toString());
return region;
}
const statusRegion = createLiveRegion();
document.body.appendChild(statusRegion);
Этот подход гарантирует:
aria-live;Aria-query облегчает проверку структуры ARIA на странице:
const liveRegions = Array.from(document.querySelectorAll('[aria-live]')).filter(el => {
const role = el.getAttribute('role') || 'region';
return roles.has(role) && roles.get(role).props.has('aria-live');
});
liveRegions.forEach(region => {
console.log(region.getAttribute('role'), region.getAttribute('aria-live'));
});
Это позволяет:
aria-relevant и aria-atomicПри динамическом обновлении контента важно корректно управлять:
additions, removals,
text);Пример динамического обновления:
const region = createLiveRegion('log', 'assertive', false);
region.setAttribute('aria-relevant', 'additions text');
function updateRegion(message) {
const p = document.createElement('p');
p.textContent = message;
region.appendChild(p);
}
updateRegion('Новая запись в журнале');
В данном случае экранный чтец объявит только добавленный текст, не пересылая весь предыдущий контент.
Живые регионы применяются для:
Aria-query позволяет:
Использование библиотеки повышает качество доступности интерфейсов, сокращает количество ошибок и упрощает поддержку динамического контента.