原博客地址:http://www.w3cplus.com/css/css-sticky-foot-at-bottom-of-the-pagejavascript
做爲一個Web的前端攻城師,在製做頁面效果時確定有碰到下面這種現象:當一個HTML頁面中含有較少的內容時,Web頁面的「footer」部分隨着飄上來,處在頁面的半腰中間,給視覺效果帶來極大的影響,讓你的頁面看上去很很差看,特別是如今寬屏愈來愈多,這種現象更是常見。那麼如何將Web頁面的「footer」部分永遠固定在頁面的底部呢?注意了這裏所說的是頁腳footer永遠固定在頁面的底部,而不是永遠固定在顯示器屏幕的底部,換句話說,就是當內容只有一點點時,Web頁面顯示在瀏覽器底部,當內容高度超過瀏覽器高度時,Web頁面的footer部分在頁面的底部,總而言之Web頁面的footer部分永遠在頁面的底部,換句說,Footer部分永遠沉底。以下圖所示:css
那麼今天主要和你們一塊兒學習如何將頁腳固定在頁面的底部?html
首先咱們來看第一種方法,這種方法是來自於Matthew James Taylor的《How to keep footers at the bottom of the page》。下面咱們就一塊兒來看看Matthew James Taylor介紹的方法。前端
HTML Markupjava
<div id="container"> <div id="header">Header Section</div> <div id="page" class="clearfix"> 頁面容容部分 </div> <div id="footer">Footer Section</div> </div>
其實咱們能夠在div#page增長所需的內容結構,以下所示:瀏覽器
<div id="container"> <div id="header">Header Section</div> <div id="page" class="clearfix"> <div id="left">Left Sidebar</div> <div id="content">Main content</div> <div id="right">Right sidebar</div> </div> <div id="footer">Footer Section</div> </div>
真正來講,實現這頁腳永遠固定在頁面的底部,咱們只須要四個div,其中div#container是一個容器,在這個容器之中,咱們包含了div#header(頭部),div#page(頁面主體部分,咱們能夠在這個div中增長更多的div結構,如上面的代碼所示),div#footer(頁腳部分)iphone
CSS Codeide
html,body { margin: 0; padding:0; height: 100%; } #container { min-height:100%; height: auto !important; height: 100%; /*IE6不識別min-height*/ position: relative; } #header { background: #ff0; padding: 10px; } #page { width: 960px; margin: 0 auto; padding-bottom: 60px;/*等於footer的高度*/ } #footer { position: absolute; bottom: 0; width: 100%; height: 60px;/*腳部的高度*/ background: #6cf; clear:both; } /*=======主體內容部分=======*/ #left { width: 220px; float: left; margin-right: 20px; background: lime; } #content { background: orange; float: left; width: 480px; margin-right: 20px; } #right{ background: green; float: right; width: 220px; }
下面咱們一塊兒來看看這種方法的實現原理:佈局
優勢:學習
結構簡單清晰,無需js和任何hack能實現各瀏覽器下的兼容,而且也適應iphone。
缺點:
不足之處就是須要給div#footer容器設置一個固定高度,這個高度能夠根據你的需求進行設置,其單位能夠是px也能夠是em,並且還須要將div#page容器的padding-bottom(或border-bottom-width)設置大小等於(或略大於)div#footer的高度,才能正常運行。
上面就是Matthew James Taylor介紹的如何實現頁腳永遠固定在頁面的底部,若是你們感興趣能夠閱讀原文,也能夠直接點擊這裏查看Demo。
這種方法是利用footer的margin-top負值來實現footer永遠固定在頁面的底部效果,下面咱們具體看是如何實現的。
HTML Markup
<div id="container"> <div id="page">Main Content</div> </div> <div id="footer">footer</div>
上面的代碼是最基本的HTML Code,同時你也發現了div#footer和div#container是同輩關係,不像方法一,div#footer在div#container容器內部。固然你也能夠根據你的須要把內容增長在div#container容器中,如:一個三列布局,並且還帶有header部分,請看下面的代碼:
<div id="container"> <div id="header">Header Section</div> <div id="page" class="clearfix"> <div id="left">Left sidebar</div> <div id="content">Main content</div> <div id="right">Right sidebar</div> </div> </div> <div id="footer">Footer section</div>
CSS Code
html, body { height: 100%; margin: 0; padding: 0; } #container { min-height: 100%; height: auto !important; height: 100%; } #page { padding-bottom: 60px;/*高度等於footer的高度*/ } #footer { position: relative; margin-top: -60px;/*等於footer的高度*/ height: 60px; clear:both; background: #c6f; } /*==========其餘div==========*/ #header { padding: 10px; background: lime; } #left { width: 18%; float: left; margin-right: 2%; background: orange; } #content{ width: 60%; float: left; margin-right: 2%; background: green; } #right { width: 18%; float: left; background: yellow; }
方法一和方法二有幾點是徹底相同的,好比說方法一中的1-3三點,在方法二中都同樣,換句話說,方法二中也須要把html,body高度設置爲100%,並重置margin,padding爲0;其二div#container也須要設置min-height:100%,並處理好IE6下的min-height兼容問題;其三也須要在div#page容器上設置一個padding-bottom或border-bottom-width值等於div#footer高度值(或略大於)。那麼兩種方法不一樣之處是:
優勢:
結構簡單清晰,無需js和任何hack能實現各瀏覽器下的兼容。
缺點:
要給footer設置固定值,所以沒法讓footer部分自適應高度。
你們要是對這種方法感興趣,你也能夠瀏覽一下《CSS Sticky Footer》和《Pure Css Sticky Footer》,或者直接點擊Demo查看其源代碼。
實如今頁腳永遠固定在頁面底部的方法有不少,可是有不少方法是須要使用一些hack或藉助javaScrip來實現,那麼接下來要說的方法三,僅僅使用了15行的樣式代碼和一個簡單明瞭的HTML結構實現了效果,而且兼容性強,別的很少說,先看代碼。
<div id="container"> <div id="page">Your Website content here.</div> <div class="push"><!-- not have any content --></div> </div> <div id="footer">Footer Section</div>
上面是最基本的HTML Markup,固然你也能夠加上新的內容,不過有一點須要注意若是你在div#container和div#footer容器外增長內容的話,新加進徠的元素須要進行絕對定位。如如說你能夠在div#container容器中加上你頁面所需的元素
HTML Code
<div id="container"> <div id="header">Header Section</div> <div id="page" class="clearfix"> <div id="left">Left sidebar</div> <div id="content">Main Content</div> <div id="right">Right Content</div> </div> <div class="push"><!-- not put anything here --></div> </div> <div id="footer">Footer Section</div>
CSS Code
html,
body{
height: 100%;
margin:0;
padding:0;
}
#container {
min-height: 100%;
height: auto !important;
height: 100%;
margin: 0 auto -60px;/*margin-bottom的負值等於footer高度*/
}
.push,
#footer {
height: 60px;
clear:both;
}
/*==========其餘div效果==========*/
#header {
padding: 10px;
background: lime;
}
#left {
width: 18%;
float: left;
margin-right: 2%;
background: orange;
}
#content{
width: 60%;
float: left;
margin-right: 2%;
background: green;
}
#right {
width: 18%;
float: left;
background: yellow;
}
#footer {
background: #f6c;
}
跟前面兩種方法相比較,方法三更相似於方法二,他們都將div#footer放在div#container容器以外,並且這個方法在div#container容器中還增長了一個div.push用來把div#footer推下去,下面咱們就一塊兒看看這種方法是怎麼實現頁腳永遠固定在頁面底部的。
優勢:
簡單明瞭,易於理解,兼容全部瀏覽器。
缺點:
較以前面的兩種方法,多使用了一個div.push容器,一樣此方法限制了footer部分高度,沒法達到自適應高度效果。
若是你們對方法三想了解更多能夠點擊這裏或者直接從DEMO中下載代碼本身研究一下。
前面三種方法咱們都不須要任何javaScript或jQuery的幫助,讓咱們實現了頁腳永遠固定在頁面底部的效果,前面三種方法雖然沒有使用jQuery等幫助,但咱們都額外增長了HTML標籤來實現效果。若是你省略了這些HTML標籤,再要實現效果就比較困難了,那麼此時使用jQuery或javaScript方法來幫助實現是一種很好的辦法,下面咱們就一塊兒來看第四種方法,經過jQuery來實現頁腳永遠固定在頁面底部的效果。
HTML Markup
<div id="header">Header Section</div> <div id="page" class="clearfix"> <div id="left">Left sidebar</div> <div id="content">Main Content</div> <div id="right">Right Content</div> </div> <div id="footer">Footer Section</div>
這裏咱們沒有增長沒用的HTML標籤,此時你也能夠隨時在body中增長內容,只要確保div#footer是在body最後面。
. . <div id="footer">Footer Section</div>
CSS Code
*{margin: 0;padding:0;} .clearfix:before, .clearfix:after { content:""; display:table; } .clearfix:after { clear:both; } .clearfix { zoom:1; /* IE <8 */ } #footer{ height: 60px; background: #fc6; width: 100%; } /*==========其餘div==========*/ #header { padding: 10px; background: lime; } #left { width: 18%; float: left; margin-right: 2%; background: orange; } #content{ width: 60%; float: left; margin-right: 2%; background: green; } #right { width: 18%; float: left; background: yellow; }
這個方法不像前面三種方法靠CSS來實現效果,這裏只須要按正常的樣式需求寫樣式,不過有一點須要特別注意在html,body中不能夠設置高度height爲100%,不然此方法沒法正常運行,若是你在div#footer中設置了一個高度並把寬度設置爲100%將更是萬無一失了。
jQuery Code
<script type="text/javascript"> // Window load event used just in case window height is dependant upon images $(window).bind("load", function() { var footerHeight = 0, footerTop = 0, $footer = $("#footer"); positionFooter(); //定義positionFooter function function positionFooter() { //取到div#footer高度 footerHeight = $footer.height(); //div#footer離屏幕頂部的距離 footerTop = ($(window).scrollTop()+$(window).height()-footerHeight)+"px"; /* DEBUGGING STUFF console.log("Document height: ", $(document.body).height()); console.log("Window height: ", $(window).height()); console.log("Window scroll: ", $(window).scrollTop()); console.log("Footer height: ", footerHeight); console.log("Footer top: ", footerTop); console.log("-----------") */ //若是頁面內容高度小於屏幕高度,div#footer將絕對定位到屏幕底部,不然div#footer保留它的正常靜態定位 if ( ($(document.body).height()+footerHeight) < $(window).height()) { $footer.css({ position: "absolute" }).stop().animate({ top: footerTop }); } else { $footer.css({ position: "static" }); } } $(window).scroll(positionFooter).resize(positionFooter); }); </script>
使用上面的jQuery代碼,能夠輕鬆的幫咱們實現頁腳永遠固定在頁面底部,使用這種方法有幾個地方須要注意
優勢:
結構簡單,無需外加無用標籤,兼容全部瀏覽器,不用另外寫特別樣式。頁腳能夠不固定高度。
缺點:
在不支持js的瀏覽器中沒法正常顯示,另外每次改變瀏覽器大小會閃動一下。(我的不推薦該方法)
今天主要和你們一塊兒探討和學習了四種方法,用來實現Web頁面腳部永遠固定在頁面的底,這裏在着得說清楚一下,是頁腳永遠固定在頁面的底部,而不是永遠固定在瀏覽器窗口的底部,換句話說,就說當頁面主內容沒有顯示屏幕高時,頁腳固定在顯示器屏幕的底部,但當頁面內容超過顯示器屏幕高度時,頁腳又會跟隨內容往下沉,但頁腳都永遠固定在頁的底部。前面三種都是純CSS實現,最後一種採用的是jQuery方法實現,四種方法各有各的利弊,你們使用時能夠根據本身的需求來定奪,但願這篇文章能給你們帶來必定的幫助。若是你們有更好的方法,但願能和我一塊兒分享,若是您願意,能夠直接給我留言,我會一直和您在一塊兒,一塊兒學習和討論這方面的知識。
如需轉載煩請註明出處:W3CPLUS