Grid 栅格
24栅格系统。
栅格设计理念
在多数业务情况下,Ant Design需要在设计区域内解决大量信息收纳的问题,因此在12栅格系统的基础上,我们将整个设计建议区域按照24等分的原则进行划分。
划分之后的信息区块我们称之为『盒子』。建议横向排列的盒子数量最多四个,最少一个。『盒子』在整个屏幕上占比见上图。设计部分基于盒子的单位定制盒子内部的排版规则,以保证视觉层面的舒适感。
示例
示例。
<template>
<div class="grid-demo">
<div class="overview">
<v-row class="demo-row">
<v-col class="demo-col demo-col-1" span="24">
100%
</v-col>
</v-row>
<v-row class="demo-row">
<v-col class="demo-col demo-col-2" span="6">25%</v-col>
<v-col class="demo-col demo-col-3" span="6">25%</v-col>
<v-col class="demo-col demo-col-2" span="6">25%</v-col>
<v-col class="demo-col demo-col-3" span="6">25%</v-col>
</v-row>
<v-row class="demo-row">
<v-col class="demo-col demo-col-4" span="8">33.33%</v-col>
<v-col class="demo-col demo-col-5" span="8">33.33%</v-col>
<v-col class="demo-col demo-col-4" span="8">33.33%</v-col>
</v-row>
<v-row class="demo-row">
<v-col class="demo-col demo-col-1" span="12">50%</v-col>
<v-col class="demo-col demo-col-3" span="12">50%</v-col>
</v-row>
<v-row class="demo-row">
<v-col class="demo-col demo-col-4" span="16">66.66%</v-col>
<v-col class="demo-col demo-col-5" span="8">33.33%</v-col>
</v-row>
</div>
</div>
</template>
概述
布局的栅格化系统,我们是基于行(row)和列(col)来定义信息区块的外部框架,以保证页面的每个区域能够稳健地排布起来。下面简单介绍一下它的工作原理:
- 通过
row
在水平方向建立一组column
(简写col) - 你的内容应当放置于
col
内,并且,只有col
可以作为row
的直接元素 - 栅格系统中的列是指1到24的值来表示其跨越的范围。例如,三个等宽的列可以使用
.col-8
来创建 - 如果一个
row
中的col
总和超过 24,那么多余的col
会作为一个整体另起一行排列
Flex 布局
我们的栅格化系统支持 Flex 布局,允许子元素在父节点内的水平对齐方式 - 居左、居中、居右、等宽排列、分散排列。子元素与子元素之间,支持顶部对齐、垂直居中对齐、底部对齐的方式。同时,支持使用 order 来定义元素的排列顺序。
Flex 布局是基于 24 栅格来定义每一个『盒子』的宽度,但排版则不拘泥于栅格。
代码演示
基本栅格
从堆叠到水平排列。使用单一的一组 Row
和 Col
栅格组件,就可以创建一个基本的栅格系统,所有列(Col)必须放在 Row
内。
<template>
<div class="grid-demo">
<v-row>
<v-col span="24">col-24</v-col>
</v-row>
<v-row>
<v-col span="6">col-6</v-col>
<v-col span="6">col-6</v-col>
<v-col span="6">col-6</v-col>
<v-col span="6">col-6</v-col>
</v-row>
<v-row>
<v-col span="8">col-8</v-col>
<v-col span="8">col-8</v-col>
<v-col span="8">col-8</v-col>
</v-row>
<v-row>
<v-col span="12">col-12</v-col>
<v-col span="12">col-12</v-col>
</v-row>
<v-row class="demo-row">
<v-col span="16">col-16</v-col>
<v-col span="8">col-8</v-col>
</v-row>
</div>
</template>
区块间隔
栅格常常需要和间隔进行配合,你可以使用 Row
的 gutter
属性,我们推荐使用 (16+8n)px
作为栅格间隔。
<template>
<div class="grid-demo">
<v-row :gutter="16">
<v-col class="gutter-row" span="6">
<div class="gutter-box">col-6</div>
</v-col>
<v-col class="gutter-row" span="6">
<div class="gutter-box">col-6</div>
</v-col>
<v-col class="gutter-row" span="6">
<div class="gutter-box">col-6</div>
</v-col>
<v-col class="gutter-row" span="6">
<div class="gutter-box">col-6</div>
</v-col>
</v-row>
</div>
</template>
<style>
.grid-demo .gutter-example .ant-row > div {
background: transparent;
border: 0;
}
.grid-demo .gutter-box {
background: #00A0E9;
padding: 5px 0;
}
</style>
左右偏移
使用 offset
可以将列向右侧偏。例如,offset={4}
将元素向右侧偏移了 4 个列(column)的宽度。
<template>
<div class="grid-demo">
<v-row>
<v-col span="8">col-8</v-col>
<v-col span="8" offset="8">col-8</v-col>
</v-row>
<v-row>
<v-col span="6" offset="6">col-6 col-offset-6</v-col>
<v-col span="6" offset="6">col-6 col-offset-6</v-col>
</v-row>
<v-row>
<v-col span="12" offset="6">col-12 col-offset-6</v-col>
</v-row>
</div>
</template>
格栅排序
列排序。通过使用 push
和 pull
类就可以很容易的改变列(column)的顺序。
<template>
<div class="grid-demo">
<v-row>
<v-col span="18" push="6">col-18 col-push-6</v-col>
<v-col span="6" pull="18">col-6 col-pull-18</v-col>
</v-row>
</div>
</template>
Flex 布局
Flex 布局基础。使用 row-flex
定义 flex
布局,其子元素根据不同的值 start
,center
,end
,space-between
,space-around
,分别定义其在父节点里面的排版方式。
<template>
<div class="grid-demo">
<p>sub-element align left</p>
<v-row type="flex" justify="start">
<v-col span="4">col-4</v-col>
<v-col span="4">col-4</v-col>
<v-col span="4">col-4</v-col>
<v-col span="4">col-4</v-col>
</v-row>
<p>sub-element align center</p>
<v-row type="flex" justify="center">
<v-col span="4">col-4</v-col>
<v-col span="4">col-4</v-col>
<v-col span="4">col-4</v-col>
<v-col span="4">col-4</v-col>
</v-row>
<p>sub-element align right</p>
<v-row type="flex" justify="end">
<v-col span="4">col-4</v-col>
<v-col span="4">col-4</v-col>
<v-col span="4">col-4</v-col>
<v-col span="4">col-4</v-col>
</v-row>
<p>sub-element monospaced arrangement</p>
<v-row type="flex" justify="space-between">
<v-col span="4">col-4</v-col>
<v-col span="4">col-4</v-col>
<v-col span="4">col-4</v-col>
<v-col span="4">col-4</v-col>
</v-row>
<p>sub-element align full</p>
<v-row type="flex" justify="space-around">
<v-col span="4">col-4</v-col>
<v-col span="4">col-4</v-col>
<v-col span="4">col-4</v-col>
<v-col span="4">col-4</v-col>
</v-row>
</div>
</template>
Flex 对齐
Flex 子元素垂直对齐。
<template>
<div class="grid-demo">
<p>Align Top</p>
<v-row type="flex" justify="center" align="top">
<v-col span="4"><p class="height-100">col-4</p></v-col>
<v-col span="4"><p class="height-50">col-4</p></v-col>
<v-col span="4"><p class="height-120">col-4</p></v-col>
<v-col span="4"><p class="height-80">col-4</p></v-col>
</v-row>
<p>Align Center</p>
<v-row type="flex" justify="space-around" align="middle">
<v-col span="4"><p class="height-100">col-4</p></v-col>
<v-col span="4"><p class="height-50">col-4</p></v-col>
<v-col span="4"><p class="height-120">col-4</p></v-col>
<v-col span="4"><p class="height-80">col-4</p></v-col>
</v-row>
<p>Align Bottom</p>
<v-row type="flex" justify="space-between" align="bottom">
<v-col span="4"><p class="height-100">col-4</p></v-col>
<v-col span="4"><p class="height-50">col-4</p></v-col>
<v-col span="4"><p class="height-120">col-4</p></v-col>
<v-col span="4"><p class="height-80">col-4</p></v-col>
</v-row>
<p>Dynamically Align To {{ '"' + align + '"' }}</p>
<p><v-button type="primary" @click="alignChange">改变Align</v-button></p>
<v-row type="flex" justify="space-between" :align="align">
<v-col span="4"><p class="height-100">col-4</p></v-col>
<v-col span="4"><p class="height-50">col-4</p></v-col>
<v-col