css sticky footer实现,CSS Sticky Footer 几种实现方式

什么是 “Sticky Footer”

所谓 “Sticky Footer”,并不是什么新的前端概念和技术,它指的就是一种网页效果: 如果页面内容不足够长时,页脚固定在浏览器窗口的底部;如果内容足够长时,页脚固定在页面的最底部。但如果网页内容不够长,置底的页脚就会保持在浏览器窗口底部。

49ccbfaf8fdb4cd5a91654061887bbb4.png

先来看看下面的例子, 代码如下

顶部

中间部分

中间部分

中间部分

中间部分

中间部分

中间部分

中间部分

中间部分

中间部分

中间部分

中间部分

中间部分

中间部分

中间部分

中间部分

.header {

background-color: #3498DB;

height: 50px;

line-height: 50px;

text-align: center;

color: #fff;

}

.main {

overflow: auto;

box-sizing: border-box;

}

.footer {

background-color: #ECF0F1;

height: 50px;

line-height: 50px;

text-align: center;

}

08bd5f1b644362bfd872c2a5d66f7fc6.png

细心读者应该发现问题了,底部 footer 位置会随着主体内容高度变化自动变化,当主体内容小于视口的高度时, footer 并没有黏贴在底部. 那么解决这样问题尼?

negative margin

中间部分

中间部分

中间部分

中间部分

中间部分

中间部分

中间部分

中间部分

中间部分

中间部分

中间部分

中间部分

中间部分

中间部分

中间部分

中间部分

中间部分

中间部分

中间部分

中间部分

中间部分

中间部分

中间部分

中间部分

html,

body {

height: 100%;

}

.header{

background-color: #3498DB;

height: 50px;

line-height: 50px;

text-align: center;

color: #fff;

position: fixed;

width: 100%;

}

.main {

min-height: 100%;

overflow: auto;

box-sizing: border-box;

padding-bottom: 50px;

padding-top: 50px;

margin-bottom: -50px;

}

.footer {

background-color: #ECF0F1;

height: 50px;

line-height: 50px;

text-align: center;

}

6ac820a12b0dd8be96c535bcf250be12.gif

固定高度解决方案

使用如下属性

min-height

calc

vh

calc() 是 CSS3引入的,让你在声明CSS属性值时可以执行一些计算.

它可以用在一些数值场合; 详细可以查阅这里MDN

vh(Viewport Height): 顾明思议,表示的是视口的高度.

详细信息以及兼容可以查阅这里: caniuse

针对上面的代码进行修改,如下

.main {

min-height: calc(100vh - 50px - 50px);

}

1e6247abbd8827409b5b34f1deb3e653.png

这样完成我们期望的,但是有个缺点就是每次我们都要去计算 header、footer 的高度.

这显然不完美, 假如DOM结构层级多的话,需要计算的内容更多.

absolute

absolute相信大家熟悉不过了,这里就不在啰嗦了; 这里注意这个就行, absolute 元素其位置是根据什么来进行计算并进行定位的?

头部

中间部分

中间部分

中间部分

中间部分

中间部分

中间部分

中间部分

中间部分

中间部分

中间部分

中间部分

中间部分

中间部分

html{

position: relative;

min-height: 100%;

}

body{

margin-bottom: 50px;

}

.header {

background-color: #3498DB;

height: 50px;

line-height: 50px;

text-align: center;

color: #fff;

}

.main {

overflow: auto;

}

.footer {

position: absolute;

bottom:0;

width: 100%;

background-color: #ECF0F1;

height: 50px;

line-height: 50px;

text-align: center;

}

3da887390e2d09d6c98369a0fb7b9db3.gif

代码是不是很简单,这里主要 position的应用:

1 默认情况下, 当给某个元素设置为 position:absolute 时, 在祖先元素没有设置 position: absolute or fixed or relative

时, 其默认相对于初始包含块( initial containing block ).

2 什么初始化包含块?

The containing block in which the root element lives is a rectangle called the initial containing block. For continuous media, it has the dimensions of the viewport and is anchored at the canvas origin;

这是w3c对包含块介绍, 这段话大概意思, 根元素(document)为默认为初始化包含块,其初始化块的大小为视口的大小.

理解这几个概念后,我们再来看上面的代码就一目了然了!

html{

position: relative;

min-height: 100%;

}

body{

margin-bottom: 50px;

}

position:relative 改变包含块,让设置absolute元素根据html元素来进行定位.

min-height: 保证在内容不足视口时, footer能黏贴在底部.

margin-bottom 值为 footer 元素的高度,这样保证内容区域不会被footer遮住.

Flexbox

Flexbox是最完美的方案。只需要几行CSS代码就可以实现,而且像上面计算或添加额外的HTML元素。

修改代码如下:

顶部

中间部分

中间部分

中间部分

中间部分

中间部分

中间部分

中间部分

中间部分

中间部分

中间部分

中间部分

中间部分

中间部分

中间部分

中间部分

html,

body {

height: 100%;

}

.container {

display: flex;

flex-direction: column;

min-height: 100%;

}

.header {

background-color: #3498DB;

height: 50px;

line-height: 50px;

text-align: center;

color: #fff;

}

.main {

overflow: auto;

box-sizing: border-box;

flex: 1;

}

.footer {

background-color: #ECF0F1;

height: 50px;

line-height: 50px;

text-align: center;

}

最终效果如下:

7ae65a469cc4d6eac40c7e2bbdfe769d.gif

negative =margin、固定宽度、absolute 都依赖底部高度为固定.

一般推荐使用 absolute 和 flex 实现方式; 具体用那种可以根据具体场景来使用.

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值