Grid
flex 布局可看作是一维布局, grid 布局则可以看作是二维布局,它将容器划分成 行 和 列,产生单元格并能单独设置。也称为网格布局。
grid 布局比 flex 布局更加强大,但同样也更加复杂。
基本概念
- 容器 (
container), 采用网格布局的区域 - 项目 (
item) , 容器内部采用网格定位的直接子元素 - 行 (
row) , 默认水平区域 - 列 (
column) , 默认垂直区域 - 单元格 (
cell) ,行列交叉区域即单元格 - 网格线 (
grid line) , 划分网格的线
属性
定义在容器上的属性为 容器属性,定义在项目上的为 项目属性
容器属性
displaygrid,开启网格布局,容器元素为块级元素,容器占满宽度inline-grid,开启网格布局,容器元素为行内元素
注意,设为网格布局以后,容器子元素(项目)的 float、display: inline-block、display: table-cell、vertical-align和column-* 等设置都将失效。
grid-template-columns定义列宽grid-template-rows定义行高repeat(num, ...args)可以重复设置args值num次,例如grid-template-columns: repeat(12, 1fr)auto-fill表示自动填充,在单元格大小固定,但容器大小不确定时希望行列容纳尽可能多的的单元格可以使用,例如grid-template-columns: repeat(auto-fill, 100px)fr即片段fraction, 表示比例关系minmax(min, max)产生一个长度范围,表示长度在这最大最小值之间auto浏览器自己决定长度- 网格线名称, 可以使用 方括号 ,指定每一根网格线的名字,方便以后引用,也支持多个名称,列如
grid-template-columns: [c1 col-other] 100px [c2] 100px [c3] auto [c4]
row-gap行间距column-gap列间距gap行间距和列间距的简写grid-template-areas定义区域,例如cssgrid-template-areas: 'a b c' 'd e f' 'g h i';其中相同区域可同名,不需要命名区域可使用
.表示
注意,区域的命名会影响到网格线。每个区域的起始网格线,会自动命名为 区域名-start ,终止网格线自动命名为 区域名-end 。 比如,区域名为 header ,则起始位置的水平网格线和垂直网格线叫做 header-start ,终止位置的水平网格线和垂直网格线叫做 header-end 。
grid-auto-flow设置网格布局放置顺序row先行后列column先列后行row dense先行后列,并且在某些项目指定位置后,剩下的项目怎么自动放置column dense先列后行,并且在某些项目指定位置后,剩下的项目怎么自动放置
justify-items, 设置单元格内容的水平位置align-items, 垂直位置, 值同上place-items,justify-items和place-items简写
可选值 start | end | center | stretch
justify-content,设置整个内容区域在容器里的水平位置align-content, 垂直位置place-content, 简写
可选值 start | end | center | stretch | space-around | space-between | space-evenly
grid-auto-columns设置浏览器自动创建的多余的网格的列宽grid-auto-rows设置浏览器自动创建的多余的网格的行高grid-template, 为grid-template-columns、grid-template-rows和grid-template-areas这三个属性的合并简写形式grid, 为grid-template-rows、grid-template-columns、grid-template-areas、grid-auto-rows、grid-auto-columns、grid-auto-flow这六个属性的合并简写形式
项目属性
grid-column-start指定项目左边框所在的网格线grid-column-end指定项目右边框所在的网格线grid-row-start指定项目上边框所在的网格线grid-row-end指定项目下边框所在的网格线span可以表示跨域多条网格线
grid-column,grid-column-start和grid-column-end的合并简写形式grid-row,grid-row-start属性和grid-row-end的合并简写形式grid-area指定项目放在哪一个区域,grid-area 属性还可用作grid-row-start、grid-column-start、grid-row-end、grid-column-end的合并简写形式,直接指定项目的位置justify-self设置单元格内容水平位置align-self设置单元格内容垂直位置place-self简写
可选值 start | end | center | stretch