2021 年 CSS 网格速查表
目录 :
首先,什么是Grid?
网格架构
网格图 --
如何设置项目
网格父级属性
网格模板列
网格模板行
网格模板区域
列间隙:
行距:
对齐项目:
对齐项目:
对齐内容:
对齐内容:
休息一下
网格子项属性
网格尺度
网格列:开始/结束
网格行:开始/结束
网格区域:
自我证明:
对齐自身:
短手
地点内容:
地点项目:
地点自我:
网格模板:
间隙/网格间隙:
结论
今天我们将学习CSS 网格属性,以便你能够创建自己的响应式网站。我会讲解网格的每个属性是如何运作的,并附上一份涵盖所有网格功能的速查表。开始吧🎖️
目录 :
如果您愿意,也可以在 YouTube 上观看此教程:
首先,什么是Grid?
网格是制作网站的蓝图。
网格模型使我们能够布局网站的内容。不仅如此,它还能帮助我们创建针对多种设备的响应式网站所需的结构。
这是我使用 Grid 作为主要蓝图创建的简单演示。
桌面视图
移动视图
网格架构
那么网格架构是如何工作的呢?网格项(内容)沿着主轴和横轴分布。我们利用网格的各种属性来操作这些项,从而创建网站布局。
顺便说一句,我们可以像 Excel 软件一样连接多行和多列,这比 Flexbox 为我们提供了更多的灵活性和选择。
这是我为Flexbox制作的 CheatSheet
网格图 --
此图表包含使用网格时可以使用的所有属性。网格属性分为 -
- 父属性
- 儿童属性
注意:红色文本是简写属性
在本教程结束时,您将清楚地了解如何使用所有这些属性
如何设置项目
对于这个项目,你需要了解一些 HTML、CSS 知识以及如何使用 VS Code。跟随我完成以下任务:
- 创建名为“Project-1”的文件夹并打开 VS Code
- 创建 index.html 和 style.css 文件
- 安装 Live Server 并运行它。
或者,您可以直接打开Codepen并开始编码。
在本教程结束时,您将能够制作出准确而美观的网站布局。
好了……一切就绪!开始写代码吧。😊
HTML
在 body 标签内创建 3 个框。像这样 👇
<div class="container">
<div class="box-1"> A </div>
<div class="box-2"> B </div>
<div class="box-3"> C </div>
</div>
CSS
步骤1
让我们清除默认浏览器样式。关注我👇
*{
margin: 0px;
padding: 0px;
box-sizing: border-box;
}
步骤2
在主体选择器中,进行以下调整
body {
font-family: sans-serif;
font-size: 40px;
width: 100%;
min-height: 100vh;
}
步骤3
现在,让我们通过选择所有框来设置它们的样式 ->
[class^="box-"] {
background-color: skyblue;
/* To place the letter at the center */
display: grid;
place-items: center;
}
注意:别担心,我们将详细讨论这些网格属性。
步骤4
现在,像这样在我们的盒子之间留出一些空隙👇
.container {
display: grid;
gap: 20px;
}
但是等等...
在开始之前,您需要了解父类和子类之间的关系。
对于网格父级属性,我们将在 .container 类中写入。对于网格子级属性,我们将在 .box-* 类中写入。
网格父级属性
首先,让我们了解一下网格父级属性!
网格模板列
这用于定义列的数量和宽度。您可以单独设置每列的宽度,也可以使用“repeat()”函数为所有列设置统一的宽度。
要重新创建这些结果,请在 CSS 上写下这些行 ->
.container {
display: grid;
gap: 20px;
/* Change the values 👇 to experiment */
grid-template-columns: 200px auto 100px;
}
笔记 :
- 像素值将是精确测量的。“auto”关键字将覆盖可用空间。
- 如果使用 fr(分数单位)测量,所有框的大小将相等
网格模板行
这用于定义行数和行高。您可以单独设置每行的高度,也可以使用“repeat()”函数为所有行设置统一的高度。
为了测试这些结果,在 CSS 上写下这些行 ->
.container {
display: grid;
gap: 20px;
height: 100vh;
/* Change the values 👇 to experiment */
grid-template-rows: 200px auto 100px;
}
网格模板区域
这用于指定网格单元格在父容器中应占用的列和行空间量。有了它,生活变得轻松多了,因为它让我们能够直观地看到我们正在做的事情。
称之为我们的布局的蓝图(模板)👇
要进行此实验,您需要了解父级和子级属性 -
- grid-template-areas :将创建蓝图的父属性
- grid-area :将遵循蓝图的子属性。
首先,创建蓝图
就像这样👇在父级 .container 类中
.container {
display: grid;
gap: 20px;
height: 100vh;
grid-template-areas:
"A A A A A A A A A A A A"
"B B B B B B B B B B C C"
"B B B B B B B B B B C C";
}
实施蓝图
定位我们所有的子 .box-* 类并设置如下值 ->
.box-1{
grid-area: A;
}
.box-2{
grid-area: B;
}
.box-3{
grid-area: C;
}
注意:网格区域属性将在网格子属性部分再次讨论
列间隙:
此属性用于在网格内的列之间放置间隙👇
要测试这一点,请写入👇
.container {
display: grid;
height: 100vh;
grid-template-columns: 100px 100px 100px;
//Change values👇 to experiment
column-gap: 50px;
}
注意: column-gap 与 grid-template-columns 配合使用
行距:
此属性用于在网格内放置行之间的间隙👇
让我们测试一下👇
.container {
display: grid;
height: 100vh;
grid-template-rows: 100px 100px 100px;
// Change 👇 values to experiment
row-gap: 50px;
}
注意: row-gap 与 grid-template-rows 配合使用
对齐项目:
用于沿X 轴 [主轴]定位网格容器内的网格项 (子项) 。这4 个值分别是 👇
如果你想测试这一点,那么在 HTML 中添加 1 个框 ->
<div class="container">
<!--Other boxes - A, B, C are here-->
<div class="box-4"> D </div>
</div>
在 css 中 ->
.container {
display: grid;
gap: 50px;
height: 100vh;
// each box is 200px by 200px
grid-template-rows: 200px 200px;
grid-template-columns: 200px 200px;
// Change values 👇 to experiment
justify-items : end;
}
对齐项目:
用于沿Y 轴(交叉轴)定位网格容器内的网格项(子项) 。这4 个值分别是:👇
不要改变 HTML 上的任何内容,在 css 中编写 ->
.container {
display: grid;
gap: 50px;
height: 100vh;
// each box is 200px by 200px
grid-template-rows: 200px 200px;
grid-template-columns: 200px 200px;
// Change values 👇 to experiment
align-items: center;
}
对齐内容:
这用于将我们的网格(基本上所有内容)沿X 轴(主轴)定位在网格容器内。这7 个值分别是👇
不要改变 HTML 上的任何内容,在 css 中编写 ->
.container {
display: grid;
gap: 50px;
height: 100vh;
// each box is 200px by 200px
grid-template-rows: 200px 200px;
grid-template-columns: 200px 200px;
// Change values 👇 to experiment
justify-content: center;
}
对齐内容:
这用于将我们的网格(基本上所有内容)沿Y 轴(交叉轴)定位到网格容器内。这7 个值分别是👇
不要改变 HTML 上的任何内容,在 css 中编写 ->
.container {
display: grid;
gap: 50px;
height: 100vh;
// each box is 200px by 200px
grid-template-rows: 200px 200px;
grid-template-columns: 200px 200px;
// Change values 👇 to experiment
align-content : center;
}
休息一下
到目前为止一切都好!休息一下吧,你值得拥有!
网格子项属性
现在,让我们看看网格子项的属性
网格尺度
我制作了这个网格比例尺来演示如何计算行和列的连接方式。我们可以使用以下两种测量方式中的任意一种:
- 数字[1,2,3,4,等等...]
- span 关键字
当我们在短时间内编写代码时,您将对本指南☝️有一个清晰的了解
下图👇显示了单个单元格的行和列的起点和终点。
HTML
为了试验网格比例并了解以下属性,请在 body 标签内制作 4 个框 -
<div class="container">
<div class="box-1"> A </div>
<div class="box-2"> B </div>
<div class="box-3"> C </div>
<div class="box-4"> D </div>
</div>
我们将使用 repeat() 函数。它的作用是将我们的代码重复执行到一定时间。这里有一个例子 👇
grid-template-columns : repeat(5,1fr);
这☝️相当于写这个👇
grid-template-columns : 1fr 1fr 1fr 1fr 1fr ;
快速说明:
当我们使用 fr [ 分数 ] 单位时,我们将屏幕区域划分为相等的比例。
grid-template-columns: repeat(5, 1fr);
这段☝️代码将屏幕宽度分成 5 个相等的部分。
一切就绪,开始吧!
网格列:开始/结束
这两个属性用于将多个列连接在一起。它是以下两个属性的简写:
- 网格列起始
- 网格列结束
在 CSS 上写下这些
.container {
display: grid;
gap: 20px;
height: 100vh;
grid-template-columns: repeat(12, 1fr);
grid-template-rows: repeat(12, 1fr);
}
结果 -
在这里,我们将屏幕(宽度和高度)分成 12 个相等的部分。1 个框占据 1 个部分,或者您可以称之为 1fr [ 1 个分数 ]。沿宽度方向的其余 8 个分数为空。
当我们处理子属性时,我们需要像这样定位我们的 .box-* 类 -
.box-1{}
.box-2{}
.box-3{}
.box-4{}
你可以尝试其中任何一个或全部的盒子,我会坚持使用 .box-1
让我们把网格规模化。我们正在处理列,只关注列,而不是行。
每个 .box-* 类的默认比例是
grid-column-start : 1;
grid-column-end : 2;
/* The shorthand -> */
grid-column : 1 / 2
我们也可以在 span 单元中写入这个☝️,像这样👇
grid-column : span 1;
让我们将空的 8 个分数分配给 .box-1,像这样👇
.box-1{
grid-column : 1/10
}
结果👇
简要说明:
我是怎么计算的?盒子 1 本身就占了一个盒子。除此之外,我们还要添加 8 个盒子。最后,必须加 1 来表示结束,所以 8+1+1 = 10
使用 Span 关键字
如果您对第一个感到困惑,您可以使用这个,因为它很容易理解。
我们需要在 .box-1 中增加 8 个盒子,而 .box-1 已经占用了 1 个盒子。因此,我们需要计算 8+1 = 9
.box-1{
grid-column : span 9;
}
这将输出相同的结果
网格行:开始/结束
这两个属性用于将多行连接在一起。它们是以下两个属性的简写:
- 网格行起始
- 网格行尾
让我们来尝试一下!这里我还是使用 .box-1
来作为我们的网格参考线。现在,只关注行比例,而不是列比例。
让我们将 9 个盒子沿着行连接到 .box-1
写下这些👇
.box-1{
grid-row : 1/11;
}
计算 -> .box-1 容纳 1 个盒子,再添加 9 个盒子,最后添加强制性的 1 以表示结束 9+1+1=11
替代方案👇使用 span 关键字
.box-1{
grid-row : span 10;
}
计算 -> .box-1 容纳 1 个盒子,再添加 9 个盒子
9+1=10
目前的结果
网格区域:
首先,我们需要设置grid-template-areas ☝️ 完成后,我们必须在子类中指定父类中使用的名称,如下所示👇
在父容器内指定 grid-template-areas
就像这样👇在父类中
.container {
display: grid;
gap: 20px;
height: 100vh;
grid-template-areas:
"A A A A A A A A A A A A"
"B B B B B B B B B B C C"
"B B B B B B B B B B C C";
}
使用 grid-areas 指定子类中父容器中使用的名称👇
就像儿童班里这样👇
.box-1{
grid-area: A;
}
.box-2{
grid-area: B;
}
.box-3{
grid-area: C;
}
自我证明:
用于将1 个单独的网格项(子项)沿X 轴 [主轴]定位到网格容器内。这4 个值分别是 👇
写下这些来尝试一下这些值👇
.container {
display: grid;
gap :25px;
height: 100vh;
/* // each box has equal size */
grid-template-rows: 1fr 1fr;
grid-template-columns: 1fr 1fr;
}
记住!这只对子类有效。所以,你可以定位任意 .box-* 类。我这里定位的是第一个盒子。
.box-1 {
/* Change values 👇 to experiment */
justify-self : start;
}
对齐自身:
用于在网格容器内沿Y 轴(交叉轴)定位1 个单独的网格项(子项)。这4 个值分别是👇
让我们尝试一下这些值👇
.container {
display: grid;
gap :25px;
height: 100vh;
/* // each box has equal size */
grid-template-rows: 1fr 1fr;
grid-template-columns: 1fr 1fr;
}
记住!这只对子类有效。所以,你可以定位任意 .box-* 类。我这里定位的是第一个盒子。
.box-1 {
/* Change values 👇 to experiment */
align-self : start;
}
短手
让我们看看这些网格简写属性 -
- 地点内容
- 地点物品
- 地方自我
- 网格模板
- 间隙/网格间隙
地点内容:
这是两个属性的简写 -
- 对齐内容
- 内容对齐
一个例子
align-content : center;
justify-content : end;
/* The shorthand */
place-content : center / end ;
地点项目:
这是两个属性的简写 -
- 对齐项目
- 对齐项目
一个例子
align-items : end;
justify-items : center;
/* The shorthand */
place-items : end / center ;
地点自我:
这是两个属性的简写 -
- 对齐自身
- 自我辩护
一个例子
align-self : start ;
justify-self : end ;
/* The shorthand */
place-self : start / end ;
网格模板:
这是两个属性的简写 -
- 网格模板行
- 网格模板列
一个例子
grid-template-rows : 100px 100px;
grid-template-columns : 200px 200px;
/* The shorthand */
grid-template : 100px 100px / 200px 200px;
间隙/网格间隙:
gap 和 grid-gap 是同一个东西,作用也一样。你可以使用其中任何一个。
这是两个属性的简写 -
- 行距
- 柱间隙
一个例子
row-gap : 20px ;
column-gap : 30px ;
/* The shorthand */
gap : 20px 30px;
致谢
阅读下文:

掌握 CSS Flexbox 2021 🔥- 构建 5 种响应式布局🎖️|| CSS 2021
Joy Shaheb ・ 2021年2月4日
结论
这是您阅读到最后的奖牌❤️
非常感谢您的建议和批评❤️
-
YouTube /乔伊·沙希布
-
LinkedIn /Joy Shaheb
-
Twitter /JoyShaheb
-
Instagram /JoyShaheb