Packery — это библиотека для динамической компоновки элементов на веб-странице с использованием сетки, где каждый блок может располагаться с минимальными промежутками. Одной из важных особенностей является возможность работы с фиксированными элементами. Фиксированные элементы — это блоки, которые остаются на своей позиции независимо от того, как перераспределяются остальные элементы сетки. Они особенно полезны при создании сложных макетов, где часть контента должна быть закреплена.
В Packery фиксация реализуется через свойство isStatic.
Этот параметр указывается при инициализации сетки или при добавлении
отдельного элемента. Пример базовой конфигурации:
var grid = document.querySelector('.grid');
var pckry = new Packery(grid, {
itemSelector: '.grid-item',
gutter: 10
});
// Получаем элемент и делаем его фиксированным
var fixedItem = document.querySelector('.fixed-item');
pckry.items.forEach(function(item){
if(item.element === fixedItem){
item.isStatic = true;
}
});
// Перестроение сетки с учётом фиксации
pckry.layout();
Ключевые моменты:
isStatic: true блокирует перемещение элемента при
вызове layout().Packery позволяет добавлять новые элементы после инициализации сетки. Фиксация может применяться сразу при добавлении:
var newItem = document.createElement('div');
newItem.className = 'grid-item fixed-item';
grid.appendChild(newItem);
pckry.appended(newItem);
pckry.getItem(newItem).isStatic = true;
pckry.layout();
Особенность динамического добавления:
Packery интегрируется с библиотекой Draggabilly, что позволяет перетаскивать элементы сетки. Фиксированные элементы ведут себя особым образом:
isStatic: true невозможно
перетащить, они игнорируют события Draggabilly.var item = pckry.getItem(fixedItem);
item.isStatic = false;
pckry.layout();
После этого элемент станет интерактивным и сможет быть перемещён мышью.
Packery работает с положением через transform и
position: absolute. Для фиксированных элементов
рекомендуется задавать CSS классы:
.fixed-item {
background-color: #f0f0f0;
border: 2px solid #333;
}
Фиксированный элемент не требует специальных CSS-свойств для
фиксации, достаточно контролировать это через isStatic.
Однако стили помогают визуально отличать его от обычных блоков.
Packery автоматически учитывает isStatic при вызове
методов layout и fit. Важные моменты:
pckry.layout() перераспределяет только
нефиксированные элементы.layout() повторно.window.addEventListener('resize', function(){
pckry.layout();
});
Это гарантирует, что сетка останется корректной на любых разрешениях экрана.
Фиксированные элементы в Packery обеспечивают мощный инструмент для
создания гибких и визуально привлекательных макетов. Контроль через
isStatic и грамотная интеграция с Draggabilly позволяет
сочетать стабильность расположения и интерактивность сетки.