HTML5 footer固定的解决方案

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTML5 footer固定的解决方案相关的知识,希望对你有一定的参考价值。

最近遇上个郁闷的事,前端妹纸离职去了驴妈妈旅游网,本来手里安卓和后端的活就来不及干,这下好了,前端离职,自己就得兼任前端,遇坑填坑吧。

妹纸也就刚毕业半年多,写的代码可维护性也不是特别好,妹子主要布局是没啥问题

<body>

    <header></header>//头

    <article></article>//内容

    <footer></footer>//尾

    <div></div>//隐藏层,用于显示加载效果

</body>

主要坑爹的地方在于她没有考虑窗口的高度,她的body设置如下

/* general style */
body, p, label, input{margin: 0;padding: 0;}
body{background-color: #edeef0;}

 

然后给footer设置了如下属性

footer{margin-top: 10%}
footer p{color: #BCBCBC;font-size: 12px;text-align: center;}

 

造成的后果就是尾部的公司名称显示位置不正确,在内容过少时而窗口高度很高时,公司名称显示在整个垂直高度的中间位置,但如果给footer

的position设为fixed的话,在内容过多而窗口高度很小时,底部公司名称一直固定在窗口底部,遮盖了页面内容。

我想了两种方案一种是media queries,另一种是js,但是作为一个非专业的前端,我还是选择了后者,感觉后者会比较容易。

 

整体布局不变,将height改为100%
html,body {margin: 0;padding:0;height: 100%;background-color: #edeef0; }

 

footer默认position为fixed,并且外边距设为0
footer{width:100%; position:fixed;bottom:0;}
footer p{color: #BCBCBC;font-size: 12px;text-align: center;}

接下来就是js操作

 

//浏览器视窗的高度
function getWindowHeight(){
var windowHeight = 0;
     if(document.compatMode == "CSS1Compat"){//BackCompat:标准兼容模式关闭。 CSS1Compat:标准兼容模式开启
         windowHeight = document.documentElement.clientHeight;
     }
     else {
         windowHeight = document.body.clientHeight;
     }
     return windowHeight;
}

//获取所有内容高度
function getAllDivHeight(){
    var height = 0;
    height=$("footer").outerHeight(true)+$("article").outerHeight(true)+$("header").outerHeight(true);
    return height;
}

//页面加载时

$(document).ready(function(){
    $(".error p").text(getWindowHeight()+"........"+getAllDivHeight());//显示高度使用
    $(".error").css("visibility", "visible");
    //判断大小,修改长度
    if((getWindowHeight()  - getAllDivHeight()) > 0)
        $(‘footer‘).css(‘position‘,‘fixed‘);
    else
        $(‘footer‘).css(‘position‘,‘relative‘);
});

 

除了以上js,还有一个比较容易被遗忘的地方,手机上webview加载该页面后,点击输入框,会弹出个输入法,造成

高度变化,所以也要监听状态变化做处理

//监听窗口变化
window.onresize = function(){
    $(".error p").text(getScrollHeight()+"......"+getWindowHeight()+"........"+getAllDivHeight());
    $(".error").css("visibility", "visible");
    //滑到底部时footer定于最下方,假定<footer>的height为60
    if((getWindowHeight()  - getAllDivHeight()) > 0)
        $(‘footer‘).css(‘position‘,‘fixed‘);
    else
        $(‘footer‘).css(‘position‘,‘relative‘);
}

完成以上代码后,footer中的内容就跟着高度自适应啦,虽然是非专业前端,但是media queries还是要抽空学习下才行的。

在窗口高度421,内容高度392时,footer定位为fixed

技术分享

 

当窗口高度216,内容高度392时,footer定位变成relative

技术分享

 

以上是关于HTML5 footer固定的解决方案的主要内容,如果未能解决你的问题,请参考以下文章

css Sticky footer html5(http://ryanfait.com/html5-sticky-footer/)

浏览器不支持html5怎么解决

js 固定底部 footer

内容不超过屏幕,footer固定在底部,超过时被撑出屏幕

header/footer/nav 标签——在 IE7、IE8 和不支持 HTML5 的浏览器中会发生啥?

将footer固定在页面最下方