Bliss.js предоставляет удобные методы для управления ARIA-атрибутами, позволяя интегрировать доступность напрямую в элементы интерфейса. Библиотека ориентирована на упрощение работы с DOM и предоставляет абстракции для динамического изменения атрибутов, необходимых для поддержки пользователей с ограниченными возможностями.
Bliss.js можно подключить через CDN или как npm-пакет. Основной
объект Bliss расширяет возможности работы с DOM, включая
методы attr и aria для работы с
ARIA-атрибутами.
// Пример подключения через npm
import Bliss from 'blissfuljs';
ARIA (Accessible Rich Internet Applications) включает множество атрибутов, которые описывают состояние элементов, их роль и взаимодействие с пользователем:
role — определяет роль элемента в интерфейсе
(button, dialog, alert и
др.).aria-label — текстовое описание элемента.aria-labelledby — связывает элемент с другим, откуда
берется описание.aria-hidden — скрывает элемент от вспомогательных
технологий.aria-expanded — показывает, раскрыт ли элемент
(true/false).aria-checked — состояние флажков или
переключателей.aria-disabled — указывает на неактивный элемент.Bliss.js позволяет управлять ARIA-атрибутами через метод
aria. Этот метод обеспечивает чтение и запись атрибутов,
автоматически добавляя префикс aria- при необходимости.
let button = Bliss.$('button#submit');
// Установка aria-атрибута
button.aria('expanded', false);
// Получение текущего значения
let expanded = button.aria('expanded'); // false
Метод aria поддерживает массивы и
объекты, что позволяет устанавливать несколько атрибутов
одновременно:
button.aria({
expanded: true,
label: 'Отправить форму'
});
ARIA-атрибуты часто меняются во время взаимодействия с пользователем. Bliss.js упрощает динамическое управление:
button.on('click', function() {
let isExpanded = this.aria('expanded');
this.aria('expanded', !isExpanded);
});
В этом примере при каждом нажатии кнопка переключает состояние
aria-expanded, что корректно отражается для вспомогательных
технологий.
Для элементов списка или табов часто требуется синхронизировать несколько ARIA-атрибутов. Bliss.js позволяет итерировать коллекции и применять атрибуты всем элементам одновременно:
let tabs = Bliss.$$('.tab');
tabs.each(tab => {
tab.aria({
selected: false,
controls: tab.dataset.panel
});
});
tabs[0].aria('selected', true);
В данном примере создается набор вкладок, каждая из которых
связывается с соответствующим панельным элементом через
aria-controls, а активная вкладка помечается
aria-selected.
Bliss.js интегрирует управление ARIA с событиями, что позволяет автоматически синхронизировать состояние интерфейса и атрибутов:
let accordionItems = Bliss.$$('.accordion-item');
accordionItems.on('click', function() {
let isOpen = this.aria('expanded');
this.aria('expanded', !isOpen);
});
Такое решение обеспечивает соблюдение принципов доступности без необходимости вручную менять атрибуты через стандартные методы DOM.
aria-labelledby для сложных
описаний вместо aria-label.aria-, но значения должны
соответствовать спецификации (true/false для aria-expanded,
строка для aria-label и т.д.).Bliss.js позволяет добавлять ARIA-атрибуты к формам, кнопкам и интерактивным компонентам:
let checkbox = Bliss.$('#newsletter');
checkbox.aria({
checked: false,
label: 'Подписаться на новости'
});
checkbox.on('change', function() {
this.aria('checked', this.checked);
});
Такой подход обеспечивает, что все элементы формы остаются доступными для пользователей вспомогательных технологий и автоматически синхронизируются с их состоянием.
ARIA-атрибуты часто комбинируются с визуальными состояниями через классы:
let modal = Bliss.$('#modal');
modal.aria('hidden', true);
Bliss.$('#open-modal').on('click', function() {
modal.aria('hidden', false).addClass('visible');
});
Bliss.js позволяет делать это лаконично, объединяя управление атрибутами и манипуляции с классами, что улучшает читабельность и поддерживаемость кода.
ARIA в Bliss.js становится инструментом, который неразрывно связывает доступность с динамическим интерфейсом, упрощая работу с ролями, состояниями и описаниями элементов без необходимости ручного взаимодействия с DOM API.