蓝戒博客

  • 首页
  • 研发说
  • 架构论
  • 效能录
  • AI谈
  • 随笔集
智构苍穹
融合 AI、架构与工程实践,沉淀方法论,构建可持续的技术价值。
  1. 首页
  2. 研发说
  3. 正文

CSS实现footer置底最佳实践

2017年2月20日 5967点热度 0人点赞 0条评论

页脚置底(Sticky footer)就是让网页的footer部分始终在浏览器窗口的底部。

当网页内容足够长以至超出浏览器可视高度时,页脚会随着内容被撑开到网页底部;但如果网页内容不够长,置底的页脚需要保持在浏览器窗口底部。

sticky footer

实现方法
1. 将内容部分的底部外边距设为负数
这是个比较主流的用法,把内容部分最小高度设为100%,再利用内容部分的负底部外边距值来达到当高度不满时,页脚保持在窗口底部,当高度超出则随之推出的效果。

HTML
<div class="wrapper">

content

 <div class="push"></div>
</div>
<footer class="footer"></footer>
CSS
html, body {
 height: 100%;
 margin: 0;
 }
 .wrapper {
 min-height: 100%;

/* 等于footer的高度 */
 margin-bottom: -50px;
 }
 .footer,
 .push {
 height: 50px;
 }

这个方法需要容器里有额外的占位元素(如.push)

需要注意的是.wrapper的margin-bottom值需要和.footer的负的height值保持一致,这一点不太友好。

2. 将页脚的顶部外边距设为负数
既然能在容器上使用负的margin bottom,那能否使用负margin top吗?当然可以。

给内容外增加父元素,并让内容部分的底部内边距与页脚高度的值相等。

HTML
<div class="content">
 <div class="content-inside">
 content
 </div>
 </div>
 <footer class="footer"></footer>
CSS
html, body {
 height: 100%;
 margin: 0;
 }
 .content {
 min-height: 100%;
 }
 .content-inside {
 padding: 20px;
 padding-bottom: 50px;
 }
 .footer {
 height: 50px;
 margin-top: -50px;
 }

不过这种方法和上一种一样,都需要额外添加不必要的html元素。

3. 使用calc()设置内容高度
有一种方法不需要任何多余元素——使用CSS3新增的计算函数calc()

这样元素间就不会有重叠发生,也不需要控制内外边距了~

HTML
<div class="content">
 content
 </div>
 <footer class="footer"></footer>
CSS
.content {
 min-height: calc(100vh - 70px);
 }
 .footer {
 height: 50px;
 }

可能你会疑惑内容高度calc()中为什么减去70px,而不是footer的高度50px,因为假设俩元素有20px的间距,所以70px=50px+20px

不过,你不必在意这些~

4. 使用flexbox弹性盒布局
以上三种方法的footer高度都是固定的,通常来说这不利于网页布局:内容会改变,它们都是弹性的,一旦内容超出固定高度就会破坏布局。所以给footer使用flexbox吧,让它的高度可以变大变小变漂亮~(≧∇≦)

HTML
<div class="content">
 content
 </div>
 <footer class="footer"></footer>

CSS
html {
 height: 100%;
}
body {
 min-height: 100%;
 display: flex;
 flex-direction: column;
}
.content {
 flex: 1;
}

你还可以在上面添加header或在下面添加更多元素。可从以下技巧选择其一:

flex: 1 使内容(如:.content)高度可以自由伸缩
margin-top: auto
请记住,我们有《Flexbox完整指南(英)》呢~

5. 使用Grid网格布局
grid比flexbox还要新很多,并且更佳很简洁,我们同样有《Grid完整指南(英)》奉上~

HTML
<body>
 <div class="content">
 content
 </div>
 <footer class="footer"></footer>
</body>
 
<style>
 html {
 height: 100%;
 }
 body {
 min-height: 100%;
 display: grid;
 grid-template-rows: 1fr auto;
 }
 .footer {
 grid-row-start: 2;
 grid-row-end: 3;
 }
</style>

遗憾的是,网格布局(Grid layout)目前仅支持Chrome Canary和Firefox Developer Edition版本。

原文:https://css-tricks.com/couple-takes-sticky-footer/

标签: css
最后更新:2025年9月15日

cywcd

我始终相信,技术不仅是解决问题的工具,更是推动思维进化和创造价值的方式。从研发到架构,追求极致效能;在随笔中沉淀思考,于 AI 中对话未来。

打赏 点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

cywcd

我始终相信,技术不仅是解决问题的工具,更是推动思维进化和创造价值的方式。从研发到架构,追求极致效能;在随笔中沉淀思考,于 AI 中对话未来。

最新 热点 随机
最新 热点 随机
一人指挥 AI 程序员军团:OpenAI:Codex App 来了,开发效率或将提升 10 倍 AI 开始雇佣人类?RentAHuman 爆火背后:一场关于「AI 代理经济」的真实实验 大模型巅峰对决:GPT-5.4 Pro 横空出世,Gemini 3.1、Grok 4.2、Claude Opus 4.6 谁才是最强 AI? AI 编程神器 Qoder 专业版免费体验攻略 + QoderWork 全面解析 OpenClaw 太费 Token 的终极解决方案(可省 90%+) Agent 生态分裂:OpenClaw 之外,OpenFang 给出另一条路
基于 Monaco Editor 的 Web Component 智能提示实践Skills Desktop 完全指南:从认识到实践,打造你的 AI 技能中枢不只是聊天机器人:Composio,让 AI 真正“动手干活”AI 智能体框架选型:主流方案对比与建议ChatDev:把 AI 组织成“团队”,帮你把事做完的多智能体平台Codex 国内如何使用与安装?一篇真正能跑通的完整教程
信息系统架构的形与魂:理论、方法与前端实践 全面理解js变量提升、作用域链 10款免费网站检测速度分析工具 解析Object.prototype.toString.call()进行数据类型判断 字节跨平台框架 Lynx 开源:为 Web 开发者带来原生级跨端体验的全新选择 vue路由传参和router使用技巧总结
最近评论
渔夫 发布于 4 个月前(11月05日) 学到了,感谢博主分享
沙拉小王子 发布于 8 年前(11月30日) 适合vue入门者学习,赞一个
沙拉小王子 发布于 8 年前(11月30日) 适合vue入门者学习,赞一个
cywcd 发布于 9 年前(04月27日) 请参考一下这篇文章http://www.jianshu.com/p/fa4460e75cd8
cywcd 发布于 9 年前(04月27日) 请参考一下这篇文章http://www.jianshu.com/p/fa4460e75cd8

COPYRIGHT © 2025 蓝戒博客_智构苍穹-专注于大前端领域技术生态. ALL RIGHTS RESERVED.

京ICP备12026697号-2