1. 程式人生 > >一個將 footer 保持在底部的最好方法

一個將 footer 保持在底部的最好方法

http://www.jianshu.com/p/4896e6936ce3

解決該問題的最好方法是採用 flexbox——CSS3提供的一種先進佈局模型,旨在建立具有適應性的佈局。如果你對 flexbox 還不怎麼熟悉,文章最後有一些擴充套件閱讀連結,可以幫助你瞭解 flexbox。

我們的演示頁面應該具備 Header、主體內容區域和 Footer,下面是該頁面的 HTML

<body>
    <header>...</header>
    <section class="main-content">...</section>
    <footer
>
...</footer> </body>

為了啟用 flex模式,我們將 body 的 display 屬性設定為 flex, 然後將方向屬性設定為列, (預設是行,也就是橫向佈局)。同時,將html 和 body 元素的高度設定為100%,使其充滿整個螢幕。

html{
    height: 100%;
}

body{
    display: flex;
    flex-direction: column;
    height: 100%;
}

現在,我們需要調整各個區域佔用的頁面空間,我們將通過flex 屬性來達到這一目的,該屬性實際包含了三個屬性,分別是:

  • flex-grow:元素在同一容器中對可分配空間的分配比率,及擴充套件比率
  • flex-shrink:如果空間不足,元素的收縮比率
  • flex-basis:元素的伸縮基準值

我們希望 header 和footer 只佔用他們應該佔用的空間,將剩餘的空間全部交給主體內容區域

header{
   /* 我們希望 header 採用固定的高度,只佔用必須的空間 */
   /* 0 flex-grow, 0 flex-shrink, auto flex-basis */
   flex: 0 0 auto;
}

.main-content{
   /* 將 flex-grow 設定為1,該元素會佔用全部可使用空間 
      而其他元素該屬性值為0,因此不會得到多餘的空間*/
   /* 1 flex-grow, 0 flex-shrink, auto flex-basis */
flex: 1 0 auto; } footer{ /* 和 header 一樣,footer 也採用固定高度*/ /* 0 flex-grow, 0 flex-shrink, auto flex-basis */ flex: 0 0 auto; }