一、创建grid容器,并使用grid-template-columns或者 grid-templater-rows 设置网格,并且使用grid-auto-flow设置行或者列优先。
示意图:行优先或者列优先
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>创建grid容器</title>
<style>
.container {
/* 容器大小 */
width: 400px;
height: 400px;
background-color: thistle;
/* 创建grid容器 */
display: grid;
/* 显示划分 */
grid-template-columns: 30% 100px 100px;
grid-template-rows: 100px 100px;
/* 对于放置不下的单元格,会隐式生成新行,可以自动设置,也可以自定义新行宽度 */
grid-auto-rows: auto;
grid-auto-rows: 100px;
/* 列优先 */
/* grid-auto-flow: column; */
/* 行优先 */
grid-auto-flow: row;
}
.item {
background-color: lightblue;
}
</style>
</head>
<body>
<div class="container">
<div class="item item1">1</div>
<div class="item item2">2</div>
<div class="item item3">3</div>
<div class="item item4">4</div>
<div class="item item5">5</div>
<div class="item item6">6</div>
<div class="item item7">7</div>
</div>
</body>
</html>
二、设置单元格的数量和大小
示意图
按百分比划分
grid-template-columns: 30% 20% auto;
- 按比例划分
grid-template-columns: 2fr 1fr 1fr;
- 重复设置
grid-template-columns: repeat(3, auto);
grid-template-rows: repeat(3), 100px;
- 按分组设置
/* 按分组显示(2 代表显示两遍,40px代表第一列显示40px,60px代表第二列显示60px) */
grid-template-columns: repeat(2, 40px 60px);
grid-template-rows: repeat(2, 40px 60px);
- 弹性显示
/* 弹性显示 */
grid-template-columns: repeat(4, minmax(30px, 90px));
grid-template-rows: repeat(1, minmax(30px, 50px));
- 自动填充
/* 自动填充 */
grid-template-rows: repeat(auto-fill, 100px);
grid-template-columns: repeat(auto-fill, 100px);
三、划分网格区域,grid-row-start\grid-row-end;grid-column-start\grid-column-end
- 1.通过默认的网格线划分单元格
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>划分网格区域</title>
<style>
.container {
/* 容器大小 */
width: 400px;
height: 400px;
background-color: thistle;
/* 创建grid容器 */
display: grid;
grid-template-columns: repeat(4, 100px);
grid-template-rows: repeat(4, 100px);
/* 行优先 */
grid-auto-flow: row;
}
.item.item1 {
background-color: palevioletred;
grid-row-start: 1;
grid-row-end: 3;
grid-column-start: 1;
grid-column-end: 3;
}
.item.item2 {
background-color: purple;
grid-row-start: 3;
grid-row-end: 5;
grid-column-start: 3;
grid-column-end: 5;
}
.item.item3 {
background-color: seagreen;
grid-row-start: 1;
grid-row-end: 3;
grid-column-start: 3;
grid-column-end: 5;
}
</style>
</head>
<body>
<div class="container">
<div class="item item1">1</div>
<div class="item item2">2</div>
<div class="item item3">3</div>
<div class="item item4">4</div>
</div>
</body>
</html>
- 通过偏移量来简化,简写
/* 跨行跨列 */
.item.item1 {
background-color: palevioletred;
grid-row-start: 1;
grid-row-end: span 2;
grid-column-start: 1;
grid-column-end: span 3;
}
/* 简写 */
.item.item2 {
background-color: purple;
grid-row: 3/5;
grid-column: 3/5;
}
- 使用默认位置,只使用偏移量
![](https://img.php.cn/upload/image/970/620/811/1586913056687363.png)
```css
.item.item1 {
background-color: palevioletred;
grid-row-end: span 1;
grid-column-end: span 2;
}
```
四、使用命名网格线划分单元格
.item.item1 {
/* 默认跨一行一列、 */
background-color: red;
grid-row-start: r1-end;
grid-column-start: c1-start;
}
.item.item2 {
background-color: green;
grid-column-start: c1-start;
/* grid-row-end: r2-start; */
/* grid-column-end: c3-end; */
grid-column-end: span 3;
}
.item.item3 {
background-color: pink;
grid-column-end: span 2;
grid-row-end: span 2;
}
五、默认网格区域(grid-area)
.item.item1 {
/* 默认跨一行一列、 */
background-color: lightgrey;
/* grid-area: 1/1/2/5; */
/* 当前位置省略,而且可以使用偏移量 */
grid-area: span 1 / span 4;
}
/* 列默认并一列,可以省略 */
.item.item2 {
background-color: lightgreen;
grid-area: span 3;
}
六、命名网格区域
- 设置命名网格区域的属性grid-template-area,相同名称的命名区域会合并。
.container {
/* 容器大小 */
width: 400px;
height: 400px;
/* background-color: thistle; */
/* 创建grid容器 */
display: grid;
border: 1px solid black;
grid-template-columns: 80px 1fr 80px;
grid-template-rows: 40px 1fr 40px;
grid-template-areas:
"header header header"
"left main right"
"footer footer footer";
}
七、网格区域占位符“…”用三个点做占位符
grid-template-areas:
"header header header"
". . ."
"footer footer footer";
八、默认的网格名称(header-start起始行 起始列;header-end 结束列结束行)
.item.item1 {
/* 默认跨一行一列、 */
background-color: lightgrey;
grid-area: header-start/header-start/header-end/header-end;
}
九、设置单元格在容器中的对齐
justify-conent 容器内的行对齐;
align-content 容器内的列对齐;
居中对齐
justify-content: center;
align-content: center;
平均对齐
justify-content: space-evenly;
align-content: space-evenly;
space-content 垂直靠end,水平对齐:
place-content: end space-around;
项目在单元格的对齐方式
水平居中:justify-items 垂直居中:aligh-items
简写:space-items:垂直,水平;
/* 项目对齐 */
justify-items: center;
align-items: center;
text-align: center;
/* 项目对齐简写 */
place-items: start center;
.item.item5 {
/* align-self: start;
justify-self: end; */
place-self: start end;
十、间隙 gap align-gap justify-gap
gap:5px
总结
- 1 . gird 不同与flex布局方式,是一个二维的布局方法,优化界面设计。
- 2 .
display:grid
默认使项目纵向排列,增加grid-template属性后,划分网格。 - 3 .使用grid-auto-flow 属性设置行优先或者列优先。
- 4 .使用grid-auto-rows对于放置不下的单元格,会隐式生成单元格,可以使用auto属性自动填充,也可以使用具体像素定义行宽。
- 5 .按比例划分单元格 单位 fr ,可以划分自由空间的比例。
- 6 .比例使用auto后,后面的比例会失效。
- 7 .自动填充 repeat(auto-fill,100px)优先级要高于弹性和重复设置。
- 8 . grid布局是先画格子,然后再根据划分好的格子放置项目。根据起始位置划分区域,先写的优先排序。
- 9 .简写可以通过 grid-row:1/3方式、偏移量方式 grid-row:1/span 2方式、根据当前位置,省略起始位置,只使用偏移量方式。
- 10 .利用好单元格的默认起始点,直接设置终止行和列,可以简写代码。
- 11 . grid-area 可以实现行和列的简写、偏移量的简写,并且可以和默认起始位置合并使用。
- 12 . grid-template-area 功能很强大,布局简单,给每个区域起个名字,然后相同名称的会合并。
- 13 . “…”占位符可以简化网格区域,一个点占一个格,由浏览器自动计算空间,可以起到简化代码的作用。
14 .设置单元格在容器内对齐
justify-content aligh-content 默认是拉伸,与flex相同。
简写:place-content:垂直方向,水平方向;15 . 容器中的项目对齐最好使用place-content 属性,单元格中项目对齐,最好使用 place-items 属性;单独对齐使用place-self.
- 单元格间的间隙 align-gap justify-gap ,简写 gap,不能使用margin、和 padding。