详解Sticky Footer 绝对底部的两种套路


Posted in HTML / CSS onNovember 03, 2017

最近面了好几个前端,工作经验有高有低,居然都不知道绝对底部是什么,也没有人能说出一种实现方式,让我不禁感慨前端领域的良莠不齐

绝对底部,或者说 Sticky Footer,是一种古老且经典的页面效果:

当页面内容超出屏幕,页脚模块会像正常页面一样,被推到内容下方,需要拖动滚动条才能看到

而当页面内容小于屏幕高度,页脚模块会固定在屏幕底部,就像是底边距为零的固定定位

详解Sticky Footer 绝对底部的两种套路

一、经典套路

这种套路的思路是,给内容区域设置 min-height: 100%,将 footer 推到屏幕下方

然后给 footer 添加 margin-top,其值为 footer 高度的负值,就能让 footer 回到屏幕底部

HTML:

<div class="wrap">
  <div class="content">
    <p>填充内容</p>
  </div>
</div>
<div class="footer">
  <p>这是页脚</p>
</div>

CSS:

html,body {
  height: 100%;
}
    
body > .wrap {
  min-height: 100%;
}
    
.content {
  /* padding-bottom 等于 footer 的高度 */
  padding-bottom: 60px;
}
    
.footer {
  width: 100%;
  height: 60px;
  /* margin-top 为 footer 高度的负值 */
  margin-top: -60px;
}

需要注意的就是内容区域 content 的 padding、footer 的 height 和 margin, 必须保持一致

这种写法的兼容性非常好,实测 IE7 也能正常展示

但是如果页面的主体布局有其他兼容性问题,Sticky Footer 就需要做一些相应的修改

二、Flexbox

不得不说,CSS3 带来了前端的一次变革,其中 Flexbox 更是带来了网页布局的一次变革

虽然兼容性限制了 Flexbox 在国内的推广,但不可否认的是,Flexbox 是前端布局的一大趋势

HTML:

<div class="content">
  <p>填充内容</p>
  <hr />
</div>
<div class="footer">
  <p>这是页脚@WiseWrong</p>
</div>

CSS:

html, body {
  display: flex;
  height: 100%;
  flex-direction: column;
}

body > .content {
  flex: 1;
}

和经典套路相比,首先是 HTML 部分,内容区域 content 不再需要 wrap 容器

然后 CSS 部分减肥成功,仅仅使用四行代码,就解决了曾经困扰了一代人的难题

而且使用 Flexbox,就不需要限定 footer 的高度,让页面布局更加灵活

当然缺点也是显而易见的,只有 IE10 及以上的浏览器才支持 flex 布局

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

HTML / CSS 相关文章推荐
纯CSS3实现自定义Tooltip边框涂鸦风格的教程
Nov 05 HTML / CSS
CSS3 text shadow字体阴影效果
Jan 08 HTML / CSS
浅析rem和em和px vh vw和% 移动端长度单位
Apr 28 HTML / CSS
HTML5 CSS3新的WEB标准和浏览器支持
Jul 16 HTML / CSS
HTML5之WebGL 3D概述(下)—借助类库开发及框架介绍
Jan 31 HTML / CSS
HTML5中的autofocus(自动聚焦)属性介绍
Apr 23 HTML / CSS
HTML5 Canvas中绘制矩形实例
Jan 01 HTML / CSS
HTML5 history新特性pushState、replaceState及两者的区别
Dec 26 HTML / CSS
HTML5移动端手机网站开发流程
Apr 25 HTML / CSS
使用canvas压缩图片大小的方法示例
Aug 02 HTML / CSS
html2canvas截图空白问题的解决
Mar 24 HTML / CSS
wordpress添加Html5的表单验证required方法小结
Aug 18 HTML / CSS
CSS3 mask 遮罩的具体使用方法
Nov 03 #HTML / CSS
用CSS3实现无限循环的无缝滚动的示例代码
Nov 01 #HTML / CSS
用纯CSS3实现网页中常见的小箭头
Oct 16 #HTML / CSS
CSS3的颜色渐变效果的示例代码
Sep 29 #HTML / CSS
通过一张图教会你CSS3倒影的实现
Sep 26 #HTML / CSS
利用 CSS3 实现的无缝轮播功能代码
Sep 25 #HTML / CSS
CSS3中伪元素::before和::after的用法示例
Sep 18 #HTML / CSS
You might like
用PHP和MySQL保存和输出图片
2006/10/09 PHP
php中的登陆login
2007/01/18 PHP
PHP判断远程url是否有效的几种方法小结
2011/10/08 PHP
php设置session值和cookies的学习示例
2014/03/21 PHP
thinkPHP实现基于ajax的评论回复功能
2018/06/22 PHP
PHP快速排序算法实现的原理及代码详解
2019/04/03 PHP
asp javascript 实现关闭窗口时保存数据的办法
2007/11/24 Javascript
动态为事件添加js代码示例
2009/02/15 Javascript
XHTML下,JS浮动代码失效的问题
2009/11/12 Javascript
JavaScript中原型和原型链详解
2015/02/11 Javascript
纯JavaScript实现的兼容各浏览器的添加和移除事件封装
2015/03/28 Javascript
jquery插件hiAlert实现网页对话框美化
2015/05/03 Javascript
JS实现快速的导航下拉菜单动画效果附源码下载
2016/11/01 Javascript
jQuery插件HighCharts实现2D柱状图、折线图的组合多轴图效果示例【附demo源码下载】
2017/03/09 Javascript
jquery append与appendTo方法比较
2017/05/24 jQuery
微信小程序 scroll-view实现锚点滑动的示例
2017/12/06 Javascript
js中this对象用法分析
2018/01/05 Javascript
实例解析ES6 Proxy使用场景介绍
2018/01/08 Javascript
通过扫小程序码实现网站登陆功能
2019/08/22 Javascript
JavaScript提升机制Hoisting详解
2019/10/23 Javascript
element-ui和vue表单(对话框)验证提示语(残留)清除操作
2020/09/11 Javascript
Nodejs 微信小程序消息推送的实现
2021/01/20 NodeJs
[27:02]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第三场
2014/05/24 DOTA
python实现的用于搜索文件并进行内容替换的类实例
2015/06/28 Python
Python 找到列表中满足某些条件的元素方法
2018/06/26 Python
python将list转为matrix的方法
2018/12/12 Python
python字典排序的方法
2019/10/12 Python
完美解决pyinstaller打包报错找不到依赖pypiwin32或pywin32-ctypes的错误
2020/04/01 Python
Python通用唯一标识符uuid模块使用案例
2020/09/10 Python
CSS3效果:自定义“W”形运行轨迹实例
2017/03/29 HTML / CSS
趣天网日本站:Qoo10 JP
2019/09/18 全球购物
C#怎么让一个窗口居中显示?
2015/10/20 面试题
一套比较完整的软件测试人员面试题
2012/05/13 面试题
餐厅执行经理岗位职责范本
2014/02/26 职场文书
应用最多的公文《通知》如何写?
2019/04/02 职场文书
WINDOWS 64位 下安装配置mysql8.0.25最详细的教程
2022/03/22 MySQL