Flexbox layout is most appropriate to the components of an application, and small-scale layouts, while the Grid layout is intended for larger scale layouts.
<div class="wrapper">
<div>One</div>
<div>Two
<p>I have some more content in.</p>
<p>This makes me taller than 100 pixels.</p>
</div>
<div>Three</div>
<div>Four</div>
<div>Five</div>
</div>
在css-tricks的A Complete Guide to Flexbox一文中,有这样一句话:
我一直以来觉得flex布局已经够用了,因此一直没有学习grid布局。 但是看到这句话,让我对grid产生了一些兴趣,到底grid是不是如作者所说:“grid适用于大型布局”,暂时先画一个问号“?”
当这篇博文结束时,相信对这个问号会有一个好的答案。
初识grid布局
最简grid布局示例
grid五大概念
固定和灵活的轨道尺寸
条目布局(item)
为已有内容增加额外的轨道(hold content)
对齐控制(alignment)
重叠内容控制(overlap)
Grid container、Grid Tracks(fr、repeat()、显隐式grid、minmax)、Grid lines、Grid cells、Grid areas、Gutters
Grid container
通过为.wrapper设置display:grid属性,从默认的block变为grid,构建出一个grid container。 打开devtool选中某个grid item时,grid会有明显的虚线;普通布局不会有。
grid布局:![image](https://user-images.githubusercontent.com/19262750/85500469-28e73c00-b616-11ea-8f40-e73bdf4656f5.png)
普通布局:![image](https://user-images.githubusercontent.com/19262750/85500586-61871580-b616-11ea-81c2-fa136e7585fd.png)
Grid Tracks
row track和column track
这是一个row track![image](https://user-images.githubusercontent.com/19262750/85522413-37dee600-b638-11ea-837b-3d1a3063c71f.png)
可以通过grid-template-columns定义列track的宽度
fr、repeat()、显隐式grid、minmax
fr
track可以通过任何长度单位定义。 grid同样引入了一种特殊的长度单位去创建灵活的grid track。 这个单位就是fr,它代表的是网格容器中可用空间的一个部分。 下面的grid定义会创建三个等宽的track,宽度根据可用空间进行grow和shrink。
如果1和4想占据2个单位的宽度的话,可以这样:
下面这样的如何表现呢?
第一个track 500px宽;剩余的空间3等分,按照1比2的比例分配出去。![image](https://user-images.githubusercontent.com/19262750/85527762-c0ac5080-b63d-11ea-92ac-842200e8905b.png)
repeat()函数
如果有很多重复的track的话,可以用repeat()函数来写。 例如下面的例子:
可以写成这样:
不仅仅可以单独使用repeat()函数,还可以与px以及其他的组合使用。
而且可以repeat多个track,例如下面这样: 5个1:2分割的track,总计10个。
显隐式grid
这个例子通过grid-auto-rows,确保隐式的grid高度为200px。
minmax
Grid lines
来看一个在这些属性上运用了grid line的例子:
Grid cells
Grid areas
Gutter
嵌套grid布局
display: grid;grid-template-columns: repeat(3, 1fr);
将第一行内的子元素变为grid布局grid-row-start: 1;
控制box1的顺序;grid-row-start: 2;grid-row-start: 3;
可以将其放置在下面grid-row-start: 2
grid-row-start: 3
![image](https://user-images.githubusercontent.com/19262750/86357811-f934d580-bca0-11ea-8b35-7c12e5257df8.png)
grid实现覆盖式的布局并通过z-index控制Grid层级、控制Grid顺序
grid实现覆盖式的布局
grid布局不可做覆盖式的布局。
通过z-index控制Grid层级、控制Grid顺序
学习和实践感悟