Sticky Footer
Sticky Footer 是一种网页效果:如果内容不够长时,页脚固定在浏览器底部;如果内容足够长,页脚固定在页面的最底部。
1. 使用absolute
HTML1
2
3
4
5
6<body>
    <div class="wrapper">
        <div class="content">
        <div class="footer">
    </div>
</body>
CSS1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16body {
    height: 100%;
    margin: 0;
}
.wrapper {
    position: relative;
    min-height: 100%;
}
.content {
    padding-bottom: 50px;
}
.footer {
    position: absolute;
    bottom: 0;
    height: 50px;
}
2. 使用margin-bottom 负值
HTML1
2
3
4
5
6
7<body>
    <div class="wrapper">
        content
        <div class="push"></div>
    </div>
    <footer class="footer"></footer>
</body>
CSS1
2
3
4
5
6
7
8
9
10
11
12
13
14
15html, body {
    height: 100%;
    margin: 0;
}
.wrapper {
    min-height: 100%;
    /* Equal to height of footer */
    /* But also accounting for potential margin-bottom of last child */
    margin-bottom: -50px;
}
.footer,
.push {
    height: 50px;
}
3. 使用calc()
HTML1
2
3
4
5
6<body>
    <div class="content">
        content
    </div>
    <footer class="footer"></footer>
</body>
CSS1
2
3
4
5
6.content {
    min-height: calc(100vh - 50px);
}
.footer {
    height: 50px;
}
假如content中的最后一个元素有 margin-bottom 属性,这将导致 content 的高增加,这是需要调整calc(100vh - footerHeight - marginBottom)
4. 使用 flex 布局
HTML1
2
3
4
5
6<body>
    <div class="content">
        content
    </div>
    <footer class="footer"></footer>
</body>
CSS1
2
3
4
5
6
7
8
9
10
11
12
13html, body {
    height: 100%;
}
body {
    display: flex;
    flex-direction: column;
}
.content {
    flex: 1 0 auto;
}
.footer {
    flex-shrink: 0;
}
