Mithril — лёгкий и быстрый JavaScript-фреймворк для построения одностраничных приложений (SPA), который использует виртуальный DOM. Семантическая разметка в контексте Mithril имеет особое значение, поскольку структура HTML напрямую влияет на читаемость кода, доступность интерфейса и правильное использование компонентов.
В Mithril для создания DOM-элементов используется функция
m(). Первый аргумент функции — это строка с названием
HTML-тега, второй — объект с атрибутами, третий — содержимое.
Например:
m("article", { class: "post" }, [
m("h1", "Заголовок статьи"),
m("p", "Основной текст статьи с семантической разметкой.")
])
Ключевые моменты:
article используется для самостоятельных блоков
контента.h1-h6 — для заголовков с правильной иерархией.p — для абзацев текста, поддерживающих читаемость.Для структурирования страниц применяются семантические контейнеры:
m("header", [
m("nav", [
m("ul", [
m("li", m("a", { href: "/" }, "Главная")),
m("li", m("a", { href: "/about" }, "О проекте"))
])
])
]),
m("main", [
m("section", { id: "features" }, [
m("h2", "Особенности"),
m("p", "Описание основных возможностей.")
])
]),
m("footer", [
m("p", "© 2025 Компания")
])
Особенности:
header и footer обозначают шапку и подвал
страницы.main выделяет основной контент, улучшая доступность для
скринридеров.section структурирует крупные тематические блоки.nav содержит навигационные ссылки, повышая
семантическую ценность интерфейса.Mithril поддерживает любые HTML-атрибуты, включая ARIA, что позволяет создавать доступные интерфейсы:
m("button", { "aria-label": "Закрыть окно", onclick: closeModal }, "×")
Рекомендации:
aria-label для кнопок без текста.role,
aria-expanded, aria-controls.Mithril позволяет строить компоненты как объекты с методом
view:
const Article = {
view: ({ attrs }) => m("article", [
m("h2", attrs.title),
m("p", attrs.content)
])
};
const App = {
view: () => m("main", [
m(Article, { title: "Первый пост", content: "Содержимое статьи..." }),
m(Article, { title: "Второй пост", content: "Ещё одна статья..." })
])
};
Замечания:
attrs) передаются компонентам, сохраняя
гибкость.article, section,
aside).Для списков применяются ul и ol, а для
элементов li:
m("ul", [
m("li", "Элемент 1"),
m("li", "Элемент 2"),
m("li", "Элемент 3")
])
Для таблиц — table, thead,
tbody, tr, th,
td:
m("table", [
m("thead", m("tr", [
m("th", "Имя"),
m("th", "Возраст")
])),
m("tbody", [
m("tr", [ m("td", "Анна"), m("td", "28") ]),
m("tr", [ m("td", "Иван"), m("td", "35") ])
])
])
Особенности:
Соблюдение семантической разметки в Mithril обеспечивает чистый, поддерживаемый код, улучшает доступность и оптимизирует работу интерфейса с виртуальным DOM.