- 功能最强大的布局方案
Grid
尤其适合不规则布局- 二维布局用 Grid
- 一维布局用 Flex
一些基本概念
Grid 容器(Grid Container)和 Grid 条目(Grid Item)
<div class="container">
<div class="item item-1"></div>
<div class="item item-2"></div>
<div class="item item-3"></div>
</div>
Grid 内部
- Grid 线(Grid Line)
- Grid 元件(Grid Cell)
- Grid 轨迹(Grid Track)
- Grid 区域(Grid Area)
语法
指定 container
.container {
display:grid; /* 生成块级网格 */
display:inline-grid; /* 生成内联级网格 */
}
设置每个行的高度和每列的宽度
.container {
grid-template-columns: 40px 50px auto 50px 40px;
grid-template-rows: 25% 100px auto;
}
给行命名
注意行名称的括号语法:
.container {
grid-template-columns: [first] 40px [line2] 50px [line3] auto [col4-start] 50px [five] 40px [end];
grid-template-rows: [row1-start] 25% [row1-end] 100px [third-line] auto [last-line];
}
取名的作用
item
可以设置范围.item-a {
grid-column-start: 2;
grid-column-end: five;
grid-row-start: row1-start;
grid-row-end: 3;
}
fr-free space
巧记:“份儿”该 fr 单位允许您将轨道的大小设置为网格容器可用空间的一部分。
.container {
grid-template-columns: 1fr 1fr 1fr;
/* 将每个项目设置为网格容器宽度的三分之一 */
}
可用空间是在任何非灵活项目之后计算的 。
- 下列代码中
fr
单元可用的可用空间总量 不包括 50px.container {
grid-template-columns: 1fr 50px 1fr 1fr;
/* fr 单元可用的可用空间总量 不包括 50px */
}
一行可以有多个名称
例如:👇代码中第二行将有两个名称:row1-end
和row2-start
:.container {
grid-template-rows: [row1-start] 25% [row1-end row2-start] 25% [row2-end];
}
用
repeat()
符号来定义包含重复部分的简化:
这相当于:.container {
grid-template-columns: repeat(3, 20px [col-start]);
}
.container {
grid-template-columns: 20px [col-start] 20px [col-start] 20px [col-start];
}
多行共享相同名称用行名和计数来引用它们
.item {
grid-column-start: col-start 2;
}
定义一片区域
```css .item-a { grid-area: header; } .item-b { grid-area: main; } .item-c { grid-area: sidebar; } .item-d { grid-area: footer; }
.container { display: grid; grid-template-columns: 50px 50px 50px 50px; grid-template-rows: auto; grid-template-areas: “header header header header” “main main . sidebar” “footer footer footer footer”; }
这将创建一个四列宽、三行高的网格。整个顶行将由标题 区域组成 。<br />中间一行将由两个主要区域、一个空单元格和一个侧边栏区域组成。最后一行都是 页脚。<br />
<a name="Q2d2K"></a>
#### 设置列 / 行之间的间距宽度 `gap`
```css
.container {
grid-template-columns: 100px 50px 100px;
grid-template-rows: 80px auto 80px;
column-gap: 10px;
row-gap: 15px;
}
grid
属性太多,可以现学现用,参考本文开头处列出的网址。等到 Grid 普及了,前端对 CSS 的要求会进一步降低