Grid布局
1.1 基本概念
容器和项目
现在我们来拓展一下
再来看看网格线
1.2 容器(container)属性
顾名思义,就是写在容器上的属性,有下列这些
grid-template-columns%grid-template-rows
最重要的两个属性,用于指定你想要一个容器里面有多少行多少列,并填写对应的属性值的个数
例如:grid-template-columns: 100px 100px 100px;
grid-template-rows: 100px 100px 100px 100px;
上面两段代码等价于
grid-template-columns: repeat(3,100px);
grid-template-rows:repeat(4,100px);
那么效果就会如下图
- repeat()还可以这样用:
repeat(auto-fill,xxx px)
:这个就代表自动填充,每个盒子的高度(宽度)是xxx px,直到填满这个盒子的行(列)为止 - fr (fraction),为了方便表示比例关系,我们直接举例:
grid-template-columns: repeat(4,1fr);
这个写法等价于grid-template-columns: 1fr 1fr 1fr 1fr;
- 上面的例子表示item的宽度平均分为4等分
- minmax(最小值,最大值): 这个也是写在
grid-template-xx
的属性里面的,当我们的页面是自适应的时候,我们就可以让某个item的宽度或高度的范围限定起来 . 例如:grid-template-columns: 1fr minmax(150px,1fr) 1fr 1fr;
- 那么中间这个盒子是可以自适应的,最小150px
- auto, 浏览器自己来决定item的宽度或高度
- 网格线: 可以用方括号定义网格线名称,方便后续的引用, 网格线是帮助定位用的
- 例如:
grid-template-columns: [C1] 1fr [C2] 1fr [C3] 1fr [C4] 1fr [C5] ;
- 例如:
grid-row-gap&grid-column-gap & grid-gap
一句话解释就是,item之间的距离
- 重点! 就是这三个属性的grid前缀都被删除了,这是最新标准
grid-template-areas
gird-auto flow
相关: 这个属性后面可以跟dense属性,这样排列的方式就会发生变化,会合理利用排不下的空间
justify-items(水平方向)和align-items(垂直方向)和place-items
他是对item里面的内容进行调整, 例如将item里面的文字居中啥的
而space-items
就是对前面两者的合并,没什么好说的
justify-content(水平方向)和align-content(垂直方向)和place-content
content就是容器里面的内容,他包括了所有的item
这个属性就是对内容整体进行调整,往往以行或列为单位
place-content就不解释了,有手就行
grid-auto-columns &grid-auto-rows
用来设置多出来的宽和高
- rows定义的是项目的高度,columns定义的是项目的宽度
1.3 项目(item)属性
我们看看有哪些定义在项目里面的css属性
grid-column-start&grid-column-end&grid-row-start&grid-row-end&grid-column & grid-row
注意: 如果我们原本设定的item的宽度和我们在这里定义的宽度不一样的话,那么剩下的属性就会强制采用这个属性的宽度,同时其他item的布局会受到影响(被撑开换行)
同时我们要注意规划好,不要让我们设定的item重叠了,不然会盒子就会被挤出去
- 上面的
grid-column-start: 1; grid-column-end: 3;
可以简写为grid-column: 1/ 3;
- 上面的还可以写成
grid-column-start: span 2;
但是不推荐,不够精确
grid-area
下面这个很好用,强烈推荐!!!
justify-self & align-self & place-self
用法和前面的justify-items和align-items
完全一致
两者的区别是
- 这个是定义在item里面的,另一个是定义在container里面的
xxx-items
是为了给所有的item做一个整体的样式规定,而xxx-self
就是用于自己身上的,比较单一,它可以覆盖xxx-item
的样式