Grid 栅格
24 栅格系统,用于页面布局。
设计理念
栅格系统是基于行(row)和列(col)来定义信息区块的外部框架,以保证页面的每个区域能够稳健地排布起来。下面简单介绍一下它的工作原理:
- 通过
row在水平方向建立一组column(简写 col) - 你的内容应当放置于
col内,并且,只有col可以作为row的直接元素 - 栅格系统中的列是指 1 到 24 的值来表示其跨越的范围。例如,三个等宽的列可以使用
<g-col :span="8" />来创建 - 如果一个
row中的col总和超过 24,那么多余的col会作为一个整体另起一行排列
基础用法
使用单一的一组 Row 和 Col 栅格组件,就可以创建一个基本的栅格系统,所有列(Col)必须放在 Row 内。
vue
<template>
<g-row>
<g-col :span="24">col</g-col>
</g-row>
<g-row>
<g-col :span="12">col-12</g-col>
<g-col :span="12">col-12</g-col>
</g-row>
<g-row>
<g-col :span="8">col-8</g-col>
<g-col :span="8">col-8</g-col>
<g-col :span="8">col-8</g-col>
</g-row>
<g-row>
<g-col :span="6">col-6</g-col>
<g-col :span="6">col-6</g-col>
<g-col :span="6">col-6</g-col>
<g-col :span="6">col-6</g-col>
</g-row>
</template>区块间隔
栅格常常需要和间隔进行配合,你可以使用 Row 的 gutter 属性,我们推荐使用 (16+8n)px 作为栅格间隔。
vue
<template>
<g-row :gutter="16">
<g-col :span="6">
<div>col-6</div>
</g-col>
<g-col :span="6">
<div>col-6</div>
</g-col>
<g-col :span="6">
<div>col-6</div>
</g-col>
<g-col :span="6">
<div>col-6</div>
</g-col>
</g-row>
</template>左右偏移
使用 offset 可以将列向右侧偏移。例如,offset={4} 将元素向右侧偏移了 4 个列(column)的宽度。
vue
<template>
<g-row>
<g-col :span="8">col-8</g-col>
<g-col :span="8" :offset="8">col-8</g-col>
</g-row>
<g-row>
<g-col :span="6" :offset="6">col-6 col-offset-6</g-col>
<g-col :span="6" :offset="6">col-6 col-offset-6</g-col>
</g-row>
<g-row>
<g-col :span="12" :offset="6">col-12 col-offset-6</g-col>
</g-row>
</template>栅格排序
通过使用 push 和 pull 类就可以很容易的改变列(column)的顺序。
vue
<template>
<g-row>
<g-col :span="18" :push="6">col-18 col-push-6</g-col>
<g-col :span="6" :pull="18">col-6 col-pull-18</g-col>
</g-row>
</template>排版
布局基础。
子元素根据不同的值 start、center、end、space-between、space-around、space-evenly,分别定义在父节点里面的排版方式。
vue
<template>
<div>
<p>sub-element align left</p>
<g-row type="flex" justify="start">
<g-col :span="4">col-4</g-col>
<g-col :span="4">col-4</g-col>
<g-col :span="4">col-4</g-col>
<g-col :span="4">col-4</g-col>
</g-row>
<p>sub-element align center</p>
<g-row type="flex" justify="center">
<g-col :span="4">col-4</g-col>
<g-col :span="4">col-4</g-col>
<g-col :span="4">col-4</g-col>
<g-col :span="4">col-4</g-col>
</g-row>
<p>sub-element align right</p>
<g-row type="flex" justify="end">
<g-col :span="4">col-4</g-col>
<g-col :span="4">col-4</g-col>
<g-col :span="4">col-4</g-col>
<g-col :span="4">col-4</g-col>
</g-row>
<p>sub-element monospaced arrangement</p>
<g-row type="flex" justify="space-between">
<g-col :span="4">col-4</g-col>
<g-col :span="4">col-4</g-col>
<g-col :span="4">col-4</g-col>
<g-col :span="4">col-4</g-col>
</g-row>
<p>sub-element align full</p>
<g-row type="flex" justify="space-around">
<g-col :span="4">col-4</g-col>
<g-col :span="4">col-4</g-col>
<g-col :span="4">col-4</g-col>
<g-col :span="4">col-4</g-col>
</g-row>
<p>sub-element align evenly</p>
<g-row type="flex" justify="space-evenly">
<g-col :span="4">col-4</g-col>
<g-col :span="4">col-4</g-col>
<g-col :span="4">col-4</g-col>
<g-col :span="4">col-4</g-col>
</g-row>
</div>
</template>对齐
子元素垂直对齐。
vue
<template>
<div>
<p>Align Top</p>
<g-row type="flex" justify="center" align="top">
<g-col :span="4"><p style="height: 100px">col-4</p></g-col>
<g-col :span="4"><p style="height: 50px">col-4</p></g-col>
<g-col :span="4"><p style="height: 120px">col-4</p></g-col>
<g-col :span="4"><p style="height: 80px">col-4</p></g-col>
</g-row>
<p>Align Middle</p>
<g-row type="flex" justify="space-around" align="middle">
<g-col :span="4"><p style="height: 100px">col-4</p></g-col>
<g-col :span="4"><p style="height: 50px">col-4</p></g-col>
<g-col :span="4"><p style="height: 120px">col-4</p></g-col>
<g-col :span="4"><p style="height: 80px">col-4</p></g-col>
</g-row>
<p>Align Bottom</p>
<g-row type="flex" justify="space-between" align="bottom">
<g-col :span="4"><p style="height: 100px">col-4</p></g-col>
<g-col :span="4"><p style="height: 50px">col-4</p></g-col>
<g-col :span="4"><p style="height: 120px">col-4</p></g-col>
<g-col :span="4"><p style="height: 80px">col-4</p></g-col>
</g-row>
</div>
</template>响应式布局
参照 Bootstrap 的 响应式设计,预设六个响应尺寸:xs sm md lg xl xxl。
vue
<template>
<g-row>
<g-col :xs="2" :sm="4" :md="6" :lg="8" :xl="10">Col</g-col>
<g-col :xs="20" :sm="16" :md="12" :lg="8" :xl="4">Col</g-col>
<g-col :xs="2" :sm="4" :md="6" :lg="8" :xl="10">Col</g-col>
</g-row>
</template>API
Row
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| align | 垂直对齐方式 | top | middle | bottom | stretch | top |
| gutter | 栅格间隔,可以写成像素值或支持响应式的对象写法来设置水平间隔 { xs: 8, sm: 16, md: 24}。或者使用数组形式同时设置 [水平间距, 垂直间距] | number | object | array | 0 |
| justify | 水平排列方式 | start | end | center | space-around | space-between | space-evenly | start |
| type | 布局模式,可选 flex,现代浏览器下有效 | string | - |
| wrap | 是否自动换行 | boolean | true |
Col
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| flex | flex 布局属性 | string | number | - |
| offset | 栅格左侧的间隔格数,间隔内不可以有栅格 | number | 0 |
| order | 栅格顺序 | number | 0 |
| pull | 栅格向左移动格数 | number | 0 |
| push | 栅格向右移动格数 | number | 0 |
| span | 栅格占位格数,为 0 时相当于 display: none | number | - |
| xs | 屏幕 < 576px 响应式栅格,可为栅格数或一个包含其他属性的对象 | number | object | - |
| sm | 屏幕 ≥ 576px 响应式栅格,可为栅格数或一个包含其他属性的对象 | number | object | - |
| md | 屏幕 ≥ 768px 响应式栅格,可为栅格数或一个包含其他属性的对象 | number | object | - |
| lg | 屏幕 ≥ 992px 响应式栅格,可为栅格数或一个包含其他属性的对象 | number | object | - |
| xl | 屏幕 ≥ 1200px 响应式栅格,可为栅格数或一个包含其他属性的对象 | number | object | - |
| xxl | 屏幕 ≥ 1600px 响应式栅格,可为栅格数或一个包含其他属性的对象 | number | object | - |