Grid
CSS Grid 是一个用于 web 的二维布局系统, 网格是由一系列水平及垂直的线构成的一种布局模式, 根据网格, 可以将内容按照行和列的格式进行排版.
CSS Grid 布局 和 Flexible 布局的主要区别在于 CSS Flexible 是为了一维布局服务的(沿横向或纵向), 而 CSS Grid 是为二维布局服务的(同时沿着横向和纵向)
辅助属性
- 网格轨道, 网格布局中使用 grid-template-rows 和 grid-template-columns 属性定义的网格上的行和列, 网格轨道是网格上任意两条相邻线之间的空间.
- fr 单位, 新的长度单位, 表示网格容器中占用的轨道
- minmax(min, max), 函数为一个行/列的尺寸设置了取值范围, 例如 minmax(100px, auto) 表示尺寸至少为 100px, 如果内容尺寸大于 100px 则会根据内容自动调整
- repeat(count, value), 表示轨道列表的重复片段, 允许以更紧凑的形式写入大量显示重复模式的列或行
属性列表
grid-template-rows
grid-template-columns
grid-template-areas
grid-auto-flow
grid-auto-rows
grid-auto-columns
grid-gap/gap
- grid-column-gap
- grid-row-gap
grid-area
- grid-row
- grid-column
容器属性
display
- grid 指定容器的行为类似块级元素并且采用网格布局
- inline-grid 指定容器的行为类似行内元素并且采用网格布局
grid-template-rows
基于网格行的维度定义网格线的名称和网格轨道的尺寸大小
1 | /*自动调整网格轨道大小, 等价于 max-content, min-content*/ |
- 网格线, 使用方框号指定每根网格线的名字, 默认从 1 开始
1 | /*定义 3 行并且指定每行的行高, |
grid-template-columns
基于网格列的维度定义网格线的名称和网格轨道的尺寸大小
1 | /*自动调整网格轨道大小, 等价于 max-content, min-content*/ |
- 网格线, 使用方框号指定每根网格线的名字, 默认从 1 开始
1 | /*定义 3 列并且指定每列的列宽, 第 2 列宽度自适应,指定每根网格线的名字 c1 开始*/ |
grid-template-areas
定义网格区域的别名, 网格区域和网格项没有关联, 但是可以和网格定位属性关联, 例如 grid-row-start
, grid-column-start
, grid-row-end
, grid-column-end
- 如果某些区域不需要, 则使用
.
表示 - 区域别名会影响到网格线, 每个区域的起始网格线自动命名为
区域名-start
, 终止网格线自动命名为区域名-end
1 | /* 定义九宫格每个区域别名 */ |
grid-auto-flow
精确指定在网格中被自动布局的元素如何排列, 默认值为 row
- row 指定自动布局算法按照通过逐行填充来排列元素, 在必要时增加新行
- column 指定自动布局算法按照通过逐列填充来排列元素, 在必要时增加新列
- dense 指定自动布局算法使用一种
稠密
堆积算法, 省略时使用稀疏
算法, 配合 row 或 column 使用稠密
算法, 如果后面出现稍小的元素, 则会试图去填充网格中前面留下的空白, 这样会填上稍大元素留下的空白, 但同时也可能导致原来出现的次序被打乱稀疏
算法, 布局算法只会向前移动, 永远不会填充空白, 这样保证了所有自动布局元素按照次序出现, 即使可能会留下被后面元素填充的空白
1 | grid-auto-flow: row; |
grid-auto-rows
指定隐式创建的网格横向轨道的高度, 例如某项超出了当前的网格布局区域, 浏览器会自动生成多余的网格以便放置项目
1 | grid-auto-rows: 20px; |
grid-auto-columns
指定隐式创建的网格纵向轨道的宽度, 作用参考 grid-auto-rows
1 | grid-auto-columns: 20px; |
grid-gap
grid-gap: <grid-row-gap> <grid-column-gap>;
网格行和列间隙的缩写
指定网格行和列之间的间隙, 此属性作为 gap
兼容低版本的别名
1 | grid-gap: 10px 20px; |
grid-column-gap
指定网格列之间的间隙大小
grid-row-gap
指定网格行之间的间隙大小, 此属性作为 row-gap
兼容低版本的别名
项目属性
grid-area
grid-area: <row-start> / <column-start> / <row-end> / <column-end>;
合并简写形式
指定项目放在哪个区域, 是一种对 grid-row-start
, grid-column-start
, grid-row-end
, grid-column-end
的简写, 通过基线、 跨度(span)或没有(自动)的网格线放置在指定一个网格项的大小和位置, 继而确定区域的边界
- 如果指定 4 个
<grid-line>
的值时, 第 1 个值为grid-row-start
, 第 2 个值为grid-column-start
, 第 3 个值为grid-row-end
, 第 4 个值为grid-column-end
- 当
grid-column-end
被忽略时, 如果grid-column-start
为自定义关键字数据类型,grid-column-end
则为该值, 否则为 auto; - 当
grid-row-end
被忽略时, 如果grid-row-start
为自定义关键字数据类型,grid-row-end
则为该值, 否则为 auto; - 当
grid-column-start
被忽略时, 如果grid-row-start
为自定义关键字数据类型, 则所有四项普通写法的属性值均为该值, 否则为 auto;
- 当
- span, 为网格单元定义一个跨度, 使得网格单元的网格区域中的一条边界远离另一条边界 n 条基线. 默认值为 1;
1 | grid-area: auto; |
grid-row
grid-row: <start-line> / <end-line>;
合并简写形式
1 | .item-1 { |
grid-row-start
指定上边框所在的水平网格线
grid-row-end
指定下边框所在的水平网格线
grid-column
grid-column: <start-line> / <end-line>;
合并简写形式
1 | .item-1 { |
grid-column-start
指定左边框所在的垂直网格线
grid-column-end
指定有边框所在的垂直网格线