Featherlight — это лёгкая библиотека для реализации модальных окон на JavaScript, которая отличается минималистичным подходом и гибкостью настройки. Одной из ключевых задач при работе с модальными окнами является корректное масштабирование контента под размеры viewport, чтобы окно оставалось читаемым и функциональным на любых устройствах.
По умолчанию Featherlight не фиксирует строгие размеры модального окна. Это позволяет содержимому определять свои размеры, но при этом могут возникнуть ситуации, когда окно выходит за пределы видимой области браузера. Для решения этой проблемы используется несколько методов:
CSS-свойства max-width и max-height Для
контейнера модального окна (.featherlight-content) задаются
ограничения через CSS:
.featherlight-content {
max-width: 90vw;
max-height: 90vh;
overflow: auto;
}
vw (viewport width) и vh (viewport height)
задают размеры относительно ширины и высоты окна браузера.overflow: auto позволяет включать скроллинг, если
содержимое превышает допустимые размеры.Настройка параметров при инициализации Featherlight поддерживает передачу параметров при вызове:
$.featherlight($('#modalContent'), {
afterOpen: function() {
adjustSize(this.$content);
}
});
function adjustSize($content) {
const maxWidth = $(window).width() * 0.9;
const maxHeight = $(window).height() * 0.9;
$content.css({
'max-width': maxWidth,
'max-height': maxHeight,
'overflow': 'auto'
});
}
Такой подход позволяет динамически вычислять размеры окна при открытии, учитывая реальные размеры viewport, а не фиксированные значения.
Если модальное окно содержит изображения, видео или iframe, важно, чтобы они также подстраивались под размер окна:
.featherlight-content img,
.featherlight-content iframe,
.featherlight-content video {
max-width: 100%;
max-height: 100%;
display: block;
margin: auto;
}
max-width: 100% и max-height: 100%
ограничивают элементы размерами контейнера.margin: auto сохраняет эстетичное
отображение на больших и малых экранах.Featherlight предоставляет события afterOpen и
beforeClose, но не имеет встроенного автоматического
ресайза при изменении размеров окна. Для корректного масштабирования
используется событие resize окна:
$(window).on('resize', function() {
$('.featherlight-content').each(function() {
const $content = $(this);
$content.css({
'max-width': $(window).width() * 0.9,
'max-height': $(window).height() * 0.9
});
});
});
Такой подход обеспечивает адаптацию модального окна при изменении размеров экрана, что особенно важно для мобильных устройств и планшетов.
Для сохранения визуальной гармонии необходимо учитывать внутренние
отступы (padding) модального окна. Например:
.featherlight-content {
padding: 20px;
box-sizing: border-box;
}
box-sizing: border-box гарантирует, что padding не
увеличивает размеры окна сверх заданного max-width и
max-height.Текст внутри Featherlight можно адаптировать с помощью относительных
единиц (em, rem, vh):
.featherlight-content p {
font-size: 2vh;
}
@media (min-width: 1200px) {
.featherlight-content p {
font-size: 1.2rem;
}
}
Для создания модального окна, полностью адаптивного под viewport, используется комбинация:
resize для автоматического обновления
размеров.$.featherlight($('#modalContent'), {
afterOpen: function() {
const $content = this.$content;
adjustSize($content);
$(window).on('resize.featherlight', function() {
adjustSize($content);
});
},
beforeClose: function() {
$(window).off('resize.featherlight');
}
});
Такой подход позволяет создавать универсальные модальные окна, которые корректно масштабируются на любых устройствах, от смартфонов до больших мониторов, сохраняя функциональность и эстетический вид.