中间内容高度不够屏幕高度撑不开的页面时候,页面footer部分都能保持在网页页脚(最底部)的方法
1、首先上图看显示效果
2、奉上源码
2.1、html部分
<body>
<header>头部</header>
<main>主区域</main>
<footer>底部</footer>
</body>
2.2、css部分
<style>
html, body {
margin: 0;
padding: 0;
width: 100%;
height: 100%;
}
body {
min-height: 100vh;
display: flex;
flex-direction: column;
}
header {
background: aquamarine;
height: 40px;
line-height: 40px;
text-align: center;
}
footer {
margin-top: auto;
background: aquamarine;
height: 50px;
line-height: 50px;
text-align: center;
}
main {
align-self: center;
/* 或者使用如下也可实现main区域居中显示 */
/* margin: 0 auto; */
background: aqua;
width: 80%;
}
</style>
3、全部代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>flexbox布局</title>
<style>
html, body {
margin: 0;
padding: 0;
width: 100%;
height: 100%;
}
body {
min-height: 100vh;
display: flex;
flex-direction: column;
}
header {
background: aquamarine;
height: 40px;
line-height: 40px;
text-align: center;
}
footer {
margin-top: auto;
background: aquamarine;
height: 50px;
line-height: 50px;
text-align: center;
}
main {
align-self: center;
background: aqua;
width: 80%;
}
</style>
</head>
<body>
<header>头部</header>
<main>主区域</main>
<footer>底部</footer>
</body>
</html>
4、原理
1、首先,我们确保
body
元素至少会拉伸到屏幕的整个高度min-height: 100vh
。如果内容较短(某些移动浏览器除外),这不会触发溢出,并且它将允许内容根据需要继续拉伸高度。2、设置
flex-direction: column
在保留堆叠块元素方面保持正常文档流的行为(假设所有body
块元素的直接子元素确实都是块元素)。3、flexbox 的优势在于利用该
margin: auto
行为。这个奇怪的伎俩将导致边距填充它所设置的项目与其在相应方向上最近的兄弟姐妹之间的任何空间。设置margin-top: auto
会有效地将页脚推到屏幕底部。
5、缺陷
main区域不能自动高度填充