Isotope — это мощная библиотека для динамической организации и фильтрации элементов на веб-странице. Один из ключевых механизмов — фильтрация по CSS-селекторам, которая позволяет отображать только те элементы, которые соответствуют заданным критериям, без необходимости перезагрузки страницы.
Фильтрация осуществляется через метод filter, который
принимает CSS-селектор или функцию. В качестве
селектора можно использовать классы, идентификаторы, атрибуты,
псевдоклассы и их комбинации.
// Инициализация Isotope
var iso = new Isotope('.grid', {
itemSelector: '.grid-item',
layoutMode: 'fitRows'
});
// Фильтрация по классу
iso.arrange({ filter: '.metal' });
// Фильтрация по атрибуту
iso.arrange({ filter: '[data-category="nature"]' });
Ключевые моменты:
itemSelector определяет элементы, с которыми работает
Isotope.filter может принимать строку (CSS-селектор) или
функцию для более сложной логики.Для фильтрации по нескольким критериям используется синтаксис CSS-селекторов через запятую, что позволяет комбинировать условия.
// Отображаются элементы с классом 'metal' или 'transition'
iso.arrange({ filter: '.metal, .transition' });
Для последовательной фильтрации можно использовать логическое “и”, комбинируя селекторы без запятой:
// Элемент должен одновременно иметь классы 'metal' и 'round'
iso.arrange({ filter: '.metal.round' });
Isotope поддерживает фильтрацию на основе атрибутов, что удобно при
работе с динамически загружаемыми данными. Например, фильтрация по
значению data-category:
// Фильтруем элементы с data-category равным 'architecture'
iso.arrange({ filter: '[data-category="architecture"]' });
Можно использовать регулярные выражения через функцию для более гибких условий:
iso.arrange({
filter: function(itemElem) {
var category = itemElem.getAttribute('data-category');
return /^a/.test(category); // Только категории, начинающиеся на "a"
}
});
Часто фильтрация осуществляется через кнопки. Для этого назначают
каждой кнопке атрибут data-filter с соответствующим
селектором:
<button data-filter="*">Все</button>
<button data-filter=".metal">Металл</button>
<button data-filter=".transition">Переходные</button>
И подключают обработчик событий:
var filtersElem = document.querySelector('.filters-button-group');
filtersElem.addEventListener('click', function(event) {
if (!event.target.matches('button')) return;
var filterValue = event.target.getAttribute('data-filter');
iso.arrange({ filter: filterValue });
});
Особенности работы:
* обозначает «показать все элементы».Isotope позволяет использовать любые валидные CSS-селекторы, включая:
#id .class.item:nth-child(odd)[data-category^="a"] (начинается с “a”),
[data-category$="z"] (заканчивается на “z”)Пример каскадной фильтрации по нескольким условиям:
// Только элементы с классом 'metal', у которых data-category начинается на 'a'
iso.arrange({ filter: '.metal[data-category^="a"]' });
Такой подход позволяет создавать сложные динамические фильтры без необходимости писать дополнительный JavaScript.
Isotope автоматически анимирует скрытие и показ элементов при
фильтрации, что повышает визуальную привлекательность интерфейса.
Параметры анимации настраиваются через
transitionDuration:
var iso = new Isotope('.grid', {
itemSelector: '.grid-item',
layoutMode: 'fitRows',
transitionDuration: '0.6s'
});
iso.arrange({ filter: '.metal' });
Можно комбинировать фильтрацию с сортировкой и изменением макета для создания интерактивных и динамичных галерей.
Фильтрация по селекторам в Isotope обеспечивает гибкий и мощный инструмент для управления визуальными элементами страницы, позволяя комбинировать CSS-синтаксис, атрибуты и функции для создания интерактивного контента с минимальными усилиями.