传送门 - http://www.ruanyifeng.com/blog/2019/03/grid-layout-tutorial.html 来自阮一峰的博客,这篇文章作为一个自己学习笔记吧。
顾名思义就是利用网格结构来布局。
正常的盒模型布局,布局结构会相对复杂。且自响应能力较差。于是就出现了flex。和之前相似的就是还是属于一维布局,正常流式布局。而grid就属于网格二维布局,相比之前能够更简单的实现一些布局工作。
一、基本概念
容器和项目
这个和flex类似,grid作用区域叫做容器,容器顶级子元素叫做项目
行(row)和列 (column)
例:m个row 和 n个col
单元格
由行和列组成的格子 m*n个
网格线
围成单元格的线 m+1 和 n+1个
二、容器属性
行列的大小,边距,对齐方式
1. display
两种,定义grid布局生效,生效类型的容器属于block还是inline
1 | display: grid; |
2. grid-template-columns 和 grid-template-rows
定义每行,每列的大小
1 | .container { |
3. grid-gap
定义边距
1 | grid-row-gap: 20px; |
4. grid-template-areas
定义区域命名
1 | grid-template-areas: "header header header" |
5. grid-auto-flow
定义排列顺序和自动密集排序row dense
1 | grid-auto-flow: column | row; // 默认row |
6. justify-items, align-items, space-items
定义容器中项目内容的对齐方式,和flex类似
1 | justify-items: start | end | center | stretch; |
7. justify-content, align-content, space-content
定义容器中项目的对齐方式,和flex类似
1 | justify-content: start | end | center | stretch | space-around | space-between | space-evenly; |
8. grid-auto-rows, grid-auto-columns
超出定义网格区域的单元格大小(默认和template一样)
1 | .container { |
9. grid-template 和 grid
grid-template属性是grid-template-columns、grid-template-rows和grid-template-areas这三个属性的合并简写形式。
grid属性是grid-template-rows、grid-template-columns、grid-template-areas、 grid-auto-rows、grid-auto-columns、grid-auto-flow这六个属性的合并简写形式。
三、项目属性
定位和对齐方式
1 | .item-1 { |
1 | justify-self: start | end | center | stretch; |
四、兼容性
之所以这么强大的grid布局没有普及和其兼容性有很大的关系。现在的主流的几家浏览器其实都支持了,但是在ie、qq浏览器、百度浏览器和opera mini都还不支持或者不太支持(2019/10/21)
Can I Use