CSS-Grid Layout
ahua52 opened this issue · 0 comments
What
grid 布局是CSS新增的一个二维布局,可以将页面分割成不同的空间, 通过 display:grid来设置使用,此时元素将自动变成网格容器。 似乎目前grid布局仍处于草案阶段。浏览器支持比较有限,仅在IE10+上支持,而且也仅支持部分属性。不过我们学习了解一下倒无防。
Why
一般来说,实现一种布局特性我们会有很多种方法,比如如果实现一些自适应可伸缩的布局,稍微麻烦点的可以用 float ,position, margin等属性解决, 后来 flex布局的出现让这个问题得到了更加简单的解决,但flex布局解决的是单向一维度的排列。但对于二维的布局只能通过多个flex布局嵌套实现, 而grid本身就是一个二维布局,实现起来就相当简单。
说到grid布局, 同时会让人想到table 布局,二者都很简单的实现了二维层面的布局,但grid布局区别于table的一个地方是它可以很简单的实现响应式布局。
总之,grid 布局的出现一大好处就是化繁为简,能够让一些比较复杂的页面布局得到很简单的解决。
How
下面对Grid Layout的使用方法简单介绍下
定义grid:
首先在grid item外的父级容器上定义display: grid
<div style="display: grid">
<div>grid item</div>
... ...
</div>
相关概念
grid lines – 是横向和纵向划分grid的线,它可以一朝数字顺序被指定,也可以用用户制定的名字被指定。
grid tracks – 指的是一个grid列或者行之前的区域,换而言之是两个相邻的grid lines之前的空间。
grid cells – 一个grid cell指的是grid中最小的单位。
grid areas – 是用来展现一个或多个grid item的逻辑空间。它被四条grid line包围。
grid item 属性
- grid-column-start
- grid-column-end
- grid-row-start
- grid-row-end
这四个属性中,grid-column-start和grid-row-start指明区域起始线,grid-column-end和grid-row-end指明区域结束线。这四个属性均有以下四个值可取。
- – 可以是一个数字,代表的是 grid line
- span – 该项会横跨所提供的数字个grid tracks
- span – 该项会横跨直到碰到下一个指定名字的grid line
- auto – 自动或者默认属性
除以上提到,grid还拥有更多的属性,使之可以定义grid item的宽高,间隙,内部自适应的方式,对齐方式等等。更多属性可以参考W3C文档。
example
经典圣杯布局(header- left, main, right- footer) 用grid实现如下:
<div class="grid-layout">
<div class="header">header</div>
<div class="left">left</div>
<div class="main">main</div>
<div class="right">right</div>
<div class="footer">footer</div>
</div>
.container {
display: grid;
grid-template-columns: 100px auto 100px;
grid-template-rows: 40px 300px 50px;
grid-template-areas: "header header header"
"left main right"
"footer footer footer";
}
.container .header {
grid-area: header;
}
.container .footer {
grid-area: footer;
}
.container .left {
grid-area: left;
}
.container .right {
grid-area: right;
}
.container .main {
grid-area: main;
}