蓝戒博客

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

CSS实现footer置底最佳实践

2017年2月20日 6115点热度 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记忆系统,48小时狂揽7千星!AI的长期记忆终于有解了? 用一条自然语言指令,让AI自动完成了调研、写稿、配音、剪辑全流程 你以为 AI 配音还在拼“像不像”,结果有人已经把“整个语音工作室”开源了 Claude Opus 4.7 上线:编程能力炸裂式跃升,Anthropic 手握更强模型却故意不发布 Gemma 4发布4天即遭"完全越狱",开源AI的安全与自由之争 一个文件让AI写代码不再"翻车":45K星的Karpathy指南火了
Dan Koe:不想打工?用这套方法把兴趣变成收入GitHub 爆火 4 万星项目:MiroFish,到底是 AI 新神话,还是下一代预测引擎DeerFlow 2.0:字节跳动开源的超级智能体框架,让AI研究、编码、创作一气呵成!Claude Code 生态大爆发:这周 GitHub 热点,已经不是工具升级,而是工作方式重写我把 Codex CLI 装上了“外挂大脑”:oh-my-codex 到底有多猛?别再盲下大模型了:用 llmfit 一秒看懂你的电脑到底能跑谁
当 AI 从“嘴强王者”进化为“动手玩家”,A2UI 让 Agent 亲手给你搭界面 webApp开发基础之META标签详解 2个月34k Stars:一个终于不会"失忆"的AI Agent StompJs:STOMP的服务器/javascript客户端的解决方案 移动web开发远程真机调试工具weinre调试方法 效率神器 NotebookLM:构建高质量知识库的完整教程与落地最佳实践
最近评论
渔夫 发布于 6 个月前(11月05日) 学到了,感谢博主分享
沙拉小王子 发布于 9 年前(11月30日) 适合vue入门者学习,赞一个
沙拉小王子 发布于 9 年前(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