蓝戒博客

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

CSS实现footer置底最佳实践

2017年2月20日 6676点热度 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 中对话未来。

最新 热点 随机
最新 热点 随机
狂揽 32 万 Star,让 AI 智能体帮你“逆向一切”:深度拆解 GitHub 现象级神器 morluto/rea 与 6 大最佳实践 OpenCode 曝 1.4% 用户密钥失窃,揭秘黑客“对抗性蒸馏”黑产! Claude 全面开放 OTel 追踪、Cohere 鲸吞 500 漏洞猎手:AI 智能体彻底告别“黑盒裸奔”! 不用显卡、普通 CPU 140 毫秒出结果!Mistral 突发开源 209M 时序模型 Timestral,横扫三大权威榜单 Meta Muse 被“开源复刻”?深度拆解 5000 星 OpenMuse:架构很香,但这 3 个暗坑必须看清 智谱 GLM-Legal 反超 Claude 与 Kimi:18B 激活参数凭什么啃下最严苛法律评测?
不讲废话的 AI 估值 2 亿美元!全面拆解“系统一”决策模型 Jev:70ms 极速响应与工业级实战白嫖 10 亿 Token 与云端虚拟机!Meta Muse 国内成功注册保姆级指南:手把手教你跳过排队请3天休13天!我用火山引擎 Seed-2.1-pro搓了个《国庆旅行模拟器》小游戏宿敌破天荒联手!OpenAI 与 Anthropic 互相“查水表”,Google 证实 Agent 越狱渗透:AI 正在失控边缘?波及 13.4 万智能体!首个零点击 RCE 漏洞 Plugin4Shell 爆发:你锁定的插件正在偷偷黑掉你的电脑阿里开源 OpenCodeReview:给大模型套上“工程缰绳”的代码审查神器
拒绝盲目堆Token!腾讯开源分层记忆引擎,把AI Agent的“健忘症”治好了 js页面滚动到一定位置时触发事件:隐藏、固定显示相互切换 免费白嫖 Kimi-K3!Modal 每月 30 刀额度,避坑全攻略 AI出海新风口,第一批靠“骡子快跑”搞钱的人已经出现了 开发者集体起立!cc-switch更新:原生干掉外挂,协议、会话、技能全包圆了! html5+css3动画经典案例收集整理
最近评论
cywcd 发布于 4 周前(09月22日) 《牛来跑酷》游戏链接地址已更新: 1. Gemini 3.7 Flash 版 牛来跑酷: htt...
渔夫 发布于 12 个月前(11月05日) 学到了,感谢博主分享
沙拉小王子 发布于 9 年前(11月30日) 适合vue入门者学习,赞一个
沙拉小王子 发布于 9 年前(11月30日) 适合vue入门者学习,赞一个
cywcd 发布于 10 年前(04月27日) 请参考一下这篇文章http://www.jianshu.com/p/fa4460e75cd8

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

京ICP备12026697号-2