Mithril — легковесный современный JavaScript-фреймворк для построения одностраничных приложений. При разработке интерфейсов важно соблюдать WCAG (Web Content Accessibility Guidelines), чтобы приложение было доступно для людей с ограниченными возможностями. В контексте Mithril это включает корректную работу компонентов, управление фокусом, семантическую разметку и поддержку вспомогательных технологий.
Mithril использует функцию m() для создания виртуальных
DOM-элементов. Для соответствия WCAG критически важно использовать
правильные HTML-элементы:
const Button = {
view: ({ attrs }) => m('button', { type: 'button', ...attrs }, attrs.label)
}
Использование <button> вместо
<div> с обработчиком клика обеспечивает поддержку
клавиатуры, фокусировки и доступных событий. Аналогично, для форм
применяются <label> и <input> с
привязкой for и id:
m('label', { for: 'username' }, 'Имя пользователя'),
m('input', { id: 'username', type: 'text' })
В приложениях Mithril важно управлять фокусом при
динамических обновлениях интерфейса. Используется атрибут
oncreate для установки фокуса:
const Modal = {
view: () => m('div.modal', m('input', { oncreate: vnode => vnode.dom.focus() }))
}
Это обеспечивает корректную навигацию с клавиатуры и работу экранных читалок. Для перехода между интерактивными элементами рекомендуется использовать логическое таб-индексирование и не удалять элементы DOM без переназначения фокуса.
Для сложных компонентов, таких как модальные окна, аккордеоны или табы, ARIA-атрибуты необходимы для передачи состояния и ролей элементов:
m('button', {
'aria-expanded': isOpen,
'aria-controls': 'accordion-content'
}, 'Развернуть')
В случае динамически изменяемого контента важен атрибут
aria-live:
m('div', { 'aria-live': 'polite' }, message)
Это позволяет экранным читалкам озвучивать новые сообщения без перезагрузки страницы.
Mithril позволяет подключать обработчики событий напрямую через атрибуты, что важно для доступной интерактивности:
m('div', {
tabindex: 0,
onkeydown: e => {
if (e.key === 'Enter') toggle();
}
}, 'Нажми Enter')
tabindex делает элементы доступными для навигации с
клавиатуры, а обработка событий onkeydown или
onkeyup гарантирует соответствие WCAG.
При стилизации компонентов важно следить за достаточным
контрастом текста и фона. Цветовые решения следует проверять по
стандартам WCAG 2.1 (уровень AA требует контраст 4.5:1 для текста и 3:1
для крупного текста). В Mithril стили можно задавать через
style или CSS-классы:
m('span', { style: { color: '#333', backgroundColor: '#fff' } }, 'Текст')
Приложения на Mithril часто используют динамическое обновление интерфейса. Для уведомлений и сообщений критично применять ARIA live regions и корректно обновлять виртуальный DOM:
const Notification = {
view: ({ attrs }) =>
m('div', { 'aria-live': 'assertive' }, attrs.message)
}
Это обеспечивает, что изменения будут озвучены экранными читалками.
Заголовки (<h1>–<h6>),
списки (<ul>, <ol>) и таблицы
(<table>) должны использоваться
семантически. В Mithril они создаются так же через m():
m('h1', 'Главный заголовок'),
m('ul', m('li', 'Элемент списка'))
Структура документа и логическая иерархия заголовков упрощает навигацию для пользователей вспомогательных технологий.
<button>, <a>,
<input>).oncreate и aria-* атрибуты.tabindex и
обработку событий onkeydown.aria-live.Соблюдение этих правил позволяет создавать доступные Mithril-приложения, которые корректно работают с экранными читалками, клавиатурой и другими вспомогательными технологиями, полностью соответствуя стандартам WCAG.