Skip to content

Grid 宫格布局

介绍

宫格可以在水平方向上把页面分隔成等宽度的区块,用于展示内容或进行页面导航。

基础用法

宫格的宽度是根据父元素的宽度自动计算的,宫格的列数可以通过 columns 属性来指定。

html
<vd-grid columns="6">
  <vd-grid-item v-for="num in 18" :key="num" :index="index">
    {{ num }}
  </vd-grid-item>
</vd-grid>

行、列间距

通过 rowGap columnGap 属性来设置宫格行、列间距。

html
<vd-grid columns="6" row-gap="12" column-gap="12">
  <vd-grid-item v-for="num in 18" :key="num" :index="index">
    {{ num }}
  </vd-grid-item>
</vd-grid>

自定义高度

通过 height 属性来设置宫格自定义高度,设置百分比时,根据宽度比例计算。

height="75%" 表示宫格高度为宫格宽度的 75%

html
<vd-grid columns="6" height="75%">
  <vd-grid-item v-for="num in 18" :key="num" :index="index">
    {{ num }}
  </vd-grid-item>
</vd-grid>

载入动画

通过 grid-transition 属性来设置宫格自定义载入动画,动画名称参考 Transition 组件。

html
<vd-grid columns="6" grid-transition="zoom">
  <vd-grid-item v-for="num in 18" :key="num" :index="index">
    {{ num }}
  </vd-grid-item>
</vd-grid>

拖拽排序

通过 sortable 属性来设置宫格是否可拖拽排序。

html
<vd-grid columns="6" sortable>
  <vd-grid-item v-for="num in 18" :key="num" :index="index">
    {{ num }}
  </vd-grid-item>
</vd-grid>

跨行列

通过 col-span row-span 属性设置网格项跨列、跨行。布局时会自动避开已占用单元格。

html
<vd-grid columns="4" row-gap="12" column-gap="12">
  <vd-grid-item :index="0" :col-span="2" :row-span="2"></vd-grid-item>
  <vd-grid-item :index="1">1</vd-grid-item>
  <vd-grid-item :index="2">2</vd-grid-item>
  <vd-grid-item :index="3" :col-span="2"></vd-grid-item>
  <vd-grid-item :index="4">4</vd-grid-item>
  <vd-grid-item :index="5">5</vd-grid-item>
</vd-grid>

布局起点

通过 origin 指定排布起点,默认 top-left 从左上角开始;设为 top-right 则从右上角开始、按列从右往左填充。

html
<vd-grid columns="4" origin="top-right" row-gap="12" column-gap="12">
  <vd-grid-item :index="0" :col-span="2" :row-span="2"></vd-grid-item>
  <vd-grid-item :index="1">1</vd-grid-item>
  <vd-grid-item :index="2">2</vd-grid-item>
</vd-grid>

API

Grid Props

参数说明类型默认值
columns列数string | number3
origin布局起点GridOrigin'top-left'
height高度string | number'100%'
radius边框半径string | number4
row-gap行间距string | number8
column-gap列间距string | number8
grid-transition载入动画TransitionName'none'
grid-transition-duration载入动画持续时间TransitionDuration400
sortable是否可拖拽排序booleanfalse
sort-placeholder是否展示排序占位booleanfalse

GridItem Props

参数说明类型默认值
transition载入动画TransitionName-
transition-duration载入动画持续时间TransitionDuration-
transition-delay载入动画延迟时间TransitionDuration-
sortable是否可拖拽排序boolean-
col-span跨列数string | number1
row-span跨行数string | number1
index索引,在循环时设置number-

代替原始 Props

参数说明类型默认值
custom-id根节点idstring-
custom-class根节点类名ClassValue-
custom-style根节点样式StyleValue-

Grid Events

事件名说明回调参数
click点击时触发MouseEvent
resize尺寸更新时触发NodeSize
sort-start排序开始时触发GridOnSortStartEvent
sort-change排序改变时触发GridOnSortChangeEvent
sort-end排序结束时触发GridOnSortEndEvent

GridItem Events

事件名说明回调参数
click点击时触发MouseEvent

Grid Slots

名称说明
default自定义内容
sort-placeholder排序占位内容

GridItem Slots

名称说明
default自定义内容
drag排序拖拽内容

Grid Expose

方法名 / 属性名说明参数返回值
rect容器宽度-{ width: number }
gap网格间距-{ row: number; column: number }
itemSize网格项尺寸-ComputedRef<{ width: number; height: number }>
position网格项位置表-Ref<Record<string, GridItemPosition>>
swap交换两个网格项fromIndex: number, toIndex: numberfalse | GridOnSortChangeEvent
getSortData获取排序数据-GridSortData

类型定义

组件导出以下类型定义:

ts
import type { GridOnSortStartEvent, GridOnSortChangeEvent, GridOnSortEndEvent } from 'vital-design';

赣ICP备2025061025号-1