grid布局是一个二维的基于网格的布局系统,这是个非常强大的css模块,然而有个令人伤心的话题就是兼容性问题,一个兼容性否定了他的推广,然而,这并不影响我们的学习,因为,只是时间问题。
兼容性可以看这个网站
can i use
话不多说,开始学习吧
先创建一个html文件
<div class="container">
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
</div>
然后开始我们最基础的两个性质
grid-template-columns
.container {
display: grid;
height: 100px;
grid-template-columns: 20px auto 20px;
border: 1px solid;
}
.item {
border: 1px solid;
}
.is-one {
background: rebeccapurple;
}
从最基本的我们可以看出,其实这个grid跟flexbox挺像的,是在父元素设置子元素的排列方式,然后子元素就会有统一的布局,如果子元素再有一些不一样的布局,也可以自己改。
另外,有没有瞬间又觉得很方便了,做两栏布局三栏布局甚至四栏五栏六栏都是so easy 的事情了呀。什么自适应都是so easy啦
grid-template-rows
就把上面的grid-template-columns属性换个属性名。
grid-template-areas
通过引用 grid-area属性指定的网格区域的名称来定义网格模板。
重复网格区域的名称导致内容扩展到这些单元格。
-
点号表示一个空单元格。 语法本身提供了网格结构的可视化
<style> .container { display: grid; height: 200px; grid-template-columns: 50px auto 50px; grid-template-rows: 10% auto 10%; grid-template-areas: "header header header" "content content sidebar" "footer footer footer"; border: 1px solid; } .item { border: 1px solid; } .is-header { grid-area: header; background: #CAA5EE; } .is-content { grid-area: content; background: #a395ba; } .is-sidebar { grid-area: sidebar; background: yellow; } .is-footer { grid-area: footer; background: #CAA5EE; } </style> <div class="container"> <div class="item is-header"></div> <div class="item is-content"></div> <div class="item is-sidebar"></div> <div class="item is-footer"></div> </div>
不详解撒,给图
如果想留一个网格的空白,可以有一个
.
占位。在图中就是把其中一个header变成
.
就可以了
grid-column-gap / grid-row-gap
行或者列的空隙
先来效果图!
在上一个例子的基础上,增加这两条嘻嘻。
上面讲的都是网格怎么怎么排列的,接下来我们要讲网格内容物的排列方式啦
justify-items
看看这个,当内容物宽度小于网格宽度时候,内容物就会往左边跑,这是文档流默认特性,这个时候我们可以通过设置justify-items属性啦。
- start: 内容与网格区域的左端对齐
- end: 内容与网格区域的右端对齐
- center: 内容位于网格区域的中间位置
- stretch: 内容宽度占据整个网格区域空间(这是默认值)
看到最后这一个是不是跟我说的好像不一样!这是因为我们的前提不一样。
align-items
既然有水平方向,怎么可以没有垂直方向呢!
看这样,是不是就跑上去了!这里我只设置item的高度,没有设置宽度,所以宽度是stretch啦,跟上面说的占据这个网格空间是一致的。
- start: 内容与网格区域的顶端对齐
- end: 内容与网格区域的底部对齐
- center: 内容位于网格区域的垂直中心位置
- stretch: 内容高度占据整个网格区域空间(这是默认值)
好的,今天就讲到这里拉,这是最基础的部分,接下来还有稍微复杂一些的操作就等到下次再说吧