ARIA (Accessible Rich Internet Applications) — это набор атрибутов HTML, который позволяет сделать веб-контент и динамические интерфейсы более доступными для людей с ограниченными возможностями. В контексте библиотеки Packery ARIA-атрибуты помогают корректно описывать состояние элементов сетки, их положение и взаимодействие, что особенно важно для пользователей экранных читалок.
Ключевые типы ARIA-атрибутов:
grid, gridcell,
button).Packery управляет положением элементов сетки с помощью JavaScript, перемещая, пересоздавая и изменяя их размеры. Эти изменения могут быть незаметны для вспомогательных технологий, если не используются ARIA-атрибуты.
Пример добавления роли для контейнера:
<div id="grid" role="grid">
<div class="grid-item" role="gridcell" aria-label="Элемент 1"></div>
<div class="grid-item" role="gridcell" aria-label="Элемент 2"></div>
</div>
В данном примере контейнер получает роль grid, а
отдельные элементы — gridcell. Атрибут
aria-label помогает идентифицировать каждый элемент.
Packery часто используется для динамических сеток, где элементы могут перемещаться или исчезать. В таких случаях важно использовать следующие ARIA-атрибуты:
Пример динамического обновления:
var grid = document.querySelector('#grid');
var pckry = new Packery(grid, {
itemSelector: '.grid-item',
gutter: 10
});
// Добавление нового элемента
var newItem = document.createElement('div');
newItem.className = 'grid-item';
newItem.setAttribute('role', 'gridcell');
newItem.setAttribute('aria-label', 'Новый элемент');
grid.appendChild(newItem);
pckry.appended(newItem);
Добавление новых элементов с корректными ARIA-атрибутами обеспечивает доступность изменений для пользователей вспомогательных технологий.
ARIA помогает управлять фокусом на элементах сетки. В Packery элементы можно перемещать, а значит, важно, чтобы при перемещении фокус корректно оставался на активном элементе.
Рекомендации:
Пример:
function focusItem(item) {
document.querySelectorAll('.grid-item').forEach(el => {
el.setAttribute('aria-selected', 'false');
el.setAttribute('tabindex', '-1');
});
item.setAttribute('aria-selected', 'true');
item.setAttribute('tabindex', '0');
item.focus();
}
ARIA-атрибуты не конфликтуют с CSS или JavaScript-логикой Packery. Они лишь предоставляют дополнительную семантическую информацию. Важно следить за тем, чтобы динамические изменения сетки сопровождались соответствующими обновлениями ARIA-атрибутов, иначе экранные читалки будут некорректно интерпретировать состояние интерфейса.
Использование ARIA в Packery обеспечивает:
Правильная комбинация role, aria-label, aria-selected, aria-hidden и aria-live делает сетку Packery полностью доступной без изменения визуального интерфейса.