CSS 网格布局

网格是一组相交的水平线和垂直线,它定义了网格的列和行。

CSS �供了一个基于网格的布局系统,带有行和列,�以让我们更轻�地设计网页,而无需使用浮动和定�。

以下是一个简�的网页布局,使用了网格布局,包�六列和三行:

�试一下 »


�览器支�

目�最新的一些�览器版本都支�网格布局。

57.0 16.0 52.0 10 44

网格元素

网格布局由一个父元素�一个或多个�元素组�。

实例

<div class="grid-container"> <div class="grid-item">1</div> <div class="grid-item">2</div> <div class="grid-item">3</div> <div class="grid-item">4</div> <div class="grid-item">5</div> <div class="grid-item">6</div> <div class="grid-item">7</div> <div class="grid-item">8</div> <div class="grid-item">9</div> </div>

�试一下 »

display 属性

当一个 HTML 元素将 display 属性设置为 grid 或 inline-grid �,它就��了一个网格容器,这个元素的所有直系�元素将�为网格元素。

实例

.grid-container { display: grid; }

�试一下 »

实例

.grid-container { display: inline-grid; }

�试一下 »

网格轨�

我们通过 grid-template-columns 和 grid-template-rows 属性�定义网格中的行和列。

这些属性定义了网格的轨�,一个网格轨�就是网格中任�两�线之间的空间。

在下图中你�以看到一个绿色框的轨�——网格的第一个行轨�。第二行有三个白色框轨�。

以下实例我们使用 grid-template-columns 属性在网格容器中创建四个列:

实例

.grid-container { display: grid; grid-template-columns: auto auto auto auto; }

�试一下 »

以下实例我们使用 grid-template-rows 属性在网格容器中设置行的高度:

实例

.grid-container { display: grid; grid-template-rows: 100px 300px; }

�试一下 »

fr ��

轨��以使用任何长度��进行定义。

网格引入了 fr ���帮助我们创建�活的网格轨�。一个 fr ��代表网格容器中�用空间的一等份。

以下实例定义了一个网格定义将创建三个相等宽度的轨�,这些轨�会���用空间增长和收缩。

实例

.grid-container { display: grid; grid-template-columns: 1fr 1fr 1fr; }

�试一下 »

网格�元

一个网格�元是在一个网格元素中最�的��, 从概念上�讲其实它和表格的一个�元格很�。现在�看回我们��的一个例�, 一旦一个网格元素被定义在一个父级元素当中,那么他的�级元素将会排列在�个事先定义好的网格�元中。在下�的图中,我会将第一个网格�元作高亮处�。

网格区域

网格元素�以�行或�列的方�扩展一个或多个�元,并且会创建一个网格区域。网格区域的形状应该是一个矩形 - 也就是说你��能创建出一个类似于"L"形的网格区域。下图高亮的网格区域扩展了2列以�2行。


网格列

网格元素的垂直线方�称为列(Column)。


网格行

网格元素的水平线方�称为行(Row)。


网格间�

网格间�(Column Gap)指的是两个网格�元之间的网格横�间�或网格纵�间�。

您�以使用以下属性�调整间隙大�:

  • grid-column-gap
  • grid-row-gap
  • grid-gap

以下实例使用 grid-column-gap 属性�设置列之间的网格间�:

实例

.grid-container { display: grid; grid-column-gap: 50px; }

�试一下 »

以下实例使用 grid-row-gap 属性�设置行之间的网格间�:

实例

.grid-container { display: grid; grid-row-gap: 50px; }

�试一下 »

grid-gap 属性是 grid-row-gap 和 the grid-column-gap 属性的简写:

实例

.grid-container { display: grid; grid-gap: 50px 100px; }

�试一下 »

grid-gap 属性�以�时设置行间�和列间�:

实例

.grid-container { display: grid; grid-gap: 50px; }

�试一下 »

网格线

列与列,行与行之间的交接处就是网格线。

Grid 会为我们创建编�的网格线�让我们�定��一个网格元素。

例如下�这个三列两行的网格中,就拥有四�纵�的网格线(�色圆圈标记),以�三�横�的网格线(黑色圆圈标记)。

网格元素设置时�以�考这些行�。

下图则定义了四�纵�的网格线,以�四�横�的网格线:

网格线的编�顺��决于文章的书写模�。在从左至�书写的语言中,编�为 1 的网格线�于最左边。在从�至左书写的语言中,编�为 1 的网格线�于最�边。

接下�我使用了 grid-column-start, grid-column-end, grid-row-start 和 grid-row-end 属性�演示如何使用网格线。

以下实例我们设置一个网格元素的网格线从第一列开始,第三列结�:

实例

.item1 { grid-column-start: 1; grid-column-end: 3; }

�试一下 »

以下实例我们设置一个网格元素的网格线从第一行开始,第三行结�:

实例

.item1 { grid-row-start: 1; grid-row-end: 3; }

�试一下 »

CSS 网格属性

属性 �述
column-gap 指定列之间的间隙
gap row-gap 和 column-gap 的简写属性
grid grid-template-rows, grid-template-columns, grid-template-areas, grid-auto-rows, grid-auto-columns, 以� grid-auto-flow 的简写属性
grid-area 指定网格元素的�称,或者也�以是 grid-row-start, grid-column-start, grid-row-end, 和 grid-column-end 的简写属性
grid-auto-columns 指的默认的列尺寸
grid-auto-flow 指定自动布局算法怎样�作,精确指定在网格中被自动布局的元素怎样排列。
grid-auto-rows 指的默认的行尺寸
grid-column grid-column-start 和 grid-column-end 的简写属性
grid-column-end 指定网格元素列的结��置
grid-column-gap 指定网格元素的间�大�
grid-column-start 指定网格元素列的开始�置
grid-gap grid-row-gap 和 grid-column-gap 的简写属性
grid-row grid-row-start 和 grid-row-end 的简写属性
grid-row-end 指定网格元素行的结��置
grid-row-gap 指定网格元素的行间�
grid-row-start 指定网格元素行的开始�置
grid-template grid-template-rows, grid-template-columns 和 grid-areas 的简写属性
grid-template-areas 指定如何显示行和列,使用命�的网格元素
grid-template-columns 指定列的大�,以�网格布局中设置列的数�
grid-template-rows 指定网格布局中行的大�
row-gap 指定两个行之间的间�

接下�我们�以通过 CSS 网格布局�游��检验我们的学习�果。