Динамический грид
Многоколоночный динамический макет сетки, элементы которого можно сортировать и фильтровать.
Компонент «Динамическая сетка» позволяет создавать динамический и адаптивный макет сетки *грида с использованием компонента Grid. Элементы сетки будут беспрепятственно и плавно выстраиваться, создавая многоколоночный макет без зазоров для девайсов любых размеров.
Применение
Чтобы применить компонент «Dynamic Grid», добавьте атрибут data-uk-grid
к элементу контейнера. Установите ширину элементов сетки с помощью классов uk-width-*
или .uk-grid-width-*
из компонента Grid.
Пример
Разметка
<!-- Это сетка, использующая uk-width-* для каждого элемента -->
<div data-uk-grid>
<div class="uk-width-small-1-2 uk-width-medium-1-4">...</div>
<div class="uk-width-small-1-2 uk-width-medium-1-4">...</div>
</div>
<!-- Это сетка, использующая uk-grid-width-* на самой сетке -->
<div class="uk-grid-width-small-1-2 uk-grid-width-medium-1-4" data-uk-grid>
<div>...</div>
<div>...</div>
</div>
Grid Gutter
Чтобы разделить элементы сетки с помощью зазора *gutter
, нужно добавить опцию {gutter: 20}
в data-*
атрибут. В этом примере зазор шириной 20 пикселей.
Пример
Разметка
<div data-uk-grid="{gutter: 20}">...</div>
Фильтр
Вы также можете отфильтровать свою сетку *grid
, чтобы отображались только определенные элементы. Для этого добавьте в data-*
атрибут параметр {controls: '#my-id'}
, чтобы указать целевой идентификатор (ID) элемента для управления фильтра. Каждый элемент управления должен иметь атрибут data-uk-filter
для определения категории, которую вы хотите фильтровать. Затем вам также необходимо добавить атрибут data-uk-filter
к каждому элементу сетки/грида, чтобы указать, к какой категории принадлежит элемент. Разделяйте несколько категорий запятыми.
Пример
Разметка
В этом примере используется компонент Subnav для фильтрации элементов.
<!-- Управление фильтрами -->
<ul id="my-id" class="uk-subnav">
<li data-uk-filter=""><a href=""></a></li>
<li data-uk-filter="filter-a"><a href=""></a></li>
<li data-uk-filter="filter-b"><a href=""></a></li>
</ul>
<!-- Dynamic Grid -->
<div data-uk-grid="{controls: '#my-id'}">
<div data-uk-filter="filter-a">...</div>
<div data-uk-filter="filter-b">...</div>
<div data-uk-filter="filter-a,filter-b">...</div>
</div>
Сортировка
Чтобы отсортировать элементы сетки/грида по возрастанию, добавьте в data-*
атрибут параметр {controls: '#my-id'}
, указав целевой идентификатор (ID) для управления сортировкой элементов.
Каждый элемент управления должен иметь атрибут data-uk-sort
с пользовательским значением, например, для категории, которую вы хотите отсортировать, можно прописать data-uk-sort="my-category"
. Вам также необходимо добавить атрибут данных к каждому элементу сетки, используя имя вашей целевой категории. Значения содержащие данные, которые должны быть отсортированы, например data-my-category="my-data"
.
По умолчанию элементы сортируются по возрастанию. Чтобы отсортировать элементы по убыванию, просто добавьте :desc
к значению атрибута данных элементов управления, например, data-uk-sort="my-category:desc"
.
Пример
Разметка
<ul id="my-sort-id" class="uk-subnav">
<li class="uk-active" data-uk-sort="my-category:asc"><a href=""></a></li>
<li data-uk-sort="my-category:desc"><a href=""></a></li>
</ul>
<div data-uk-grid="{controls: '#my-sort-id'}">
<div data-my-category="А">...</div>
<div data-my-category="Б">...</div>
</div>
Пример с числами
Примечание Изначально блоки разбросаны. После выбора, клика по желаемому пункту, блоки будут отсортированы в выбранном порядке.
Разметка
<ul id="my-numbers-id" class="uk-subnav">
<li data-uk-sort="my-numbers:asc"><a href="">По возрастанию</a></li>
<li data-uk-sort="my-numbers:desc"><a href="">По убыванию</a></li>
</ul>
<div data-uk-grid="{gutter: 20, controls: '#my-numbers-id'}">
<div data-my-category="1">...</div>
<div data-my-category="5">...</div>
</div>
Multiple categories
Чтобы использовать несколько категорий для сортировки элементов грид-сетки, используйте разные имена для каждой категории.
8
7
6
1
5
3
2
4
Разметка
<ul id="my-id" class="uk-subnav">
<li data-uk-sort="my-category:asc"><a href=""></a></li>
<li data-uk-sort="my-category:desc"><a href=""></a></li>
<li data-uk-sort="my-category2:asc"><a href=""></a></li>
<li data-uk-sort="my-category2:desc"><a href=""></a></li>
</ul>
<div data-uk-grid="{controls: '#my-id'}">
<div data-my-category="a" data-my-category2="8">...</div>
<div data-my-category="b" data-my-category2="7">...</div>
</div>
JavaScript options
Option | Possible value | Default | Описание |
---|---|---|---|
colwidth |
integer | auto | Ширина столбцов |
animation |
boolean | true | Анимировать столбцы при обновлении |
duration |
integer | 200 | Продолжительность анимации |
gutter |
integer | 0 | Зазор между столбцами |
controls |
string | false | Css selector to connect filter / order controls. |
filter |
string | '' | Items filter |
Init element manually
var grid = UIkit.grid(element, { /* options */ });
Events
Name | Parameter | Description |
---|---|---|
beforeupdate.uk.grid |
event, children | On before update grid |
afterupdate.uk.grid |
event, children | On after update grid |
Пример
Listening for beforeupdate events with jQuery:
$(function() {
$('[data-uk-grid]').on('beforeupdate.uk.grid', function(e, children) {
// your event-handling goes here
});
});
Добавляем компонент «Dynamic Grid» к проекту:
<script src="../js/components/grid.min.js"></script>