页脚贴不住底部的最优解是用flex布局配合margin-top: auto。将html和body设为height: 100%,body设为display: flex、flex-direction: column,main设flex: 1,footer设margin-top: auto即可。
页脚贴不住底部,通常是因为页面内容太短,导致页脚悬浮在中间。用 flex 布局配合 margin-top: auto 是最简洁可靠的解法,不需要计算高度、不依赖绝对定位,兼容性也好(IE10+ 支持)。
把整个页面的根容器(通常是 body 或一个外层 div)设为 display: flex,方向设为列布局,并
允许子元素沿主轴(垂直方向)伸展:
html 和 body 设 height: 100%,确保高度撑满视口body 加 display: flex; flex-direction: column;main)设 flex: 1,让它自动填满剩余空间在 flex 列布局中,margin-top: auto 会让该元素尽可能远离上一个兄弟元素,也就是被“挤”到容器底部:
footer)不需要设固定高度,也不需要 position: absolutemargin-top: auto 即可——它会吸收主体内容之后的所有剩余空间关键代码如下,无需 JS,无副作用:
顶部 主要内容
CSS:
html, body {
height: 100%;
margin: 0;
}
body {
display: flex;
flex-direction: column;
}
main {
flex: 1;
}
footer {
margin-top: auto;
}
这个方法看似简单,但几个细节容易出错:
html, body { height: 100% },否则 flex 容器没高度,flex: 1 就不生效main 是 body 的直接子元素,否则 margin-top: auto 不会跨层级起作用body 的默认 margin 或 display基本上就这些。比 sticky footer、calc()、绝对定位都更直观稳定,现代项目推荐首选。