Featherlight — это легковесная библиотека для создания модальных окон на JavaScript с минимальным количеством кода. Она позволяет динамически отображать различные типы контента: изображения, HTML, AJAX-запросы и даже встроенные элементы страницы. Основная цель Featherlight — предоставить максимально простой интерфейс для создания модальных окон с гибкой настройкой.
Модальное окно создаётся вызовом метода
$.featherlight(content, options), где content
может быть строкой HTML, селектором элемента или функцией, возвращающей
содержимое, а options — объект конфигурации с набором
параметров управления поведением окна.
$.featherlight('<p>Пример контента</p>', {
closeOnClick: 'background',
closeOnEsc: true
});
Featherlight поддерживает адаптивное масштабирование содержимого
модального окна в зависимости от размеров экрана и исходного контента.
Масштабирование осуществляется через CSS и встроенные настройки
библиотеки. Для изображений, например, применяются свойства
max-width и max-height, чтобы окно не выходило
за пределы видимой области браузера.
.featherlight img {
max-width: 90vw;
max-height: 90vh;
}
Ключевые моменты масштабирования:
max-width и max-height контролируют
размеры окна относительно видимой области (viewport).vw, vh)
обеспечивает адаптивность на разных устройствах..featherlight { display: flex; justify-content: center; align-items: center; }.Featherlight позволяет отображать динамически загружаемый контент (AJAX или JavaScript). В таких случаях размеры окна подстраиваются после полной загрузки контента.
$.featherlight({
ajax: 'content.html',
afterContent: function() {
this.$content.css({
'max-width': '80vw',
'max-height': '80vh'
});
}
});
afterContent — хук, который вызывается после вставки
содержимого. Он часто используется для изменения размеров модального
окна в зависимости от полученных данных.
Особенности динамического масштабирования:
overflow: auto внутри модального окна
обеспечивает прокрутку содержимого при превышении доступного
пространства.Featherlight имеет встроенные возможности работы с изображениями
через расширение featherlight.image. Оно автоматически
подстраивает размеры изображения под окно, сохраняя пропорции.
$('a.image-link').featherlight({
type: 'image',
afterContent: function() {
this.$content.css({
'max-width': '95vw',
'max-height': '95vh'
});
}
});
Особенности работы с изображениями:
Featherlight позволяет использовать элементы DOM, уже присутствующие на странице, как контент модального окна. Это полезно для форм, текстовых блоков и других компонентов.
$('#open-modal').featherlight($('#hidden-form'), {
persist: true,
afterContent: function() {
this.$content.css({
'max-width': '70vw',
'max-height': '70vh',
'overflow-y': 'auto'
});
}
});
persist: true позволяет использовать один и тот же
элемент повторно без клонирования.overflow-y: auto) предотвращает обрезку
содержимого при небольших экранах.Featherlight предоставляет возможность задавать функции для вычисления размеров окна на лету. Например, можно изменить ширину модального окна в зависимости от ширины экрана.
$.featherlight('<p>Контент</p>', {
afterContent: function() {
const viewportWidth = $(window).width();
this.$content.css('width', viewportWidth * 0.6);
}
});
Преимущества динамического подхода:
Featherlight поддерживает несколько хуков, которые позволяют реагировать на изменение размера окна или содержимого:
beforeOpen — вызывается перед открытием окна.afterContent — вызывается после вставки контента.afterOpen — вызывается после завершения анимации
открытия.afterClose — вызывается после закрытия окна.Пример использования:
$.featherlight('<p>Контент</p>', {
afterOpen: function() {
$(window).on('resize.featherlight', () => {
this.$content.css({
'max-width': $(window).width() * 0.8,
'max-height': $(window).height() * 0.8
});
});
},
afterClose: function() {
$(window).off('resize.featherlight');
}
});
Featherlight легко интегрируется с CSS-анимациями для плавного
масштабирования. Можно использовать трансформации scale и
переходы transition, чтобы окно увеличивалось или
уменьшалось плавно.
.featherlight {
transition: transform 0.3s ease, opacity 0.3s ease;
}
.featherlight-show {
transform: scale(1);
opacity: 1;
}
.featherlight-hide {
transform: scale(0.8);
opacity: 0;
}
transform: scale обеспечивает визуальный эффект
масштабирования.transition контролирует скорость и плавность
анимации.featherlight-show и
featherlight-hide используются библиотекой при открытии и
закрытии окна.max-width и max-height в процентах от
viewport.overflow: auto,
чтобы обеспечить прокрутку.afterContent для точного контроля размеров.resize для адаптивного
масштабирования при изменении размеров окна браузера.Эти подходы позволяют создавать полностью адаптивные модальные окна с Featherlight, которые корректно масштабируются под любой контент и размеры экрана, сохраняя удобство использования и визуальную привлекательность.