写在前面
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;
}