Featherlight — это легковесная и простая библиотека для реализации модальных окон на JavaScript. Несмотря на её простоту, при использовании часто встречаются типичные ошибки, которые приводят к некорректной работе или ухудшению пользовательского опыта.
Частая проблема — инициализация Featherlight до того, как DOM полностью загружен. Например:
$('.lightbox').featherlight();
Если этот код находится в <head> или до загрузки
соответствующих элементов, модальное окно не будет работать.
Правильный подход:
$(document).ready(function() {
$('.lightbox').featherlight();
});
Или с использованием более современного синтаксиса:
document.addEventListener('DOMContentLoaded', function() {
$('.lightbox').featherlight();
});
Ключевой момент: Featherlight должен инициализироваться только после того, как элементы, к которым применяется, уже существуют в DOM.
Featherlight позволяет использовать делегирование, что важно при динамическом добавлении контента на страницу. Неправильное использование:
$('.dynamic-item').featherlight(); // работает только для существующих элементов
Если элементы добавляются после загрузки страницы, они не будут иметь модальное окно.
Правильное решение с делегированием:
$(document).on('click', '.dynamic-item', function() {
$.featherlight($(this).data('content'));
});
Делегирование обеспечивает корректную работу с динамическим контентом.
Featherlight использует селекторы jQuery для определения контента модального окна. Частая ошибка — передача неправильного селектора:
$('.button').featherlight('#modal'); // если #modal отсутствует, ничего не откроется
Важный момент — проверять наличие элемента и корректность селектора. Лучше использовать явное указание контента:
$('.button').featherlight($('#modal'));
Или через атрибут data-featherlight:
<a href="#" data-featherlight="#modal">Открыть</a>
Featherlight по умолчанию закрывается при клике на фон или на крестик. Однако при кастомных интерфейсах можно забыть подключить обработку закрытия. Пример ошибки:
$.featherlight('<div>Контент</div>');
// нет кнопки закрытия, пользователи не могут закрыть окно
Решение: добавить кнопку закрытия и обработчик:
$.featherlight('<div>Контент <button class="close">Закрыть</button></div>', {
afterOpen: function() {
this.$content.find('.close').on('click', this.close.bind(this));
}
});
Это предотвращает ситуации, когда пользователь оказывается “заперт” в модальном окне.
Featherlight поддерживает загрузку изображений, iframe и HTML, но вставка большого контента напрямую может замедлять страницу. Пример ошибки:
$('.open-video').featherlight('<iframe src="big_video.mp4"></iframe>');
Лучше использовать ленивую загрузку или загружать контент динамически через Ajax:
$('.open-video').featherlight({
ajax: 'video.html'
});
Это ускоряет рендер и улучшает пользовательский опыт.
Featherlight имеет множество опций: closeOnClick,
closeOnEsc, persist, beforeOpen,
afterClose и др. Часто разработчики используют библиотеку
“как есть”, игнорируя их, что приводит к неконтролируемому поведению
окна.
Пример плохого использования:
$('.button').featherlight('<div>Контент</div>');
Пример с правильной конфигурацией:
$('.button').featherlight('<div>Контент</div>', {
closeOnClick: 'background',
closeOnEsc: true,
afterClose: function() {
console.log('Модальное окно закрыто');
}
});
Использование опций позволяет гибко контролировать поведение окон и предотвращает баги.
Featherlight зависит от jQuery. Часто возникают конфликты с другими библиотеками, особенно если используется noConflict или версии jQuery несовместимы. Пример:
var $j = jQuery.noConflict();
$j('.lightbox').featherlight(); // работает только через $j
Неправильное использование $ после
noConflict приведет к ошибке “$ is not defined”.
Featherlight создаёт элементы в DOM при открытии окна. Если не закрывать и не удалять обработчики, со временем это ведёт к утечкам памяти, особенно на страницах с динамическим контентом.
Решение:
var fl = $.featherlight('<div>Контент</div>');
fl.close(); // гарантированное удаление модального окна
Использование методов close и хуков
afterClose помогает поддерживать чистоту DOM.
Featherlight не создаёт адаптивный дизайн сам по себе. Нередко контент выходит за пределы экрана. Ошибки чаще всего:
Правильный подход — использовать CSS для адаптивного оформления:
.featherlight-content {
max-width: 90vw;
max-height: 90vh;
overflow: auto;
}
Featherlight не обеспечивает полноценную доступность по умолчанию. Ошибки:
Для исправления необходимо:
$.featherlight('<div role="dialog" aria-modal="true" aria-label="Модальное окно"></div>', {
closeOnEsc: true
});
Добавление ARIA-атрибутов и управление фокусом повышает доступность для всех пользователей.
Эти ошибки — самые частые источники проблем при работе с Featherlight. Их понимание и правильная практика помогут создавать надёжные и отзывчивые модальные окна на веб-страницах.