Featherlight — лёгкая и минималистичная библиотека для создания модальных окон на JavaScript, полностью интегрируемая с jQuery. Основной принцип работы основан на динамическом создании и управлении DOM-элементами, при этом библиотека не вмешивается в структуру страницы, а лишь оборачивает контент в модальное окно.
Подключение Featherlight осуществляется через подключение jQuery, а затем скрипта библиотеки:
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/featherlight@1.7.14/release/featherlight.min.js"></script>
<link href="https://cdn.jsdelivr.net/npm/featherlight@1.7.14/release/featherlight.min.css" rel="stylesheet">
Для создания простого модального окна используется метод
featherlight:
$('#openModal').featherlight('<p>Пример простого модального окна</p>');
Можно также использовать селектор для привязки модального окна к ссылке:
$('a[data-featherlight]').featherlight();
В этом случае контент берётся из атрибута
data-featherlight:
<a href="#" data-featherlight="#modalContent">Открыть окно</a>
<div id="modalContent" style="display:none;">
<h2>Заголовок окна</h2>
<p>Текст внутри модального окна.</p>
</div>
Featherlight предоставляет гибкую систему опций, позволяющую изменять поведение модального окна. Настройка может осуществляться как при инициализации, так и глобально.
Примеры ключевых опций:
variant — добавляет класс к модальному окну для
кастомного оформления.closeOnClick — определяет, закрывается ли окно при
клике вне контента ('background', 'anywhere'
или false).closeOnEsc — разрешает или запрещает закрытие окна по
клавише Esc.beforeOpen, afterOpen,
beforeClose, afterClose — функции-хуки для
обработки событий открытия и закрытия.Пример использования опций при инициализации:
$('#openModal').featherlight('<p>Текст окна</p>', {
variant: 'custom-theme',
closeOnClick: 'background',
closeOnEsc: true,
afterOpen: function() {
console.log('Окно открылось');
}
});
Featherlight поддерживает подгрузку контента через AJAX, что позволяет использовать окна для динамически обновляемых данных.
Пример AJAX-загрузки:
$.featherlight('/partials/modal-content.html', {
type: 'ajax',
afterContent: function() {
console.log('Контент загружен и вставлен в окно');
}
});
Можно также загружать изображения и видео, используя встроенные типы контента:
$('a.image-link').featherlight({
type: 'image'
});
$('a.video-link').featherlight({
iframe: 'https://www.youtube.com/embed/VIDEO_ID',
iframeWidth: 800,
iframeHeight: 450
});
Featherlight полностью интегрируется с jQuery, что позволяет использовать привычные методы коллекций. Можно привязать одно модальное окно к нескольким элементам и управлять их поведением индивидуально.
Пример:
$('.open-modal').featherlight(function(event) {
return $(this).next('.hidden-content').html();
}, {
variant: 'multi-instance'
});
Здесь контент выбирается динамически на основе текущего элемента коллекции. Такой подход удобен для списков товаров, галерей и других повторяющихся блоков.
Featherlight генерирует собственные события на основе jQuery:
featherlight:open — перед открытием окна.featherlight:opened — после открытия.featherlight:close — перед закрытием.featherlight:closed — после закрытия.Пример подписки на событие:
$(document).on('featherlight:opened', function(event) {
console.log('Модальное окно полностью открыто', event.target);
});
Featherlight позволяет создавать свои подклассы для добавления специфического поведения:
var MyFeatherlight = $.featherlight.extend({
afterOpen: function() {
this.$content.append('<p>Дополнительный контент после открытия</p>');
}
});
$('#openCustomModal').featherlight(MyFeatherlight, { variant: 'custom' });
Такой подход даёт возможность создавать модальные окна с уникальной логикой, не изменяя исходный код библиотеки.
Featherlight использует минимальные CSS-правила, что облегчает
интеграцию с существующими стилями. Для изменения внешнего вида
достаточно переопределить базовые классы .featherlight,
.featherlight-content и
.featherlight-close.
Пример кастомизации:
.featherlight.custom-theme {
background-color: #222;
color: #fff;
border-radius: 10px;
}
.featherlight.custom-theme .featherlight-close {
color: #ff5555;
font-size: 1.5em;
}
Использование опции variant позволяет применять эти
стили без дублирования кода и гарантирует поддержку нескольких тем на
одной странице.
Благодаря полной совместимости с jQuery, Featherlight легко сочетается с другими плагинами: слайдерами, галереями, формами валидации. Например, можно открыть форму в модальном окне и обработать её через jQuery Validate:
$('#openForm').featherlight('#formContainer', {
afterOpen: function() {
$('#formContainer form').validate({
submitHandler: function(form) {
$.ajax({
url: $(form).attr('action'),
method: 'POST',
data: $(form).serialize()
}).done(function() {
$.featherlight.close();
});
}
});
}
});
Featherlight сочетает минимализм и мощь jQuery, позволяя создавать адаптивные и интерактивные модальные окна для любых проектов.