当内容足够多可以撑开底部到达浏览器的底部,如果内容不够多,不足以撑开元素到达浏览器的底部时,就要解决如何使元素粘住浏览器底部。让一个Footer元素如何粘住底部,使其无论内容多或者少,Footer元素始终紧靠在浏览器的底部。# }# h* v* P- }5 T
方法一:全局增加一个负值下边距等于底部高度& ?2 O5 Q2 r+ u: y' K1 _, h5 q
有一个全局的元素包含除了底部之外的所有内容。它有一个负值下边距等于底部的高度。
7 _- O! f* t! x. L& ihtml代码:
5 Y8 n. ]6 K; j8 m9 [
- <body>
- <div class="wrapper">
- content
- <div class="push"></div>
- </div>
- <footer class="footer"></footer>
- </body>
css代码:% `+ C: w1 c, x. e: F+ r( V
- 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元素是智能的,它并没有占用到底部的利用,而是通过全局加了一个负边距来填充。
$ S+ a6 |4 z* O6 G方法二:底部元素增加负值上边距& n% f: N& h) U
虽然这个代码减少了一个.push的元素,但还是需要增加多一层的元素包裹内容,并给他一个内边距使其等于底部的高度,防止内容覆盖到底部的内容。
$ R* V- B0 \! _% jHTML代码:
1 G0 g% E6 z4 F# @' ] F& h- <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+ t7 C2 T. s# D7 N5 R" t
HTML:9 s. J, e$ h* T* o
! _, T: b! z8 ^) t& ~+ ?- <body>
- <div class="content">
- content
- </div>
- <footer class="footer"></footer>
- </body>
CSS:7 h1 z/ d P2 x# v
- .content {
- min-height: calc(100vh - 70px);
- }
- .footer {
- height: 50px;
- }
给70px而不是50px是为了为了跟底部隔开20px,防止紧靠在一起。2 g1 @. K' w3 A* r8 l
方法四:使用flexbox
7 K) n6 v2 l0 F1 d6 ?5 c# h. pHTML:( Q! I% l3 J O
# ]! K$ o* Z6 f9 ^# Y- <body>
- <div class="content">
- content
- </div>
- <footer class="footer"></footer>
- </body>
CSS:. r _ X$ j. m. {
- html {
- height: 100%;
- }
- body {
- min-height: 100%;
- display: flex;
- flex-direction: column;
- }
- .content {
- flex: 1;
- }
方法五:使用grid布局9 r* n7 }1 Q; s5 q
HTML:
5 w( Z" \! G1 f
% L' z* K7 f9 e- <body>
- <div class="content">
- content
- </div>
- <footer class="footer"></footer>
- </body>
CSS:
% Y' w* q- I# }1 x# U- 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开发版上才可以看见效果。 |