通过sticky-footer布局来实现绝对底部

偏向技术
/ 0 评论 / 52 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2021年03月30日,已超过1335天没有更新,若内容或图片失效,请留言反馈。
  • 当内容不够时,页脚应该固定在页面底部
  • 当内容超出时,页脚应该在内容后面
html
//html
<div class="wrapper">
    <div class="content-wrapper clearfix">
        <div class="content"></div>
    </div>
    <div class="footer"></div>
</div>

//css
.clearfix{
    display: inline-block;
}
.clearfix:after{
    display: block;
    content: '';
    height: 0;
    line-height: 0;
    clear: both;
    visibility: hidden;
}
.wrapper{
    position: fixed
    width: 100%
    height: 100%
    overflow: auto
}
.content-wrapper{
    min-height: 100%
    width: 100%
}
.content{
    padding-bottom: 40px
}
.footer{
    position: relative
    margin-top: -40px
    clear: both
}
1234567891011121314151617181920212223242526272829303132333435363738

介绍

1、嵌套层级不深,可直接继承自 body width:100%; height:100%;

html
// html
<body>
    <div id="sticker">
        <div class="sticker-con">我是内容</div>
    </div>
    <div class="footer">我是脚</div>
</body>

// css
html,body{
    width:100%;
    height:100%;
}
#sticker{
    width:100%;
    min-height:100%;
}
.sticker-con{
    padding-bottom:40px;    // 40px 为 footer 本身高度
}
.footer{
    margin-top:-40px;  // 40px 为 footer 本身高度
}
1234567891011121314151617181920212223

2、嵌套层级很深,无法直接从上级继承 百分比高度
 给需要的 sticker-footer 创建一个 wrapper

html
<body>
    <div id="wrapper">
        <div id="sticker">
            <div class="sticker-con">我是内容</div>
        </div>
        <div class="footer">我是脚</div>
    </div>
</body>

.wrapper{
    position:fixed;  // 这样 wrapper 就可以直接从 html,body 继承 百分比高度了
    overflow:auto;   // 当高度超过 100% ;时产生滚动条
    width:100%;
    height:100%;     // 继承自 body
}
// wrapper 内部包裹的结构,就如上所示了,css样式也一样
12345678910111213141516

3,当无法用百分比获取高度时,也可通过js方式获得

javascript
//css样式同第一种, 只是 sticker 的 min-height 用css获取

<body>
    <div id="sticker">
        <div class="sticker-con">我是内容</div>
    </div>
    <div class="footer">我是脚</div>
</body>

var sticker = document.querySelector('#sticker');
var h = document.body.clientHeight;
sticker.style.minHeight = h - 44 + 'px';

//这种方式也可应对一些特殊情况,比如有头部导航栏的情况,可以灵活的处理 min-height:
1234567891011121314

4,强大的 flex 布局 flex-direction:column

 将wrapper容器, display:flex; flex-direction:column
 将sticker, flex:1; 占据除footer以外的剩余空间

html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">
    <title>sticker footer</title>
</head>
<style>
    html,body{
        width: 100%;
        height: 100%;
        background-color: #ccc;
        margin:0;
        padding: 0;

    }
    header{
        height:44px;
        width: 100%;
        text-align: center;
        line-height: 44px;
    }
    #wrapper{
        display: flex;
        flex-direction: column;
        width: 100%;
        /*height: 100%;*/
    }
    #sticker{
        background-color: red;
        flex: 1;
    }
    #sticker .sticker-con{
        padding-bottom: 40px;
    }
    .footer{
        background-color: green;
        height: 40px;
    }
</style>
<body>

    <header>我是头部</header>
    <div id="wrapper">
        <div id="sticker">
            <div class="sticker-con">我是内容</div>
        </div>
        <div class="footer">我是脚</div>
    </div>

</body>
<script>
    var wrapper = document.querySelector('#wrapper');
    var h = document.body.clientHeight;
    wrapper.style.minHeight = h - 44 + 'px';   // 减去头部导航栏高度
</script>
</html>
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
0

评论 (0)

取消