浅谈Grid布局

CSS Grid布局一个基于网格的二维布局系统,Grid布局是web的第一个真正的布局系统。他的目的是将内容组织成行列的形式。他的出现彻底终结了web开发从蛮荒时代的table->float->position->flex的经历。而是直接带我们进入了网格的布局的时代。

引言

Grid布局在各个浏览器的最新版兼容性已经做的非常好了,但是如果你需要兼容低版本的浏览器,还需要慎重的使用。网上对网格布局的概述已经足够多了,所以本文直接从Grid布局的用法与属性来介绍了。

启用网格布局

首先我们使用display的属性来定义一个网格容器,他的grid值决定了容器展现是块级还是内联。一旦启用网格容器,它的所有子元素都进入grid文档流,称为网格子项。

display: grid | inline-grid | subgrid
  • grid 定义一个块级的网格容器。
  • inline-grid 定义一个内联网格容器。
  • subgrid 定义一个继承其父级网格容器的行和列的大小的网格容器,它是其父级网格容器的一个子项。

在设置了grid布局之后,column, float, clear和vertical-align 对网格容器没有效果。

grid-template-columns / grid-template-rows

grid-template-columns用来设置网格列的名称和宽度。grid-template-rows用来设置网格行的名称和高度。

grid-template-columns: <track-size> ... | <line-name> <track-size> ... ;
grid-template-rows:    <track-size> ... | <line-name> <track-size> ... ;

属性:

track-size: 非负的值,可以使用css长度单位或者百分比。当设置为auto时会根据空间自动分配。
line-name: 网格线的名字,可以是任意的名字。

使用fr单位可以将容器分成几等份,如果与px或者%混用的话则会平分剩下的空间,栗子

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

定义的宽度如果包含重复的部分则可以使用repeat()来重复。

.test{
  display: grid;
  grid-template-columns: repeat(3, 20px);
}

上面的代码会重复3个20px的列,repeat同样也可以用在grid-template-rows上。

grid-column-gap / grid-row-gap

用来控制单元格的间距, 间距仅设置在单元格之间不作用在容器的边缘。

.test{
  display:grid;
  grid-template-columns: 100px 50px 100px;
  grid-template-rows: 80px auto 80px; 
  grid-column-gap: 10px;
  grid-row-gap: 15px;
}

justify-items / align-items

justify-items垂直与网格线对齐,适用于网格容器里面所有网格项。
align-items垂直与网格线对齐,适用于网格容器里面所有网格项。

start:   左对齐。 / 顶部对齐
end:     右对齐。 / 底部对齐
center:  居中对齐。 / 居中对齐
stretch: 填满(默认) / 填满(默认)

justify-content / align-content

如果使用的是px这样的单位的话,总的网格区域可能小于网格容器,这个时候justify-content可以设置网格区域的对齐方式。

start:         左对齐。
end:           右对齐。
center:        居中对齐。
stretch:       填满网格容器。
space-around:  网格项两边间距相等,网格项之间间隔是单侧的2倍。
space-between: 两边对齐,网格项之间间隔相等。
space-evenly:  网格项间隔相等。

发表评论

电子邮件地址不会被公开。 必填项已用*标注