flex布局是真的好用,补齐边边角角,甚至是各种东西居中都是很好的解决方案

运行环境 Runtime environment

1
2
3
4
5
操作系统 : Windows10
IDE: JetBrains WebStorm 2020.2.4 x64
浏览器: Google Chrome 版本 67.0.3396.99(正式版本) (64 位)&& FireFox Developer Edition 版本63.0b4 (64位)
VueCli : 3
Element-ui : 2.13.1

背景

Element-ui 用起来是开心!快乐写页面的时候,出现没撑满的问题。

如果碰到那个屏幕高度高的,下面就一片白花花了。

网上有很多其他的解决方案,我认为flex布局是最终极的办法。

前端代码

https://codepen.io/pen/ 上做演示

html code 如下:

1
2
3
4
5
6
7
8
9
<script src="//unpkg.com/vue/dist/vue.js"></script>
<script src="//unpkg.com/[email protected]/lib/index.js"></script>
<div id="app">
<el-container>
<el-header>Header</el-header>
<el-main>Main</el-main>
<el-footer>Footer</el-footer>
</el-container>
</div>

CSS code 如下:

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
@import url("//unpkg.com/[email protected]/lib/theme-chalk/index.css");
.el-header, .el-footer {
background-color: #B3C0D1;
color: #333;
text-align: center;
line-height: 60px;
}

.el-aside {
background-color: #D3DCE6;
color: #333;
text-align: center;
line-height: 200px;
}

.el-main {
background-color: #E9EEF3;
color: #333;
text-align: center;
line-height: 160px;
}

body > .el-container {
margin-bottom: 40px;
}

.el-container:nth-child(5) .el-aside,
.el-container:nth-child(6) .el-aside {
line-height: 260px;
}

.el-container:nth-child(7) .el-aside {
line-height: 320px;
}

JS code 如下:(引入vue的基本操作,使用脚手架的这个js码可以略过)

1
new Vue().$mount('#app')

代码修改

修改 html code 如下:(使用VueCli的话上面script标签的引入可以省去,改用tamplate标签框起来)

1
2
3
4
5
6
7
8
9
<script src="//unpkg.com/vue/dist/vue.js"></script>
<script src="//unpkg.com/[email protected]/lib/index.js"></script>
<div id="app">
<el-container>
<el-header>Header</el-header>
<el-main>Main 我撑满了!</el-main>
<el-footer>Footer</el-footer>
</el-container>
</div>

CSS code 如下:

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
@import url("//unpkg.com/[email protected]/lib/theme-chalk/index.css");
.el-header, .el-footer {
background-color: #B3C0D1;
color: #333;
text-align: center;
line-height: 60px;
}

#app {
display: flex;
height: 100vh;
flex-direction: column;
}

.el-main {
background-color: #E9EEF3;
color: #333;
text-align: center;
line-height: 160px;
}

body > .el-container {
margin-bottom: 40px;
}

.el-container:nth-child(5) .el-aside,
.el-container:nth-child(6) .el-aside {
line-height: 260px;
}

.el-container:nth-child(7) .el-aside {
line-height: 320px;
}

修改后的效果,如下:

总结

1
2
3
4
5
父级盒子(#app)使用flex布局
必须要设置:display: flex; flex-direction: column;
高度也必须设置:height: 100vh;(注意不是100%)

即可达到中间主体部分 el-main 标签撑满屏幕高度的目的