当内容足够多可以撑开底部到达浏览器的底部,如果内容不够多,不足以撑开元素到达浏览器的底部时,就要解决如何使元素粘住浏览器底部。让一个Footer元素如何粘住底部,使其无论内容多或者少,Footer元素始终紧靠在浏览器的底部。
% o' |, L6 I" z# a 方法一:全局增加一个负值下边距等于底部高度 2 Q4 k! f% d' P( I
有一个全局的元素包含除了底部之外的所有内容。它有一个负值下边距等于底部的高度。 & S) }; G) Q( u
html代码:3 Q8 @, J8 t' Q+ v
<body>
<div class="wrapper">
content
<div class="push"></div>
</div>
<footer class="footer"></footer>
</body> css代码:0 o$ s( {4 ]. T! Q/ K/ x1 u
html, 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;
} 这个代码需要一个额外的元素.push等于底部的高度,来防止内容覆盖到底部的元素。这个push元素是智能的,它并没有占用到底部的利用,而是通过全局加了一个负边距来填充。3 p2 J5 T, O- ~( q0 H2 h" Z. X
方法二:底部元素增加负值上边距
/ \/ s5 d; e& Z/ w; v 虽然这个代码减少了一个.push的元素,但还是需要增加多一层的元素包裹内容,并给他一个内边距使其等于底部的高度,防止内容覆盖到底部的内容。
) S8 D: d) t2 Q+ c$ Z8 S HTML代码:
* _( U; m5 {; Q/ s N <body>
<div class="content">
<div class="content-inside">
content
</div>
</div>
<footer class="footer"></footer>
</body> CSS:html, body {
height: 100%;
margin: 0;
}
.content {
min-height: 100%;
}
.content-inside {
padding: 20px;
padding-bottom: 50px;
}
.footer {
height: 50px;
margin-top: -50px;
}方法三:使用calc()计算内容的高度
' i. D9 Q, F2 s% `& w" p* w& b( ` HTML:
x' Y+ h' ?4 {% _- I2 |
$ {" w7 E4 E! Q# Q* E <body>
<div class="content">
content
</div>
<footer class="footer"></footer>
</body> CSS:
( Y0 J1 F2 K X .content {
min-height: calc(100vh - 70px);
}
.footer {
height: 50px;
} 给70px而不是50px是为了为了跟底部隔开20px,防止紧靠在一起。
/ P8 d& ~! H7 h6 u# S7 L! D3 W# ^' H 方法四:使用flexbox 3 l! |) w: m: x4 d2 g8 ]
HTML:9 {% `$ t* p' v
) R5 h# I$ f. Q c* e9 z
<body>
<div class="content">
content
</div>
<footer class="footer"></footer>
</body> CSS:
1 |$ s c1 A; e html {
height: 100%;
}
body {
min-height: 100%;
display: flex;
flex-direction: column;
}
.content {
flex: 1;
}方法五:使用grid布局 0 ~7 Q. u8 |: ~0 X* W
HTML:
) T3 `; N. R( p" j # l, l* u+ W/ G% K
<body>
<div class="content">
content
</div>
<footer class="footer"></footer>
</body> CSS:
" b# ^) E8 u- J% n1 w; p z html {
height: 100%;
}
body {
min-height: 100%;
display: grid;
grid-template-rows: 1fr auto;
}
.footer {
grid-row-start: 2;
grid-row-end: 3;
} grid早于flexbox出现,但并没有flexbox被广泛支持,你可能在chrome Canary或者Firefox开发版上才可以看见效果。