В библиотеке Packery breakpoints позволяют адаптировать сетку к различным размерам экрана и динамически менять расположение элементов в зависимости от ширины контейнера или внешних условий. Это ключевой инструмент для создания отзывчивых и гибких интерфейсов.
Breakpoints в Packery не встроены как отдельный модуль, но
реализуются через динамическую настройку опций при
изменении ширины контейнера или окна браузера. Обычно это делается через
события resize и пересоздание или перестройку сетки с
новыми параметрами.
Основные параметры Packery, которые часто меняются в зависимости от breakpoints:
columnWidth — ширина колонки в сетке.
Может быть числом в пикселях или функцией, возвращающей значение
динамически.gutter — промежуток между элементами.
Позволяет управлять отступами между блоками при разных ширинах
экрана.itemSelector — CSS-селектор элементов
сетки, может оставаться неизменным, но иногда полезно адаптировать
видимость элементов под разные условия.percentPosition — использование
процентов для позиционирования, актуально для адаптивных сеток.Пример динамического изменения опций при изменении ширины окна:
var container = document.querySelector('.grid');
var pckry;
function initPackery() {
var windowWidth = window.innerWidth;
var columnWidth = 200;
var gutter = 10;
if (windowWidth < 768) {
columnWidth = 150;
gutter = 5;
} else if (windowWidth >= 1200) {
columnWidth = 250;
gutter = 15;
}
if (pckry) {
pckry.destroy();
}
pckry = new Packery(container, {
itemSelector: '.grid-item',
columnWidth: columnWidth,
gutter: gutter,
percentPosition: true
});
}
window.addEventListener('resize', initPackery);
initPackery();
В этом примере Packery пересоздается при каждом изменении ширины окна, обеспечивая адаптивность сетки под три условные точки (breakpoints): мобильные устройства, планшеты и десктопы.
Хотя Packery управляет позиционированием элементов, CSS-медиа-запросы могут применяться для управления видимостью и размером элементов, что позволяет создавать более сложные адаптивные решения:
@media (max-width: 767px) {
.grid-item {
width: 45%;
}
}
@media (min-width: 768px) and (max-width: 1199px) {
.grid-item {
width: 30%;
}
}
@media (min-width: 1200px) {
.grid-item {
width: 20%;
}
}
Сочетание медиа-запросов и динамических breakpoints в JavaScript позволяет полностью контролировать внешний вид и структуру сетки на разных устройствах.
Packery предоставляет метод layout() для пересчета
положения элементов. Он полезен для условного применения
breakpoints без пересоздания объекта:
var pckry = new Packery('.grid', {
itemSelector: '.grid-item',
columnWidth: 200,
gutter: 10,
percentPosition: true
});
function updateLayout() {
if (window.innerWidth < 768) {
pckry.options.columnWidth = 150;
pckry.options.gutter = 5;
} else {
pckry.options.columnWidth = 200;
pckry.options.gutter = 10;
}
pckry.layout();
}
window.addEventListener('resize', updateLayout);
updateLayout();
Этот подход позволяет изменять параметры сетки на лету без уничтожения и повторного создания экземпляра Packery, что повышает производительность при частых изменениях размера окна.
Packery позволяет передавать функции вместо фиксированных
значений для параметров вроде columnWidth. Это
делает breakpoints более гибкими:
var pckry = new Packery('.grid', {
itemSelector: '.grid-item',
columnWidth: function(containerWidth) {
if (containerWidth < 768) return 150;
if (containerWidth < 1200) return 200;
return 250;
},
gutter: function(containerWidth) {
return containerWidth < 768 ? 5 : 10;
},
percentPosition: true
});
В данном примере значения ширины колонок и промежутков вычисляются динамически исходя из текущей ширины контейнера, что делает сетку полностью отзывчивой без использования дополнительных слушателей событий.
destroy() и
layout() позволяют полностью пересоздавать или
пересчитывать сетку под новые условия.columnWidth и
gutter позволяют автоматически подстраивать сетку
под любой размер контейнера.Использование breakpoints и условных перестроек сетки обеспечивает не только визуальную гибкость, но и повышает удобство работы с динамическим контентом на любых устройствах.