CSS网格布局(又称“网格”),是一种二维网格布局系统。CSS在处理网页布局方面一直作的不是很好。一开始咱们用的是table(表格)布局,而后用float(浮动),position(定位)和inline-block(行内块)布局,可是这些方法本质上是hack,遗漏了不少功能,例如垂直居中。后来出了flexbox盒布局,解决了不少布局问题,可是它仅仅是一维布局,而不是复杂的二维布局,实际上它们(flexbox与grid)能很好的配合使用。css
在咱们开始正式学习Grid布局以前,先看一下can i use上grid布局在各个浏览器下的支持状况是颇有用的,html
要想学好Grid布局的用法,基本概念的介绍是少不了的,虽然看起来比较枯燥。浏览器
经过display属性设置属性值为grid或inline-grid能够建立一个网格容器。网格容器中的全部子元素就会自动变成网格项目(Grid item)函数
组成网格线的分界线。它们能够是列网格线(column grid lines),也能够是行网格线(row grid lines)而且居于行或列的任意一侧布局
两个相邻的网格线之间为网格轨道。你能够认为它们是网格的列或行学习
两个相邻的列网格线和两个相邻的行网格线组成的是网格单元,它是最小的网格单元flex
网格区是由任意数量网格单元组成flexbox
要介绍Grid布局属性,让咱们先从一个简单例子开始:spa
如上图所示,若是咱们要实现一个3x3的正方形矩阵,用Grid布局要怎么实现?code
<div class="container"> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> </div>
.container { display: grid; width: 200px; height: 200px; grid-template-rows: repeat(3, 50px); grid-template-columns: repeat(3, 50px); grid-row-gap: 10px; grid-column-gap:10px; } .container div { background-color: #ccc; border: 1px solid #333; }
如上面代码所示,3x3的矩阵布局,用Grid布局去写,很是简单方便,相对于使用其余布局来讲,Grid布局的优势就显现出来了,那么,接下来就让咱们看看Grid局部中那些经常使用属性:
依旧是上面html代码,一个3x3的矩阵,不一样的是此次咱们经过网线号码来定位某一个特定方块。
.container { display: grid; width: 200px; height: 200px; grid-template-rows: repeat(3, 50px); grid-template-columns: repeat(3, 50px); } .container div { background-color: #ccc; border: 1px solid #333; grid-column-start: 2; grid-column-end: 3; grid-row-start: 2; grid-row-end: 3; /* grid-area: 2/2/3/3; */ }
经过上面的代码咱们能够实现以下效果:
咱们定位矩阵正中间的小方块显示出来,其他的就不显示了,下面咱们网格线号码定位的那些属性:
经过上面的例子,咱们知道了如何用网格线去定位网格项目,接下来咱们将学习如何经过网格区域的命名来定位网格项目,老样子,依旧从一个例子开始:
<div class="container"> <div class="first"></div> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> </div>
.container { display: grid; width: 400px; height: 400px; grid-template-rows: repeat(3, 100px); grid-template-columns: repeat(3, 100px); grid-template-areas: "header header2 header3" "body body2 body3" "footer footer2 footer3"; } .container div { background-color: #ccc; border: 1px solid #333; } .container .first { grid-row-start: header2; grid-row-end: body2; grid-column-start: header; grid-column-end: header2; }
如上述例子看到的,原本是一个3x3的矩阵,可是经过区域命名的方式,将第一个div设置了跨两行两列,接下来让咱们一块儿了解一下网格区域命名定位网格项目的相关属性:
这篇文章简单的介绍了一些Grid布局的属性和用法,但没有涉及全部,Grid布局还有不少属性和用法须要本身去探索,经过不一样属性的排列组合,能够发掘不一样的玩法,这不正是布局的魅力吗?
若是你们想要更加全面的了解Grid布局,能够去Mozilla Grid板块去探索发现Grid布局的魅力。这篇文章若是有错误或不严谨的地方,欢迎批评指正,若是喜欢,欢迎点赞收藏