点击上方蓝字关注我们,标星不迷路,不错过每一篇用心分享的技术文章哦
grid[1]布局通常在C
端布局用得比较多,非常强大,特别是在响应式布局上也有很大作用,过去我们使用弹性盒子
布局,flex
布局,通常我们在不改变结构的情况下可以使用grid
布局来更灵活的拓展我们的布局
正文开始...
当我们对一个父级元素使用grid
时,此时子级元素会发生什么
<div class="app">
<div class="box-1">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
<div class="item">5</div>
<div class="item">6</div>
<div class="item">7</div>
<div class="item">8</div>
<div class="item">9</div>
</div>
</div>
对应的css
* {
padding: 0;
margin: 0;
}
.app {
background: beige;
}
.box-1 {
display: grid;
}
.box-1 .item {
width: 80px;
height: 80px;
}
.box-1 .item:nth-of-type(2n) {
background-color: green;
}
.box-1 .item:nth-of-type(2n+1) {
background-color: pink;
}
此时子元素将默认单行排列
默认情况下,当父元素设置grid
,默认grid-template-columns: 1fr
,grid-template-rows:1fr
网格布局主要由colums
与rows
来定义列与行
九宫格
通常我们在页面布局上,左右间距等分,这个在以前布局上,左右间距设置就是间距的一半,上下间距会合并<div class="box box-1">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
<div class="item">5</div>
<div class="item">6</div>
<div class="item">7</div>
<div class="item">8</div>
<div class="item">9</div>
</div>
.app {
background: beige;
}
.box-1 {
display: grid;
grid-template-columns: 33.3% 33.3% 33.3%;
grid-template-rows: 200px 200px 200px;}
.box .item:nth-of-type(2n) {
background-color: green;
}
.box .item:nth-of-type(2n+1) {
background-color: pink;
}
宽度自适应,每个高度为固定200px
的九宫格
也就是grid-template-columns
确定了3列,并且宽度是整个屏幕的33.3%
,而高度为固定高度200px
有且仅有3行
当我们把grid-template-columns: 1fr 1fr 1fr
时,此时与之效果是一样,有且仅仅只有三列
看到1fr
是不是很陌生,这是网格的轨道单位
,这是一个很灵活的单位
假设我们要平分整个屏幕的1/3,那么你就需要设置grid-template-columns: 1fr 1fr 1fr
,每一个1fr
就是33.33%
假设你要设置一个2fr 1fr 1fr
,那么第一个元素会是第二个元素的两倍
在以上九宫格例子中,我们使用grid-template-columns
控制了网格列数,通过这个属性,我们可以不用单独对子元素进行控制
.box-1 {
display: grid;
grid-template-columns: 200px 100px 1fr;
grid-template-rows: 200px 200px 200px;
}
.box .item:nth-of-type(2n) {
background-color: green;
}
.box .item:nth-of-type(2n+1) {
background-color: pink;
}
在父元素上,我们可以在grid-template-columns
中设置子元素columns
的宽度,grid-template-columns: x y z ...
x,y,z既可以是百分比,也可以是固定像素
在以上例子中我们用这个属性控制了子元素的高度,当我们UI设计的一个模块是4行时,我们就可以对应设置grid-template-rows: x y z p
这个属性控制了网格中的行
控制列之间的间距
.app {
background: beige;
}
.box-1 {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-template-rows: 200px 200px 200px;
grid-column-gap: 10px; /* 列之间10个像素*/
}
.box .item:nth-of-type(2n) {
background-color: green;
}
.box .item:nth-of-type(2n+1) {
background-color: pink;
}
控制行之间的间距
我们实现上下左右间距相等的间距.box-1 {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-template-rows: 200px 200px 200px;
grid-row-gap: 10px; /* 行之间的间距 */
}
我们给父元素添加.app {
background: red;
}
.box-1 {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-template-rows: 200px 200px 200px;
grid-column-gap: 10px;
grid-row-gap: 10px;
padding: 10px;
}
padding: 10px;
,然后分别设置grid-column-gap: 10px;
,grid-row-gap:10
就可以实现间距相等了我们可以用column-gap
与row-gap
来替代grid-column-gap
与grid-row-gap
在以上我们使用grid-template-columns:1fr 1fr 1fr
来控制,我们也可以利用repeat来简写
.box-1 {
display: grid;
/ * grid-template-columns:1fr 1fr 1fr */
grid-template-columns: repeat(3,1fr);
/*
grid-template-rows: 200px 200px 200px
*/
grid-template-rows: repeat(3, 200px);
grid-column-gap: 10px;
grid-row-gap: 10px;
padding: 10px;
}
控制列的跨度
我们对第一个items使用.box .item:nth-of-type(1) {
grid-column-start: 1;
grid-column-end: 4;
}
grid-column-start:1
,grid-column-end:4
控制行的跨度
.box .item:nth-of-type(1) {
grid-row-start: 3;
grid-row-end: 3;
grid-column-start: 1;
grid-column-end: 3;
}
在之前我们有用过grid-column-start
与grid-column-end
来控制列的跨度
我们可以通过grid-column:1/3
来简grid-column-start:1;grid-column-end:3
.box-1 {
display: grid;
grid-template-columns: repeat(4,1fr);
gap: 20px;
position: relative;
}
.box .item:nth-of-type(1) {
grid-column: 1/3;
}
我们通过grid-row:1/3
来简写grid-row-start:1;grid-row-end:3
.box .item:nth-of-type(1) {
grid-column: 1/3;
grid-row: 1/3;
}
最小宽度200,最大自适应
.box-1 {
display: grid;
/* grid-template-columns: 1fr 1fr 1fr; */
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
grid-column-gap: 10px;
grid-row-gap: 10px;
padding: 10px;
}
gap:10px 20px
代表row-gap:10px
与column-gap:20px
.box-1 {
display: grid;
grid-template-columns: repeat(4,1fr);
/* grid-column-gap: 10px;
grid-row-gap: 10px; */
/* column-gap: 10px;
row-gap: 10px; */
gap:10px 20px;
}
这是一个基于grid-row-start
、grid-column-start
、grid-row-end
、grid-row-end
的简写
.box .item:nth-of-type(2) {
grid-area: 1 / 2 / 2 / 2;
}
实现一个header
,slide
,main
,footer
的布局
<div class="app">
<header>header</header>
<aside>slide</aside>
<main>main</main>
<footer>footer</footer>
</div>
对应的css如下
* {
padding: 0;
margin: 0;
}
.app {
background: red;
display: grid;
grid-template-columns: 200px 1fr;
grid-template-rows: 30px calc(100vh - 90px) 60px;
}
header {
grid-column: 1 / 3;
background-color: blue;
}
aside {
grid-column: 1 / 2;
background-color: pink;
}
main {
grid-column: 2 / 3;
background-color: yellow;
}
footer {
grid-column: 1 / 3;
background-color: palegreen;
}
我们在父元素上设置了grid-template-columns: 200px 1fr
,这个使得网格的第一列是固定200px
,第二列是1fr
我们使用grid-template-rows: 30px calc(100vh - 90px) 60px;
设置了row
,那么第一行就是30px,第二行就是calc(100vh -90px)
,第三行就是60px
。
我们在header
上用grid-column: 1/3
设置了跨列显示,在aside
上设置了grid-column: 1/2
,在main
上设置了grid-column: 2/3
;footer
设置了grid-column:1/3
最后我们看下效果
命名网格区域名称
* {
padding: 0;
margin: 0;
}
.app {
background: red;
display: grid;
grid-template-columns: 200px 1fr;
grid-auto-rows: minmax(100px, auto);
grid-template-areas:
"hd hd hd"
"sd main main"
"ft ft ft";
}
header {
grid-area: hd;
background-color: blue;
}
aside {
grid-area: sd;
background-color: pink;
}
main {
grid-area: main;
background-color: yellow;
}
footer {
grid-area: ft;
background-color: palegreen;
}
grid
布局常用的几个属性,比如grid-template-columns
与grid-template-rows
控制网格的列与行
grid-colunms-gap
与grid-rows-gap
设置列与行之间的间距,row-gap
与column-gap
是它们的简写
grap
可以设置row-gap
与column-gap
grid-column-start
与grid-column-end
来设置列的跨度,grid-column: 1/2
与grid-row: 1/3
可以替代它们
grid-area
实现一个网站的header
、slide
、main
、footer
的布局
code example[2]
[1]grid: https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_Grid_Layout/Basic_Concepts_of_Grid_Layout
[2]code example: https://github.com/maicFir/lessonNote/tree/master/html/09-grid布局
最后,看完觉得有收获的,点个赞,在看,转发,收藏等于学会,原创不易,欢迎关注Web技术学苑,好好学习,天天向上!
往期推荐
uni-app修仙笔记,筑基初期云开发之云函数与云对象
一杯茶的时间,搞懂 RESTful API!
uni-app修仙笔记,炼气期之前端部署
uni-app修仙笔记,炼气期之下拉刷新与上拉加载
uni-app修仙笔记,炼气期之布局
React修仙笔记,筑基初期之hooks
Web Technology Learn
Web技术学苑
Interesting Original Story
有趣原创故事
https://tv.wmcweb.cn 好看影视
微信扫一扫
关注该公众号