本文主要介绍一个Footer元素如何粘住底部,使其无论内容多或者少,Footer元素始终紧靠在浏览器的底部。我们知道,当内容足够多可以撑开底部到达浏览器的底部,如果内容不够多,不足以撑开元素到达浏览器的底部时,下面要讲的布局就是解决如何使元素粘住浏览器底部。需求看下图:·
方法一:全局增加一个负值下边距等于底部高度
有一个全局的元素包含除了底部之外的所有内容。它有一个负值下边距等于底部的高度。
1 <body> 2 <div class="wrapper"> 3 4 content 5 6 <div class="push"></div> 7 </div> 8 <footer class="footer"></footer> 9 </body>
CSS代码:
1 html, body { 2 height: 100%; 3 margin: 0; 4 } 5 .wrapper { 6 min-height: 100%; 7 8 /* Equal to height of footer */ 9 /* But also accounting for potential margin-bottom of last child */ 10 margin-bottom: -50px; 11 } 12 .footer, 13 .push { 14 height: 50px; 15 }
演示:
1 html, body { 2 height: 100%; 3 margin: 0; 4 } 5 .content { 6 min-height: 100%; 7 } 8 .content-inside { 9 padding: 20px; 10 padding-bottom: 50px; 11 } 12 .footer { 13 height: 50px; 14 margin-top: -50px; 15 }
演示:
方法三:使用calc()计算内容的高度
HTML :
1 <body> 2 <div class="content"> 3 content 4 </div> 5 <footer class="footer"></footer> 6 </body>
CSS:
1 .content { 2 min-height: calc(100vh - 70px); 3 } 4 .footer { 5 height: 50px; 6 }
演示:
给70px而不是50px是为了为了跟底部隔开20px,防止紧靠在一起。
方法四:使用flexbox
关于flexbox的教程,还请查看之前的一篇详细的教程
HTML:
1 <body> 2 <div class="content"> 3 content 4 </div> 5 <footer class="footer"></footer> 6 </body>
CSS:
1 html { 2 height: 100%; 3 } 4 body { 5 min-height: 100%; 6 display: flex; 7 flex-direction: column; 8 } 9 .content { 10 flex: 1; 11 }
演示:
方法五:使用grid布局
HTML:
1 <body> 2 <div class="content"> 3 content 4 </div> 5 <footer class="footer"></footer> 6 </body>
CSS:
1 html { 2 height: 100%; 3 } 4 body { 5 min-height: 100%; 6 display: grid; 7 grid-template-rows: 1fr auto; 8 } 9 .footer { 10 grid-row-start: 2; 11 grid-row-end: 3; 12 }
演示:
grid早于flexbox出现,但并没有flexbox被广泛支持,你可能在chrome Canary或者Firefox开发版上才可以看见效果