[原文連接 - http://t.cn/RJ3nmhV )css
頁腳置底(Sticky footer)就是讓網頁的footer部分始終在瀏覽器窗口的底部。html
當網頁內容足夠長以致超出瀏覽器可視高度時,頁腳會隨着內容被推到網頁底部;
但若是網頁內容不夠長,置底的頁腳就會保持在瀏覽器窗口底部。瀏覽器
margin-bottom
設爲負數<div class="wrapper"> <!-- content --> <div class="push"></div> </div> <div class="footer">footer</div>
html, body { margin: 0; padding: 0; height: 100%; } .wrapper { min-height: 100%; margin-bottom: -50px; /* 等於footer的高度 */ } .footer, .push { height: 50px; }
這個方法須要容器裏有額外的佔位元素(div.push
)。app
div.wrapper
的margin-bottom
須要和div.footer
的-height
值同樣,注意是負height
。ide
margin-top
設爲負數給內容外增長父元素,並讓內容部分的padding-bottom
與頁腳的height
相等。佈局
<div class="content"> <div class="content-inside"> <!-- content --> </div> </div> <div class="footer">footer</div>
html, body { margin: 0; padding: 0; height: 100%; } .content { min-height: 100%; } .content-inside { padding: 20px; padding-bottom: 50px; } .footer { height: 50px; margin-top: -50px; }
calc()
設置內容高度<div class="content"> <!-- content --> </div> <div class="footer">footer</div>
.content { min-height: calc(100vh - 70px); } .footer { height: 50px; }
這裏假設div.content
和div.footer
之間有20px的間距,因此70px=50px+20pxflex
以上三種方法的footer高度都是固定的,若是footer的內容太多則可能會破壞佈局。flexbox
<div class="content"> <!-- content --> </div> <div class="footer">footer</div>
html { height: 100%; } body { min-height: 100%; display: flex; flex-direction: column; } .content { flex: 1; }
<div class="content"> <!-- content --> </div> <div class="footer">footer</div>
html { height: 100%; } body { min-height: 100%; display: grid; grid-template-rows: 1fr auto; } .footer { grid-row-start: 2; grid-row-end: 3; }