写在前面
grid布局一般用于二维布局,一维布局一般用flex,grid尤其适合不规则布局,但尚未普及。
以下图片来源于 css-tricks
附上一个很好地练习和理解grid布局各种语句的小游戏:
1. 让一个元素变成grid容器
.container {display: grid | inline-grid;}
2. Grid Container
2.1 grid-template-columns (列)
grid-template-rows (行)
.container {grid-template-columns: <track-size> ... | <line-name> <track-size> ...;grid-template-rows: <track-size> ... | <line-name> <track-size> ...;}
只有轨道尺寸

长度为 px
.container {grid-template-columns: 40px 50px auto 50px 40px;grid-template-rows: 25% 100px auto;}
单位为份数 fr
份数就是指在当前可用空间进行按份分配
.container {grid-template-columns: 1fr 1fr 1fr;}//每个item为容器的1/3宽度
.container {grid-template-columns: 1fr 50px 1fr 1fr;}//除去50px后的空间平均分成3份,一样一份
给线条命名
.container {grid-template-columns: [first] 40px [line2] 50px [line3] auto [col4-start] 50px [five] 40px [end];grid-template-rows: [row1-start] 25% [row1-end] 100px [third-line] auto [last-line];}

一条线可以有一个或多个名字
.container {grid-template-rows: [row1-start] 25% [row1-end row2-start] 25% [row2-end];}
线条命名用来干嘛
- 可以给item设置具体范围
.item-a{grid-column-start: 2;grid-column-end: five;grid-row-start: row1-start;grid-row-end: 3;}
- 如果多个行共享相同的名称,则可以通过其行名称和计数来引用它们
.item {grid-column-start: col-start 2;//名为col-start的第2条线}
repeat用法
如果定义包含重复部分,则可以使用repeat()表示法简化操作
.container {grid-template-columns: repeat(3, 20px [col-start]);}
等价于:
.container {grid-template-columns: 20px [col-start] 20px [col-start] 20px [col-start];}
2.2 grid-template-areas
通过引用使用grid-area属性指定的网格区域的名称来定义网格模板。
重复网格区域的名称会使内容跨越那些单元格。
句点表示一个空单元格。
语法本身提供了网格结构的可视化。
| 名称 | 意义 |
|---|---|
| grid-area指定的网格区域的名称 | |
| . | 句号表示空单元格 |
| none | 没有定义网格区域 |
.container {grid-template-areas:"<grid-area-name> | . | none | ...""...";}
举例说明
.container {display: grid;grid-template-columns: 50px 50px 50px 50px;grid-template-rows: auto;grid-template-areas:"header header header header""main main . sidebar""footer footer footer footer";}.item-a {grid-area: header;}.item-b {grid-area: main;}.item-c {grid-area: sidebar;}.item-d {grid-area: footer;}

2.3 grid-template
grid-template-rows,grid-template-columns和grid-template-area的简写
.container {grid-template:[row1-start] "header header header" 25px [row1-end][row2-start] "footer footer footer" 25px [row2-end]/ auto 50px auto;}
等价于
.container {grid-template-rows: [row1-start] 25px [row1-end row2-start] 25px [row2-end];grid-template-columns: auto 50px auto;grid-template-areas:"header header header""footer footer footer";}
2.4 grid-template-columns
grid-template-rows
.container {grid-template-columns: 100px 50px 100px;grid-template-rows: 80px auto 80px;grid-column-gap: 10px;grid-row-gap: 15px;}

2.5 grid-gap
grid-row-gap 和grid-column-gap的简写
.container {grid-gap: <grid-row-gap> <grid-column-gap>;}
2.6 justify-items
每个网格内items的横向布局
.container {justify-items: start | end | center | stretch;}
2.7 align-items
每个网格内items的垂直方向布局
.container {align-items: start | end | center | stretch;}
2.8 place-items
justify-items 和 align-items的简写:
.container{place-items: align-items justify-items ;}
2.9 justify-content
.container {justify-content: start | end | center | stretch | space-around | space-between | space-evenly;}
2.10 align-content
.container {align-content: start | end | center | stretch | space-around | space-between | space-evenly;}
2.11 place-content
justify-content 和 align-content的简写
.container{place-items: align-content justify-content ;}
未列举完。。。。
3. Grid Items
3.1 grid-column-start
grid-column-end
grid-row-start
grid-row-end
.item {grid-column-start: <number> | <name> | span <number> | span <name> | auto;grid-column-end: <number> | <name> | span <number> | span <name> | auto;grid-row-start: <number> | <name> | span <number> | span <name> | auto;grid-row-end: <number> | <name> | span <number> | span <name> | auto;}
例如
.item-a {grid-column-start: 2;grid-column-end: five;grid-row-start: row1-start;grid-row-end: 3;}

例如
.item-b {grid-column-start: 1;grid-column-end: span col4-start;grid-row-start: 2;grid-row-end: span 2;}

3.2 grid-column
grid-row
3.1的简写形式:
.item {grid-column: <start-line> / <end-line> | <start-line> / span <value>;grid-row: <start-line> / <end-line> | <start-line> / span <value>;}
3.3 grid-area
3.1 和 3.2 的简写
.item {grid-area: <name> | <row-start> / <column-start> / <row-end> / <column-end>;}
3.4 justify-self
.item {justify-self: start | end | center | stretch;}
3.5 align-self
.item {align-self: start | end | center | stretch;}
3.6 place-self
justify-self 和 align-self 的简写
.item {align-self justify-self;}
