微信号:front_end_talk

介绍:Front-End Talk,煮酒论前端.专注前端开发的技术媒体.

告诉你一个将 footer 保持在底部的最好方法

2016-04-22 11:51 FETalk

原文地址:http://tutorialzine.com/2016/03/quick-tip-the-best-way-to-make-sticky-footers/


当你在布局网页时,有可能会遇到类似下面的这种情况


导致这一问题的原因是页面内容太少,无法将内容区域撑开,从而在 footer 下面留下一大块空白。

本文将介绍一种现代化的方法,确保 footer 始终处于页面的底部。

解决方法

解决该问题的最好方法是采用 flexbox——CSS3提供的一种先进布局模型,旨在建立具有适应性的布局。如果你对 flexbox 还不怎么熟悉,文章最后有一些扩展阅读链接,可以帮助你了解 flexbox。

我们的演示页面应该具备 Header、主体内容区域和 Footer,下面是该页面的 HTML


<body>

    <header>...</header>

    <section class="main-content">...</section>

    <footer>...</footer>

</body>

为了启用 flex模式,我们将 body 的 display 属性设置为 flex, 然后将方向属性设置为列, (默认是行,也就是横向布局)。同时,将html 和 body 元素的高度设置为100%,使其充满整个屏幕。

html{

    height: 100%;

}

body{

    display: flex;

    flex-direction: column;

    height: 100%;

}


在,我们需要调整各个区域占用的页面空间,我们将通过flex 属性来达到这一目的,该属性实际包含了三个属性,分别是:

  • flex-grow:元素在同一容器中对可分配空间的分配比率,及扩展比率

  • flex-shrink:如果空间不足,元素的收缩比率

  • flex-basis:元素的伸缩基准值

我们希望 header 和footer 只占用他们应该占用的空间,将剩余的空间全部交给主体内容区域

header{

   /* 我们希望 header 采用固定的高度,只占用必须的空间 */

   /* 0 flex-grow, 0 flex-shrink, auto flex-basis */

   flex: 0 0 auto;

}

.main-content{

   /* 将 flex-grow 设置为1,该元素会占用所有的可使用空间 

      而其他元素该属性值为0,因此不会得到多余的空间*/

   /* 1 flex-grow, 0 flex-shrink, auto flex-basis */

   flex: 1 0 auto;

}

footer{

   /* 和 header 一样,footer 也采用固定高度*/

   /* 0 flex-grow, 0 flex-shrink, auto flex-basis */

   flex: 0 0 auto;

}

终的效果如下图所示。通过点击中央的粉红按钮改变主体内容,footer 会始终显示在页面的最底部。


demo 页面地址:
http://demo.tutorialzine.com/2016/03/quick-tip-the-best-way-to-make-sticky-footers/ (看效果可能需要翻墙)

结论

如你说见,如果是从零开始构建布局,flexbox 将会是你的得力助手。除了极少数的例外,所有的主流浏览器都支持 flexbox,就 IE 来说,IE9以后的版本都是支持的。

下面是一些学习 flexbox 布局模型不错的教程和速查表(点击“阅读原文”获取链接)

  • CSS-Trick 的 flex box 快速指南

  • 一个专门提供酷炫 flexbox 技术的网站:Solved by Flexbox

  • 5分钟互动教程




 
FETalk 更多文章 CSS in Action:样式优先级 Github干货铺:百度 EFE团队前端规范 成都Meetup小组聚会通知(日期已改) Github干货铺:django-webpack-loader 编写高效JavaScript代码
猜您喜欢 Android 属性动画 源码解析 深入了解其内部实现 公开表扬,私下批评? 分布式事务:不过是在一致性、吞吐量和复杂度之间,做一个选择 面向互联网时代的银行IT系统架构设计 统领学习的二八法则