首页 > 代码库 > 将footer固定在页面最下方
将footer固定在页面最下方
4说明:第一种方法在IE下会失效,第二种方法footer距离页面底部会有一点小小的留白,效果不佳,如需兼容IE推荐使用第三种方法(自己测试得出的结论,有不同意见请留言讨论)。
方法一:footer高度固定+绝对定位
HTML结构:
1 <body> 2 <header>header</header> 3 <main>main content</main> 4 <footer>footer</footer> 5 </body>
CSS设置:
1 html{height:100%;} 2 body{min-height:100%;margin:0;padding:0;position:relative;} 3 4 header{background-color: #ffe4c4;height:40px;width: 100%;} 5 main{padding-bottom:100px;width: 100%;background-color: #bdb76b;}/* main的padding-bottom值要等于或大于footer的height值 */ 6 footer{position:absolute;bottom:0;width:100%;height:100px;background-color: #ffc0cb;}
首先,设置body的高度至少充满整个屏幕,并且body作为footer绝对定位的参考节点;
其次,设置main(footer前一个兄弟元素)的padding-bottom值大于等于footer的height值,以保证main的内容能够全部显示出来而不被footer遮盖;
最后,设置footer绝对定位,并 设置height为固定高度值
。
方法二:footer高度固定+margin负值
HTML结构:
1 <body> 2 <div class="container"> 3 <header>header</header> 4 <main>main content</main> 5 </div> 6 <footer>footer</footer> 7 </body>
CSS设置:
1 html,body{height:100%;margin:0;padding:0;} 2 3 .container{min-height:100%;} 4 header{background-color: #ffe4c4;height: 40px;width: 100%;} 5 main{padding-bottom:100px;background-color: #bdb76b;width: 100%;}/* main的padding-bottom值要等于或大于footer的height值 */ 6 footer{height:100px;width: 100%;margin-top:-100px;background-color: #ffc0cb;}/* margin-top(负值的)高度等于footer的height值 */
此方法把footer之前的元素放在一个容器里面,形成了container和footer并列的结构:
首先,设置.container的高度至少充满整个屏幕;
其次,设置main(.container最后一个子元素)的padding-bottom值大于等于footer的height值;
最后,设置footer的height值和 margin-top负值
。
这种方法没有使用绝对定位,但html结构的语义化不如方法一中的结构清晰。
也可以设置负值的margin-bottom在.container上面,此时html结构变化如下:
1 <body> 2 <div class="container"> 3 <header>header</header> 4 <main>main content</main> 5 <div class="empty"></div> 6 </div> 7 <footer>footer</footer> 8 </body>
css设置:
1 html,body{height:100%;margin:0;padding:0;} 2 container{min-height:100%;margin-bottom:-100px;} 3 empty{height:100px;} 4 5 header{width:100%;height:40px;} 6 7 main{background-color: #bdb76b;width:100%} 8 footer{height:100px;width:100%background-color: #ffc0cb;}
使用一个空的div把footer容器推到页面最底部,同时给container设置一个负值的margin-bottom,这个margin-bottom与footer和.empty的高度相等。
虽然多了一个空的div,语义上也不怎么好,但是相比前面为main元素设置padding-bottom的方法有一个明显的好处:当网页内容不满一屏的时候,如果需要为main元素设置边框、背景色的时候,padding-bottom硬生生地撑出了一片空白,真真是有点丑,但是加个空的div之后,布局方式作用在.empty上,对main的css设置就不影响了,算是一个好处吧!
方法三:footer高度任意+js
HTML结构:
<body> <header>header</header> <main>main content</main> <footer>footer</footer> </body>
CSS设置:
html,body{margin:0;padding: 0;} header{background-color: #ffe4c4;} main{background-color: #bdb76b;} footer{background-color: #ffc0cb;} /* 动态为footer添加类fixed-bottom */ .fixed-bottom {position: fixed;bottom: 0;width:100%;}
js代码:
$(function(){ function footerPosition(){ $("footer").removeClass("fixed-bottom"); var contentHeight = document.body.scrollHeight,//网页正文全文高度 winHeight = window.innerHeight;//可视窗口高度,不包括浏览器顶部工具栏 if(!(contentHeight > winHeight)){ //当网页正文高度小于可视窗口高度时,为footer添加类fixed-bottom $("footer").addClass("fixed-bottom"); } else { $("footer").removeClass("fixed-bottom"); } } footerPosition(); $(window).resize(footerPosition); });
将footer固定在页面最下方