Featherlight — минималистичная JavaScript-библиотека для создания lightbox-окон, ориентированная на простоту интеграции и малый размер. Несмотря на визуальную направленность, корректная семантическая разметка HTML играет ключевую роль в доступности, расширяемости и поддерживаемости решений на базе Featherlight.
Lightbox по своей природе нарушает обычный поток документа: он выводит контент поверх страницы, временно перехватывая фокус и взаимодействие. При отсутствии семантически корректной разметки возникают проблемы:
Featherlight не навязывает жёсткую HTML-структуру, поэтому ответственность за семантику полностью лежит на разработчике.
Наиболее частый сценарий — открытие изображения или HTML-фрагмента по клику на ссылку.
<a href="image.jpg" data-featherlight="image">
<img src="thumb.jpg" alt="Превью изображения">
</a>
Семантические аспекты:
<a>, а не <div> —
это интерактивный элемент с ожидаемым поведением;href содержит реальный URL ресурса, а не
#;<img> содержит осмысленный alt, так
как именно он будет воспринят вспомогательными технологиями.Featherlight автоматически перехватывает событие клика, не нарушая базовую семантику ссылки.
Featherlight поддерживает открытие встроенного HTML по селектору.
<a href="#modal-content" data-featherlight="inline">
Подробнее
</a>
<section id="modal-content" class="hidden">
<h2>Заголовок</h2>
<p>Описание или другой контент.</p>
</section>
Ключевые моменты:
<section>, а не абстрактный
контейнер;<h2>, <h3>)
сохраняют иерархию;.hidden {
display: none;
}
Такой подход позволяет скринридерам корректно интерпретировать содержимое при его появлении.
Featherlight не добавляет ARIA-атрибуты автоматически. Для корректной семантики модального окна рекомендуется дополнять разметку вручную.
Пример расширенной разметки:
<section
id="modal-content"
role="dialog"
aria-modal="true"
aria-labelledby="modal-title"
>
<h2 id="modal-title">Заголовок окна</h2>
<p>Основной текст.</p>
</section>
Назначение атрибутов:
role="dialog" — объявляет элемент как диалоговое
окно;aria-modal="true" — указывает, что остальной контент
страницы недоступен;aria-labelledby — связывает диалог с заголовком.Featherlight корректно отображает такой контент без конфликтов.
Закрытие lightbox часто реализуется через элементы без семантики, что является ошибкой.
Неправильный вариант:
<div class="close">×</div>
Корректный вариант:
<button
type="button"
class="featherlight-close"
aria-label="Закрыть окно"
>
×
</button>
Преимущества:
<button> поддерживает клавиатурное
управление;aria-label даёт текстовое описание;Featherlight автоматически навешивает обработчики на элементы с
классом featherlight-close.
Семантическая разметка напрямую влияет на управление фокусом. При открытии lightbox:
Featherlight частично решает эту задачу, но корректный порядок элементов в DOM остаётся критичным. Модальный контент не должен находиться внутри случайных контейнеров, влияющих на порядок навигации.
Рекомендуемое размещение:
<body>
<main>
<!-- основной контент -->
</main>
<!-- модальные секции в конце документа -->
<section id="modal-content" hidden>
...
</section>
</body>
Использование <main> подчёркивает основной поток
документа и улучшает восприятие структуры.
При открытии видео или iframe-контента:
<a
href="https://www.youtube.com/watch?v=..."
data-featherlight="iframe"
>
Смотреть видео
</a>
Рекомендуется:
aria-describedby.Для локальных видео:
<figure id="video-modal">
<video controls>
<source src="video.mp4" type="video/mp4">
</video>
<figcaption>Описание видео</figcaption>
</figure>
<figure> и <figcaption>
сохраняют логическую связь между медиа и описанием даже внутри
lightbox.
Featherlight позволяет переопределять шаблон окна:
$.featherlight.defaults.template = `
<div class="featherlight" role="dialog" aria-modal="true">
<div class="featherlight-content"></div>
<button class="featherlight-close" aria-label="Закрыть">×</button>
</div>
`;
Здесь важно:
role="dialog" на корневом элементе;<button> на несемантические
элементы;featherlight-content, так как он
используется для вставки контента.Семантически корректный шаблон не влияет на производительность, но существенно повышает качество интерфейса.
<div> и <span>
для интерактивных элементов;Featherlight не препятствует этим ошибкам, поэтому их предотвращение — задача архитектуры разметки.
Семантически выверенная разметка:
Featherlight как библиотека минимального уровня особенно выигрывает от корректной HTML-основы, так как не маскирует архитектурные недочёты.
Использование Featherlight не отменяет принципы HTML5-семантики.
Lightbox-окно остаётся частью документа, а не изолированным виджетом.
Грамотное применение <section>,
<main>, <figure>,
<button>, заголовков и ARIA-атрибутов позволяет
встроить Featherlight в сложные интерфейсы без потери структуры и
доступности.