Skip to content

Grid 宫格

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

导入

js
import Grid from '@/components/layout/grid/Grid.vue'
import GridItem from '@/components/layout/grid/GridItem.vue'

用法

基础用法

通过 icon 属性设置格子内的图标,title 属性设置文字内容。

vue
<template>
  <Grid>
    <GridItem title="可点击" touchable icon="picture-filling" @click="onClick" />
    <GridItem title="本地图片" :icon="logo" :iconSize="30" />
    <GridItem title="URL图片" icon="https://imengyu.top/assets/images/test/icon.png" />
    <GridItem title="颜色" icon="picture-filling" iconColor="primary" titleColor="primary" />
    <GridItem title="文字" icon="picture-filling" iconColor="danger" />
    <GridItem title="文字" icon="picture-filling" iconColor="success" />
    <GridItem title="文字" icon="picture-filling" iconColor="warning" />
    <GridItem title="文字" icon="picture-filling" iconColor="#f60" />
  </Grid>
</template>

<script setup>
function onClick() {
  uni.showToast({ title: '点击' });
}
</script>

自定义列数

默认一行展示四个格子,可以通过 mainAxisCount 属性自定义列数。

vue
<template>
  <Grid :mainAxisCount="3">
    <GridItem title="文字" icon="picture-filling" />
    <GridItem title="文字" icon="picture-filling" />
    <GridItem title="文字" icon="picture-filling" />
    <GridItem title="文字" icon="picture-filling" />
    <GridItem title="文字" icon="picture-filling" />
    <GridItem title="文字" icon="picture-filling" />
  </Grid>
</template>

正方形格子

设置 square 属性后,格子的高度会和宽度保持一致。

vue
<template>
  <Grid :mainAxisCount="4" square>
    <GridItem title="文字" icon="picture-filling" />
    <GridItem title="文字" icon="picture-filling" />
    <GridItem title="文字" icon="picture-filling" />
    <GridItem title="文字" icon="picture-filling" />
    <GridItem title="文字" icon="picture-filling" />
    <GridItem title="文字" icon="picture-filling" />
  </Grid>
</template>

内容横排

将 direction 属性设置为 horizontal,可以让宫格的内容呈横向排列。

vue
<template>
  <Grid direction="horizontal">
    <GridItem title="文字" icon="picture-filling" />
    <GridItem title="文字" icon="picture-filling" />
    <GridItem title="文字" icon="picture-filling" />
    <GridItem title="文字" icon="picture-filling" />
    <GridItem title="文字" icon="picture-filling" />
    <GridItem title="文字" icon="picture-filling" />
  </Grid>
</template>

无边框

设置 borderGrid 为 false 可以隐藏宫格的边框。

vue
<template>
  <Grid :borderGrid="false">
    <GridItem title="文字" icon="picture-filling" />
    <GridItem title="文字" icon="picture-filling" />
    <GridItem title="文字" icon="picture-filling" />
    <GridItem title="文字" icon="picture-filling" />
    <GridItem title="文字" icon="picture-filling" />
    <GridItem title="文字" icon="picture-filling" />
  </Grid>
</template>

自定义渲染内容

通过默认插槽可以自定义 GridItem 的内容。

vue
<template>
  <Grid :mainAxisCount="3">
    <GridItem>
      <Image src="https://imengyu.top/assets/images/test/icon.png" :width="170" :height="170" />
    </GridItem>
    <GridItem>
      <Image src="https://imengyu.top/assets/images/test/icon.png" :width="170" :height="170" />
    </GridItem>
    <GridItem>
      <Image src="https://imengyu.top/assets/images/test/icon.png" :width="170" :height="170" />
    </GridItem>
  </Grid>
</template>

API 参考

Grid

宫格容器组件,用于包裹 GridItem 组件。

Props

名称说明类型必填默认值
direction内容排列方式'horizontal' | 'vertical' | 'vetical-reverse' | 'horizontal-reverse'-'vertical'
crossAxisSpacing交叉轴元素间距number-0
mainAxisCount主轴上的元素数量number-4
mainAxisSpacing主轴元素间距number-0
square格子是否为正方形boolean-false
borderGrid是否显示边框boolean-true
borderWidth边框的宽度number | string-'1px'
borderColor边框颜色string-'border.cell'
widthCut宽度减去的值number | string-0

Slots

名称说明
default用于放置 GridItem 组件

GridItem

宫格项组件,必须作为 Grid 的子组件使用。

Props

名称说明类型必填默认值
title标题string--
titleColor文字颜色string-'text.title'
titleStyle文字自定义样式object-{}
backgroundColor背景颜色string-'white'
touchable是否开启点击反馈boolean-true
highlightColor点击高亮颜色string-'pressed.white'
icon图标名称或图片链接(http/https)string--
iconSize图标大小number-42
iconColor图标颜色string-'text.content'
iconProps图标自定义属性IconProps--
iconStyle图标自定义样式object-{}
subTitle如果填写,则在图片位置显示文字,同时icon不生效string | false-false
subTitleColorsubTitle 文字颜色string-'text.second'
subTitleStylesubTitle 文字样式object-{}
direction格子内容排列的方向'vetical' | 'horizontal' | 'vetical-reverse' | 'horizontal-reverse'-'vetical'
innerStyle自定义样式object-{}
radius圆角number | string-0

Slots

名称说明
defaultGridItem 内容区域,用于自定义显示内容

Events

名称说明参数
click点击事件$event

主题变量

名称类型默认值说明
GridBorderSizestring'1px'宫格边框宽度
GridBorderColorstring'border.cell'宫格边框颜色
GridItemBackgroundColorstring'white'宫格项背景颜色
GridItemHighlightColorstring'pressed.white'宫格项点击高亮颜色
GridItemIconColorstring'text.content'宫格项图标颜色
GridItemIconSizenumber42宫格项图标大小
GridItemIconStyleobject{}宫格项图标样式
GridItemIconMarginVerticalnumber10宫格项图标垂直边距
GridItemIconMarginHorizontalnumber8宫格项图标水平边距
GridItemPaddingVerticalnumber22宫格项垂直内边距
GridItemPaddingHorizontalnumber8宫格项水平内边距
GridItemRadiusnumber0宫格项圆角
GridItemSubTitlestring | falsefalse宫格项副标题
GridItemSubTitleStyleobject{}宫格项副标题样式
GridItemSubTitleColorstring'text.second'宫格项副标题颜色
GridItemSubTitleFontSizenumber24宫格项副标题字体大小
GridItemSubTitleMarginTopnumber10宫格项副标题上外边距
GridItemTitleColorstring'text.title'宫格项标题颜色
GridItemTitleStyleobject{}宫格项标题样式
GridItemStyleobject{}宫格项自定义样式
GridItemDirectionstring'vetical'宫格项内容排列方向