动态网格

创建一个多列、动态的网格布局,其项目可以排序和过滤。

动态网格组件允许您使用 网格组件 创建动态且响应式的网格布局。网格项目将流畅且无缝地排列,以便在所有设备尺寸上实现无间隙的多列布局。


用法

要应用此组件,请将 data-uk-grid 属性添加到容器元素。使用 网格组件 中的 uk-width-*.uk-grid-width-* 类设置网格项目的宽度。

示例

1
2
3
4
5
6
7
8

标记

<!-- This is a grid using uk-width-* on each item -->
<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>

<!-- This is a grid using uk-grid-width-* on the grid itself -->
<div class="uk-grid-width-small-1-2 uk-grid-width-medium-1-4" data-uk-grid>
    <div>...</div>
    <div>...</div>
</div>

网格间距

通过向 data 属性添加 {gutter: 20} 选项来分割网格项目。在这种情况下,间距宽度为 20 像素。

示例

1
2
3
4
5
6
7
8

标记

<div data-uk-grid="{gutter: 20}">...</div>

过滤

您还可以过滤您的网格,以便仅显示特定的项目。为此,请将 {controls: '#my-id'} 选项添加到 data 属性,以定位筛选控件的 id。每个控件都需要具有 data-uk-filter 属性来定义您要筛选的类别。然后,您还需要将 data-uk-filter 属性添加到每个网格项目,以定义该项目所属的类别。用逗号分隔多个类别。

示例

A 1
B 2
A 3
B 4
B 5
A 6
B 7
A+B 8

标记

此示例使用 子导航 来筛选项目。

<!-- Filter Controls -->
<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>

排序

要按升序对网格项目进行排序,请将 {controls: '#my-id'} 选项添加到 data 属性,以定位排序控件的 id。

每个控件都需要具有带有自定义值的 data-uk-sort 属性,该属性定位您要排序的类别,例如 data-uk-sort="my-category"。您还需要使用目标类别的名称向每个网格项目添加一个 data 属性。该值包含应该排序的数据,例如 data-my-category="my-data"

默认情况下,项目按升序排序。要按降序对项目进行排序,只需将 :desc 添加到控件的 data 属性的值中,例如 data-uk-sort="my-category:desc"

示例

A
B
C
D
E
F
G
H

标记

<ul id="my-id" class="uk-subnav">
    <li data-uk-sort="my-category"><a href=""></a></li>
    <li data-uk-sort="my-category:desc"><a href=""></a></li>
</ul>

<div data-uk-grid="{controls: '#my-id'}">
    <div data-my-category="a">...</div>
    <div data-my-category="b">...</div>
</div>

多个类别

要使用多个类别对网格项目进行排序,请为每个类别使用不同的名称。

A 8
B 7
C 6
D 1
E 5
F 3
G 2
H 4

标记

<ul id="my-id" class="uk-subnav">
    <li data-uk-sort="my-category"><a href=""></a></li>
    <li data-uk-sort="my-category:desc"><a href=""></a></li>
    <li data-uk-sort="my-category2"><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 选项

选项 可能的值 默认值 描述
colwidth 整数 auto 列宽
animation 布尔值 true 更新时动画列
duration 整数 200 动画持续时间
gutter 整数 0 列之间的间距
controls 字符串 false 用于连接筛选/排序控件的 CSS 选择器。
filter 字符串 '' 项目筛选器

手动初始化元素

var grid = UIkit.grid(element, { /* options */ });

事件

名称 参数 描述
beforeupdate.uk.grid event, children 在网格更新之前
afterupdate.uk.grid event, children 在网格更新之后

示例

使用 jQuery 监听 beforeupdate 事件

$(function() {
    $('[data-uk-grid]').on('beforeupdate.uk.grid', function(e, children) {
        // your event-handling goes here
    });
});