将网页划分成一个个网格,可以任意组合不同的网格
grid布局语法参考
grid布局是将网页划分成一个个网格,并将其任意组合的布局方法。类似于以前的table布局。
- 和flex布局的区别:flex是围绕轴线进行的一系列布局方法;而grid是将容器划分为行和列进行布局,其灵活性更高。
- 兼容性:有较大兼容性问题,参考caniuse-grid
容器属性
布局属性:
display: grid;块级元素display: inline-grid;行内块元素
设置属性:
grid-template-columns
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24/* 把容器分为宽度为100px的三列 */
grid-template-columns: 100px 100px 100px;
/* 把容器等分为三列 */
grid-template-columns: 33.33% 33.33% 33.33%;
grid-template-columns: repeat(3, 33.33%);
/* 把容器分为100px 20px 80px 100px 20px 80px的六列 */
grid-template-columns: repeat(2, 100px 20px 80px);
/* 用100px分列,直到将容器宽度撑满 */
grid-template-columns: repeat(auto-fill, 100px);
/* 容器第一列为150px,剩下的宽度以1:2均分(fr:fraction) */
grid-template-columns: 150px 1fr 2fr;
/* 容器第三列最小宽为100px,最大为一个片段长度 */
grid-template-columns: 1fr 1fr minmax(100px, 1fr);
/* 容器一三列为100px,中间自行撑开或撑满 */
grid-template-columns: 100px auto 100px;
/* 将网格线命名为c1、c2、c3、c4或lala,可对同一根网格线命名为多个名字 */
grid-template-columns: [c1] 100px [c2] 100px [c3] auto [c4 lala];grid-template-rows:;=> 语法和grid-template-columns相同,对容器分行;column-gap: 20px;=> 给每列之间设置20px的间距 (row-gap: ;用法相同);gap: <row-gap> <column-gap>;=> 将column-gap和row-gap合写。如果省略了第二个值,那么默认第二个值和第一个相同;使用gap的时候会把gap的厚度加入到grid的宽高中,超过100%会导致溢出问题,可使用
fr变通grid-template-areas
1
2
3
4
5
6
7
8
9/* 给区域命名 */
grid-template-areas: 'a b c'
'd e f'
'g h i';
/* 用. 代替不用的区域 */
grid-template-areas: 'a . c'
'd . f'
'g . i';注意,区域的命名会影响到网格线。每个区域的起始网格线,会自动命名为区域名-start,终止网格线自动命名为区域名-end。
grid-auto-flow: column;=> 将先行后列的排列顺序改为先列后行的顺序grid-auto-flow: row dense;=> 先行后列,并且尽可能紧密填满,尽量不出现空格。justify-items、align-items、place-items
1
2
3
4
5
6
7
8/* justify-items属性设置单元格内容的水平位置(左中右),align-items属性设置单元格内容的垂直位置(上中下) */
justify-items: start | end | center | stretch;
align-items: start | end | center | stretch;
/* place-items属性是align-items属性和justify-items属性的合并简写形式。省略第二个值,浏览器默认与第一个值相等。*/
place-items: <align-items> <justify-items>;justify-content、align-content、place-content
1
2
3
4
5
6/* justify-content属性是整个内容区域在容器里面的水平位置(左中右),align-content属性是整个内容区域的垂直位置(上中下)。*/
justify-content: start | end | center | stretch | space-around | space-between | space-evenly;
align-content: start | end | center | stretch | space-around | space-between | space-evenly;
/* place-content属性是align-content属性和justify-content属性的合并简写形式。省略第二个值,浏览器默认与第一个值相等。*/
place-content: <align-content> <justify-content>;grid-auto-rows
1
2/* grid-auto-columns属性和grid-auto-rows属性用来设置,浏览器自动创建的多余网格的列宽和行高。它们的写法与grid-template-columns和grid-template-rows完全相同。如果不指定这两个属性,浏览器完全根据单元格内容的大小,决定新增网格的列宽和行高。*/
grid-auto-rows: 50px;
项目属性
grid-column-start、grid-column-end、grid-row-start、grid-row-end、grid-column、grid-row
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17/* 值可以是数字、网格线名字、跨行跨列span(end不会覆盖start) */
/* 指定项目左边框所在的垂直网格线在第一条网格线上 */
grid-column-start: 1 | c1-start | span 2;
/* 指定项目右边框所在的垂直网格线在第三条网格线上 */
grid-column-end: 3 | c2-end | span 2;
/* 指定项目上边框所在的水平网格线在第一条网格线上 */
grid-row-start: 1 | r1-start | span 2;
/* 指定项目下边框所在的水平网格线在第三条网格线上 */
grid-row-end: 3 | r2-end | span 2;
/* grid-column属性是grid-column-start和grid-column-end的合写形式,grid-row属性是grid-row-start属性和grid-row-end的合写形式。*/
/* 上面的代码可以合写为下面的 */
grid-column: 1 / 3;
grid-row: 1 / span 2;grid-area: d=> 指定项目放在哪一个区域。justify-self、align-self、place-self
1
2
3
4
5
6
7
8/* justify-self属性设置项目内内容的水平位置(左中右),跟justify-items属性的用法完全一致。*/
justify-self: start | end | center | stretch;
/* align-self属性设置项目内内容的垂直位置(上中下),跟align-items属性的用法完全一致。*/
align-self: start | end | center | stretch;
/* place-self属性是align-self属性和justify-self属性的合写形式。省略第二个值,浏览器默认认为这两个值相等。 */
place-self: <align-self> <justify-self>;
用法参考:grid布局