说起布局
grid
我相信重要程度比起flex
不遑多让啊。除了兼容性方面,其余的方面都是很完美的。但是我相信随着技术的不断更替,兼容性已经不再是问题。那今天进让我们来看看grid
到底能够干啥吧
本文意图不是想将API介绍清楚,如果想了解详细API,请移步阮一峰老师Grid布局。 本文从实际的布局业务出发。告诉各位读者什么样的情况下,适合哪种API
.container {
display: grid;
grid-template-rows: 100px 100px 100px;
grid-template-columns: 100px 100px 100px;
}
display: grid
。将布局设置为网格布局grid-template-rows
, grid-template-columns
设置网格的宽高grid-template-rows
主要是设置单个网格高度距离grid-template-columns
设置单个网格宽度距离grid-template-rows
每个值都一样怎么办呢??? .container {
display: grid;
width: 300px;
height: 300px;
color: #fff;
/* 如果觉得重复写太麻烦 可以使用repeat */
grid-template-rows: repeat(3, 33.33%);
grid-template-columns: repeat(3, 33.33%);
}
repeat
。 函数传递的第一个参数是次数,就是重复展示的次数。第二个参数是设置的值 .container {
display: grid;
font-size: 4em;
color: #ffffff;
/* 函数repeat 第一个参数是循环的个数 设置auto-fill 表示自动填充 尽可能多放 */
grid-template-columns: repeat(auto-fill, 210px);
}
repeat
的第一个参数中设置属性auto-fill
. 表示自动填充。尽可能的多放 .container {
display: grid;
color: #ffffff;
width: 300px;
font-size: 4em;
/* 为了方便表示比例关系,网格布局提供了fr关键字 如果两列的宽度分别为1fr和2fr,就表示后者是前者的两倍*/
grid-template-columns: 1fr 2fr;
grid-template-rows: repeat(auto-fill, 100px);
}
fr关键字
(fraction 的缩写,意为"片段")。如果两列的宽度分别为1fr和2fr,就表示后者是前者的两倍fr
跟像素px一起使用怎么办呢??? .container {
display: grid;
font-size: 4em;
grid-template-columns: 150px 1fr 2fr;
}
grid-template-columns: 150px 1fr 2fr;
. 我们就可以发现其实像素跟fr
是可以一起使用的,这样布局起来更加方便了 .container {
display: grid;
width: 400px;
/* minmax()函数产生一个长度范围,表示长度就在这个范围之中。它接受两个参数,分别为最小值和最大值。 */
grid-template-columns: 1fr 1fr minmax(100px, 1fr);
}
grid布局
中提供了函数minmax
。 该函数有两个值,一个最小范围的值,另一个最大范围的值。上述的实例中表示宽度是最小是100px,最大是1fr .container {
display: grid;
color: #ffffff;
width: 500px;
grid-template-columns: 100px auto 100px;
}
auto
两边定宽,中间自适应
的布局 .container {
display: grid;
color: #ffffff;
grid-template-columns: repeat(3, 100px);
grid-template-rows: repeat(3, 100px);
gap: 10px 10px;
}
gap
。 此属性是row-gap
以及column-gap
的合集 .container {
display: grid;
color: #ffffff;
width: 300px;
grid-template-areas:
'a b c'
'd e f'
'g h i';
}
grid-template-areas
来显示区域 .container {
display: grid;
color: #ffffff;
grid-template-columns: repeat(3, 100px);
grid-template-rows: repeat(3, 100px);
/* 默认是row排序 可以设置column/ row dense */
grid-auto-flow: column;
}
grid-auto-flow
来修改展示的顺序。默认是row
column
,row dense
, column dense
.container {
display: grid;
color: #ffffff;
grid-template-rows: repeat(3, 100px);
grid-template-columns: repeat(3, 100px);
/* 设为row,表示"先行后列" */
grid-auto-flow: row;
}
row
.就会出现上面的情况。请看下个例子 .container {
display: grid;
color: #ffffff;
grid-template-rows: repeat(3, 100px);
grid-template-columns: repeat(3, 100px);
/* 设为row dense,表示"先行后列",并且尽可能紧密填满,尽量不出现空格。 */
grid-auto-flow: row dense;
}
grid-auto-flow: row dense;
可以保证先行后列,而且尽可能的不出现空格 .container {
display: grid;
color: #ffffff;
font-size: 4em;
grid-template-columns: 100px 100px 100px;
grid-template-rows: 100px 100px 100px;
/* 设置网格的对其方式 */
/* justify-items: center;
align-items: center; */
place-items: center center;
}
place-items
可以设置单元格内对其方式。分别有start
,end
,center
place-items
是justify-items
以及align-items
的缩写 .container {
display: grid;
color: #ffffff;
height: 500px;
grid-template-columns: repeat(3, 100px);
grid-template-rows: repeat(3, 100px);
place-content: center center;
}
place-content
,可以设置相对于整个容器的对其方式place-content
是justify-content
以及aligns-content
的缩写start | end | center | stretch | space-around | space-between | space-evenly;
.container {
display: grid;
color: #ffffff;
grid-template-columns: repeat(3, 100px);
grid-template-rows: repeat(3, 100px);
grid-auto-rows: 50px;
}
div:nth-child(8) {
grid-row-start: 4;
grid-column-start: 2;
}
div:nth-child(9) {
grid-row-start: 5;
grid-column-start: 3;
}
grid-auto-columns属性
和grid-auto-rows属性
用来设置,浏览器自动创建的多余网格的列宽和行高 .container {
display: grid;
color: #ffffff;
grid-template-rows: repeat(3, 100px);
grid-template-columns: repeat(3, 100px);
}
.container div:nth-child(1) {
background: green;
grid-column-start: 1;
grid-column-end: 3;
grid-row-start: 2;
grid-row-end: 4;
}
grid-XXX-start
表示网格线的开始位置grid-XXX-end
表示网格线的结束位置 .container {
display: grid;
color: #ffffff;
grid-template-rows: repeat(3, 100px);
grid-template-columns: repeat(3, 100px);
grid-template-areas: 'a b c' 'd e f' 'j g h';
}
.container div:nth-child(1) {
grid-area: e;
background: green;
}
grid-template-areas: 'a b c' 'd e f' 'j g h';
grid-area: e;
属性
place-self
可以设置。跟前文介绍的place-items
效果保持一致。前者写在单个单元格,后者写在容器上
关注我的GitHub博客,会不断更新基础知识/ 源码分析/ 工程化等