Featherlight — это минималистичная и лёгкая библиотека для создания лайтбоксов в веб-проектах на JavaScript. Она ориентирована на простоту использования и гибкость, позволяя отображать изображения, HTML-контент или AJAX-запросы в модальном окне без необходимости подключения тяжёлых фреймворков. Featherlight работает через привязку к элементам на странице, обеспечивая динамическое создание и управление окнами.
Ключевые возможности:
data-featherlight.Для подключения Featherlight достаточно включить CSS и JS библиотеку в проект:
<link href="featherlight.min.css" rel="stylesheet">
<script src="jquery.min.js"></script>
<script src="featherlight.min.js"></script>
Простейший лайтбокс создаётся через атрибут
data-featherlight:
<a href="image.jpg" data-featherlight="image">Открыть изображение</a>
В этом примере при клике по ссылке откроется модальное окно с изображением. Featherlight автоматически создаёт обёртку и затемняет фон.
Для работы с HTML-контентом используется селектор:
<a href="#" data-featherlight="#hidden-content">Показать текст</a>
<div id="hidden-content" style="display:none">
<h2>Заголовок</h2>
<p>Текст для отображения в лайтбоксе.</p>
</div>
Featherlight поддерживает открытие одного лайтбокса из другого — вложенные лайтбоксы. Это полезно для создания сложных интерфейсов, когда необходимо показать детальную информацию, не закрывая первоначальный модальный слой.
Каждый вложенный лайтбокс создаётся так же, как обычный, но его триггер находится внутри контента родительского окна:
<a href="#" data-featherlight="#parent-lightbox">Открыть родительский лайтбокс</a>
<div id="parent-lightbox" style="display:none">
<p>Контент родительского окна</p>
<a href="#" data-featherlight="#child-lightbox">Открыть вложенный лайтбокс</a>
</div>
<div id="child-lightbox" style="display:none">
<p>Контент вложенного окна</p>
</div>
При клике на ссылку внутри родительского окна автоматически создаётся новый слой поверх текущего. Featherlight обеспечивает независимое управление каждым лайтбоксом, сохраняя возможность закрывать их отдельно.
Featherlight предоставляет методы для программного открытия и закрытия окон. Вложенные лайтбоксы удобно открывать динамически, особенно если контент загружается через AJAX:
$('#open-parent').featherlight({
targetAttr: 'data-featherlight',
afterOpen: function(event){
console.log('Родительский лайтбокс открыт');
}
});
$('#open-child').on('click', function(){
$.featherlight($('#child-lightbox'));
});
Преимущества такого подхода:
Featherlight поддерживает загрузку контента через AJAX. Это особенно полезно для вложенных окон, когда необходимо подгружать динамические данные:
<a href="child-content.html" data-featherlight="ajax">Открыть AJAX лайтбокс</a>
AJAX-контент открывается в новом слое, не закрывая родительский. Для
вложенных AJAX-окон рекомендуется использовать колбэки
afterContent и afterOpen для инициализации
событий внутри подгруженного контента:
$.featherlight({
ajax: 'child-content.html',
afterContent: function(){
console.log('Контент загружен и готов к использованию');
}
});
При работе с вложенными лайтбоксами важно учитывать управление стеком окон. Featherlight автоматически поддерживает правильное закрытие верхнего слоя без влияния на нижележащие:
var fl = $.featherlight($('#child-lightbox'));
// Закрыть конкретный лайтбокс
fl.close();
Вложенные лайтбоксы могут использовать опцию persist для
сохранения состояния содержимого при повторном открытии, что упрощает
создание сложных интерфейсов с формами или интерактивными
элементами.
Каждому уровню можно задавать свои CSS-классы и анимации:
$.featherlight($('#child-lightbox'), {
variant: 'child-style',
openSpeed: 300,
closeSpeed: 200
});
variant — позволяет использовать отдельные CSS-правила
для разных слоёв.openSpeed и closeSpeed — задают скорость
анимации открытия и закрытия.Таким образом, визуальное оформление вложенных лайтбоксов полностью настраивается без конфликта с родительским слоем.
Featherlight обеспечивает лёгкий и гибкий способ работы с модальными окнами, включая вложенные структуры. Правильная организация триггеров, колбэков и CSS-стилей позволяет создавать динамичные, многослойные интерфейсы без использования тяжёлых библиотек.