1. 程式人生 > >css固定底部的五種方法

css固定底部的五種方法

本文主要介紹一個Footer元素如何粘住底部,使其無論內容多或者少,Footer元素始終緊靠在瀏覽器的底部。我們知道,當內容足夠多可以撐開底部到達瀏覽器的底部,如果內容不夠多,不足以撐開元素到達瀏覽器的底部時,下面要講的佈局就是解決如何使元素粘住瀏覽器底部。需求看下圖:

方法一:全域性增加一個負值下邊距等於底部高度

有一個全域性的元素包含除了底部之外的所有內容。它有一個負值下邊距等於底部的高度,就像這個演示連結

HTML程式碼

<body>
  <div class="wrapper">
      content
    <div class="push"></div>
  </div>
  <footer class="footer"></footer>
</body>

CSS程式碼:

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元素是智慧的,它並沒有佔用到底部的利用,而是通過全域性加了一個負邊距來填充。

方法二:底部元素增加負值上邊距

雖然這個程式碼減少了一個.push的元素,但還是需要增加多一層的元素包裹內容,並給他一個內邊距使其等於底部的高度,防止內容覆蓋到底部的內容。

HTML程式碼:·

<body>
  <div class="content">
    <div class="content-inside">
      content
    </div>
  </div>
  <footer class="footer"></footer>
</body>

CSS

//code from http://caibaojian.com/css-5-ways-sticky-footer.html
html, body {
  height: 100%;
  margin: 0;
}
.content {
  min-height: 100%;
}
.content-inside {
  padding: 20px;
  padding-bottom: 50px;
}
.footer {
  height: 50px;
  margin-top: -50px;
}

方法三:使用calc()計算內容的高度

HTML

<body>
  <div class="content">
    content
  </div>
  <footer class="footer"></footer>
</body>

CSS:·

//code from http://caibaojian.com/css-5-ways-sticky-footer.html
.content {
  min-height: calc(100vh - 70px);
}
.footer {
  height: 50px;
}
//給70px而不是50px是為了為了跟底部隔開20px,防止緊靠在一起。

關於flexbox的教程,還請檢視之前的一篇詳細的教程

HTML:·

<body>
  <div class="content">
    content
  </div>
  <footer class="footer"></footer>
</body>

CSS:

//code from http://caibaojian.com/css-5-ways-sticky-footer.html
html {
  height: 100%;
}
body {
  min-height: 100%;
  display: flex;
  flex-direction: column;
}
.content {
  flex: 1;
}

方法五:使用grid佈局

HTML:

<body>
  <div class="content">
    content
  </div>
  <footer class="footer"></footer>
</body>

CSS:·

//code from http://caibaojian.com/css-5-ways-sticky-footer.html
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開發版上才可以看見效果

譯者注:本文並沒有全部參照原文來翻譯,更多是給出一個大體的思路,歡迎大家進入英文檢視原連結。翻譯得不好,還請見諒。

文章目錄

CSS,CSS3,flexbox 推薦文章

  • 以前由於考慮到IE6等瀏覽器的相容屬性,常常對於高階的css選擇符不感興趣,最近開始,發現前端方面的IE6其實已經逐漸的消失了,學會用css3的高階選擇器,可以起到事半功倍的效果,所以以後將會加強這方面的學習和積累一些經驗,今天重溫以前被人 ...

  • 最近看了社群上的一些關於flexbox的很多文章,感覺都沒有我這篇文章實在,最重要的相容性問題好多人都沒有提出解決方案。另外本人還廢寢忘食的翻譯了國外的《CSS3彈性盒模型flexbox完整教程》和《CSS3彈性盒模型flexbox佈局例項》,這麼好的文章沒有人來發現,實在是遺憾。

  • Flexbox佈局詳解,本文詳細的介紹了Flexbox彈性佈局的各個屬性,是新手學習Flexbox的一個較為完整的CSS教程,各個屬性不僅有詳細的使用說明,還給出了演示例子。

  • 我認為當flexbox支援所有的瀏覽器時,由於它比浮動佈局更加的簡單和強大性,它將徹底的改變我們的CSS佈局方式。例如我們可以很容易的寫出一個元素在未知比例下的居中對齊佈局。當然css3新增的其它屬性,例如grid也可以給前端開發帶來更多的 ...

  • CSS等比例劃分,在CSS佈局中是比較重要的,下面分享幾種常用方法和探討一下相容性。 一:浮動佈局+百分比 emmet html程式碼:ul.float-ul>li*5>.con>h3{等分標題}+p{等分內容等分內容} . ...