在寫前端頁面時,常常會遇到這種狀況:有一個具備塊級樣式的頁腳,當頁面內容足夠長時它一切正常;有的時候,因爲頁面長度不夠,頁面底部的頁腳會很尷尬的跑上來;頁腳不能像咱們指望中那樣「緊貼」在視口的最底部,而是緊跟在內容的下方。css
那麼怎樣作到內容多時頁腳在內容下方,內容少時頁腳「緊貼」在視口底部?我總結了四種方法。html
首先我先寫一個簡單的頁面結構,以下:前端
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>緊貼底部的頁腳</title> </head> <body> <div class="wrapper"> <header> <span>Header</span> </header> <main> <p>我是內容</p> </main> </div> <footer> <span>Fotter</span> </footer> </body> </html>
再頁面加點公共樣式:app
*{ padding:0; margin: 0; } header{ line-height: 80px; } header,footer{ background-color: #ccc; text-align: center; } main{ text-align: center; font-size: 30px; }
接下來咱們用四種不一樣的方法來實現如何讓頁腳緊貼底部。wordpress
/* footer的每一級父元素都爲100%高 */ html,body { height: 100%; width: 100%; } /* 這裏將頁面內容最小高度設爲100%;撐滿屏幕, 而後使用margin-bottom負值把頁腳吸上來, 最後設置底部內邊距用來填充內容過多時被遮擋的頁腳。 */ .wrapper{ height: auto !important; min-height: 100%; height: 100%; margin-bottom: -80px; padding-bottom: 80px; box-sizing: border-box; } footer{ height: 80px; }
方法二和方法一比較相似,只是用僞元素取代了內邊距。代碼以下:函數
html,body { height: 100%; width: 100%; } .wrapper{ height: auto !important; min-height: 100%; height: 100%; margin-bottom: -80px; } /* 這裏用僞元素取代了方法一中.wrapper的內邊距 */ .wrapper::after{ content: ""; display: block; height: 80px; } footer{ height: 80px; }
方法三藉助視口相關的長度單位以及calc()函數。這兩個東西都只能兼容到IE9。佈局
.wrapper{ min-height:calc(100vh - 80px); } footer{ height: 80px; }
前三種方法都有必定的侷限性,都要給頁腳設置固定的高度,不夠靈活。有沒有更加靈活的方法呢?
固然有,那就是咱們方法四了。flex
方法四用到了CSS3
中的佈局神器Flexbox。ui
body { display: flex; flex-flow: column; min-height: 100vh; } .wrapper { flex: 1; }
這樣就能夠了!咱們只須要四行簡單的代碼,就完美實現了緊貼底部的頁腳。Flexbox
是否是至關霸氣?Flexbox
兼容性不是很好(萬惡的IE),但在移動端仍是不錯的。能夠放心使用。spa
上面是我總結的四種方法,若是還有什麼更好的方法,歡迎共同探討!
參考資料:
CSS 總在底部的頁腳
CSS揭祕