CSS中的Grid网络布局

网格布局(Grid)是最强大的 CSS 布局方案,将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局。以前,只能通过复杂的 CSS 框架达到的效果,现在浏览器内置了。
基本概念
学习 Grid 布局之前,需要了解一些基本概念。
容器和项目
采用网格布局的区域,称为”容器”(container)。容器内部采用网格定位的子元素,称为”项目”(item)。
例如:
1 | <div> |
上面代码中,最外层的<div>
元素就是容器,内层的三个<div>
元素就是项目。
注意:项目只能是容器的顶层子元素,不包含项目的子元素,比如上面代码的
<p>
元素就不是项目。Grid 布局只对项目生效。
网格线
划分网格的线,称为”网格线”(grid line)。水平网格线划分出行,垂直网格线划分出列。
正常情况下,n
行有n + 1
根水平网格线,m
列有m + 1
根垂直网格线,比如三行就有四根水平网格线。
属性
如果要应用Grid布局,只需要添加display: grid;
即可。
注意,设为网格布局以后,容器子元素(项目)的
float
、display: inline-block
、display: table-cell
、vertical-align
和column-*
等设置都将失效。
定义行和列
容器指定了网格布局以后,接着就要划分行和列。grid-template-columns
属性定义每一列的列宽,grid-template-rows
属性定义每一行的行高。
1 | .container { |
repeat()
采用复写的方法
1 | .container { |
auto-fill
有时,单元格的大小是固定的,但是容器的大小不确定。如果希望每一行(或每一列)容纳尽可能多的单元格,这时可以使用auto-fill
关键字表示自动填充。
1 | .container { |
fr关键字
为了方便表示比例关系,网格布局提供了fr
关键字(fraction 的缩写,意为”片段”)。如果两列的宽度分别为1fr
和2fr
,就表示后者是前者的两倍。
fr
可以与绝对长度的单位结合使用,这时会非常方便。
1 | .container { |
minmax()
minmax()
函数产生一个长度范围,表示长度就在这个范围之中。布局中很关键的因素。
1 | .container { |
表示列宽不小于100px
,不大于1fr == 200px
。
定义间距
grid-row-gap
属性设置行与行的间隔(行间距),grid-column-gap
属性设置列与列的间隔(列间距)。
除此之外还有合并写法,grid-gap: <grid-row-gap> <grid-column-gap>;
最新标准,上面三个属性名的
grid-
前缀已经删除,grid-column-gap
和grid-row-gap
写成column-gap
和row-gap
,grid-gap
写成gap
。
设置单元格内容的对齐方式
justify-items
属性设置单元格内容的水平位置(左中右),align-items
属性设置单元格内容的垂直位置(上中下)。
1 | .container { |
设置内容在容器里面的位置
justify-content
属性是整个内容区域在容器里面的水平位置(左中右),align-content
属性是整个内容区域的垂直位置(上中下)。
1 | .container { |