前言
近期,学习了关于栅格布局的一个知识点,看着一头雾水,属性的值不确定,且规律多变,看着好像毫无规则可言,而且与其他的布局也可以配合使用,
个人觉得🈶️必要对习得的知识点进行一个总结,加深自身对该知识点的一个理解与使用,以便于后续能够很顺畅的来使用,而不是单纯的copy度娘到的
别人家的代码,也不知道个中缘由!!!
栅格属性一览
首先甩出这边针对属性以及其组成,整理的一个脑图吧:
🪐 刚开始初步学习完成栅格布局,有点不明白为毛要整如此复杂的布局,在完成自己设置的例子demo出来了之后,发现它的强大之处,比起其他的布局,比如弹性盒子布局、盒子模型、定位、浮动等等,
具有重大的优越性,也渐渐地明白了它的一个存在意义,这里整理了以下关于布局的一些相关的优越性:
- 减少html节点的层数,提高渲染效率;
我想这个应该是每个前端人都应该关注的,如今写代码的人到处都有,刚毕业的应届生都能够胜任基本的编码工作,如果对于布局编码方面,没有编写出普适性、兼容性高的代码,那么是没有多大的竞争优势的;
- 屏幕兼容性高,可伸缩延展;
实战
👇 将通过一两个简单的例子来使用栅格布局
实战一:实现类似目前的商家管理系统中的上、左、右工字形的框架布局
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| <div class="container"> <header class="header">header</header> <nav class="nav"> <ul class="nav-menu-container"> <li class="menu-item-container"> 菜单一的名称 </li> <li class="menu-item-container"> 菜单二 </li> <li class="menu-item-container"> 菜单三三 </li> <li class="menu-item-container"> 菜单 </li> </ul> </nav> <div class="content-container"> 这个是选中菜单后展示的内容 </div> <div class="footer"> <div class="footer-item-container"> 关于我们 </div> <div class="footer-item-container"> 关于我们 </div> <div class="footer-item-container"> 关于我们 </div> <div class="footer-item-container"> 关于我们 </div> </div> </div>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| *{ padding: 0; margin: 0; } .container{ width: 100%; height: 100vh; background: #f2f2f2; display: grid; grid-template-areas: 'header header header header' 'nav content content content' 'footer footer footer footer'; grid-template-rows: 60px 1fr 80px; grid-template-columns: minmax(100px, max-content) 1fr; } .header{ background: #CCF; padding: 12px; grid-area: header; display: grid; align-items: center; } .nav{ grid-area: nav; background: #FFC; } .nav-menu-container{ list-style: none; } .menu-item-container{ list-style: none; } .content-container{ grid-area: content; background: #FFF; } .footer{ grid-area: footer; background: #CFC; display: grid; grid-template-columns: repeat(4, calc(100px)); justify-items: center; align-items: center; justify-content: center; } .footer-item-container{ background: #3F2; padding: 10px; }
|
这里简单针对上面👆的🌰进行一个解析:
- 设置整体为栅格布局,并根据栅格区域,来设置填充内容,同时设置每一个轨道的尺寸,完成整体视图框架的设置,同时这里需要考虑到不同屏幕分辨率尺寸的效果展示;
- 根据栅格区域,分配好每一个栅格元素所占据的”坑”;
- 自行设置每个子区域中栅格元素的控制,通过与弹性盒子类似的配置,针对栅格容器进行的配置;
- 每个子区域又可以设置为栅格布局,而且还可以做到免添加多一层的方式,达到底部footer区域的内容居中展示的效果
实战二:实现不规则图形块填充栅格容器效果
1 2 3 4 5 6 7 8 9 10 11 12 13
| <div class="container"> <div class="item">item</div> <div class="item">item</div> <div class="item one">one</div> <div class="item">item</div> <div class="item">item</div> <div class="item">item</div> <div class="item">item</div> <div class="item two">two</div> <div class="item">item</div> <div class="item">item</div> <div class="item one">item</div> </div>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| *{ padding: 0; margin: 0; } .container{ background: #f2f2f2; display: inline-grid; border: 10px solid; gap: 10px; grid-template-rows: repeat(5, 100px); grid-template-columns: repeat(5, 100px); } .item{ text-align: center; background-color: #FFC; display: grid; align-items: center; grid-auto-flow: dense; } .one{ grid-row: auto/ span 2; grid-column: auto/ span 2; background: #CFD; } .two{ grid-row: auto / span 3; grid-column: auto / span 3; background: #81E; }
|
总结
😕 那么什么情况下,我会考虑使用栅格布局呢?
- 规则“矩形区域”的情况下,可以优先考虑使用栅格布局,这可以大大的减少因使用其他布局所带来的层次较多的现象(比如弹性布局);
- 出现“同质化元素”的情况下,行列出现相同的元素时,可优先考虑使用栅格布局,可以减少布局的层次,也可以