CSS+DIV讓頁尾始終保持在頁面底部
來源:David`s Blog http://www.DavidQiu.com/
文章連結:http://blog.davidqiu.com/post/2013-06-17/40051753968
相關參考:
http://www.cnblogs.com/chenyuming507950417/p/4003651.html
http://www.cnblogs.com/ahjesus/archive/2011/11/26/2263986.html
下面是David部落格的原文
博主研究了兩天多,終於利用 CSS+DIV 讓頁尾始終在頁面的最底部了 T T
1、利用 bottom 屬性?
在實踐之前,很容易聯想到用 CSS 裡面的 bottom 屬性讓頁尾在最下面,可是這個是行不通的。如果使用瞭如下方法:
footer { bottom: 0px; }
我可以很誠實地告訴你,寫了根沒寫壓根就沒區別。因為版面預設用的是 “position: relative;”,這會讓版面從上至下地排布,而不能夠獨立地讓 footer 始終在頁面的最底部。
position: fixed?
那麼自然就會想說,那如果用“position: fixed;”屬性呢?
footer { position: fixed; bottom: 0px; }
這個也是不行的,因為“fixed”會讓 div 相對瀏覽器,而非頁面。那麼出現的情況將是無論怎麼移動頁面,始終都有一個 footer 在瀏覽器的底部,不甚美觀。
position: absolute?
那麼又想了,如果用“position: absolute”呢?
footer { position: absolute; bottom: 0px; }
這個也是不行的。用了這個屬性,會有一種初始化的效果,讓 footer 一開始就在瀏覽器的最底部,然後你拉動頁面,它不會落到頁面最低部,而是上去了。實際上就是與其他網頁內容產生了重疊。這個也是絕對不允許的。
2、解決方法
在解決的時候,我查了相當多的資料。如果用純 CSS 的話,似乎都指向一種叫 Sticky Footer的方法。不過網上的基本都是抄來抄去,只有程式碼,沒有解釋什麼的,我就不吐嘈了。
原理解析
這種方法的原理很簡單,用到了 2 個屬性:min-height 和 margin。
其中,min-height 都有個很奇特的屬性值:100%。這個屬性值是指當前瀏覽器視窗的高度,實際上就是能顯示的最大高度(一個螢幕的高度)了。那麼自然可以聯想到,如果將內 容部分設成“min-height: 100%”,就能夠將內容部分佔有一個螢幕的高度,那麼頁尾起碼會在螢幕的外面。只要稍加改進,便能融入 Header、Content、Footer 這三個部分,並使得 Footer 起碼在螢幕的最底部,而且當內容長度增加時,會在頁面的最後面,而不至於遮擋內容。
可是要注意的是,“100%”的這個屬性對於“height”或者“min-height”來說有點奇怪,它在使用之前貌似要對“100%”的定義進行初始化。而我們知道,“html”這個結點是沾滿一個螢幕的,那麼就要先寫這樣的內容:
body, html { height: 100%; }
一個值得關注的是,如果我們用的是 ASP.NET 框架,因為它是基於 form 的,所以僅僅設定 body 和 html 還不夠,還要設定 form 的相應屬性:
form { height: 100%; }
而為了頁首與頁尾緊貼瀏覽器邊框,我們還要設定相關的 margin 與 padding 為 0,以防止空隙的出現。而為了簡單起見,就對全域性所有的容器都設定這樣的一個預設值吧。
* { margin: 0; padding: 0; }
好了,到了這裡就可以放心地去用“min-height: 100%;”了。
那麼怎麼解決在內容很少的時候,頁尾能夠顯示在瀏覽器的最底部,而不是什麼情況都被置於一個螢幕的高度之外呢?
可能看到上面的第 2 個我說的要使用的屬性,大家就大概明白了。對,就是用 margin 這個屬性。不過要宣告的一點是,下面的方法用到了一些不太符合規範的方法,就是加多了一個空 div 用作顯示格式定製,而其本身不起任何作用。
先看看網頁的 html 文字來了解一下框架吧:
<div class="Wrapper">
<div class="Header"></div>
<div class="Content"></div>
<div class="FooterPush"></div>
</div>
<div class="Footer"></div>
可見,頁首與內容都被一個叫“Wrapper”的容器包著,然後在他們後面有個叫“FooterPush”的東西,其實這個就是我之前說的僅用於控制顯示格式的空 div 了。然後,Footer 是置於所有內容之外的。
然後我們這樣思考:如果 FooterPush 的高度與 Footer 相同,然後 Footer 有一個“margin-top”的屬性,它的值是 Footer 的高度的負值,即例如 Footer 的高度是 120px,然後:
.Wrapper .FooterPush { height: 120px; } .Footer { margin-top: -120px; height: 120px; }
那麼發生的情況將會非常神奇,實際上就是 Footer 剛好就覆蓋在 FooterPush 的上面了。那麼這個時候,我們只要將 Wrapper 的高度設為“100%”,這樣所有的東西就至少能夠在一個螢幕內現實完畢了。
這樣,就能夠達到當內容少時,Footer 最高能夠在一個螢幕的最底部顯示;而當內容比較長的時候,Footer 能夠很乖巧地在所有內容的後面,而不至於遮擋內容。
OK,大工告成了吧!那我就貼個完整些的程式碼吧。
完整程式碼
Html:
<body> <form> <!-- 如果用的是 Asp.Net 就可能會有這個結點 --> <div class="Wrapper"> <div class="Header"></div> <div class="Content"></div> <div class="FooterPush"></div> </div> <div class="Footer"></div> </form> </body>
css
* { margin: 0; padding: 0; } html, body, form { height: 100%; } .Wrapper { min-height: 100%; } .Wrapper .FooterPush { height: 120px; /* Footer 的高度 */ } .Footer { clear: both; /* 清除浮動元素格式 */ position: relative; margin-top: -120px; /* Footer 高度的負值 */ height: 120px; }
by: David Qiu.
再次對原文作者表示感謝。在此收藏,只是當做筆記。
相關文章
- CSS+DIV讓頁尾始終底部CSS
- mui 子頁面切換父頁面底部導航UI
- 從頁面底部回到頂部+動畫效果 & 翻頁後從按鈕處回到頁面頂部動畫
- 禁止蒙層底部頁面跟隨滾動
- 如何讓兩個頁面跳轉但是不重新整理頁面。返回時前一個頁面開始選擇的資料還在
- 如何讓頁面跳出框架在一個新頁面開啟框架
- JS 網頁列印 頁邊距 頁首頁尾JS網頁
- Sticky footers,元素一直在頁面底部
- selenium 搜尋不到頁面最底部的按鈕
- 頁邊距和頁首頁尾的設定
- 頁面沒有出現滾動條時底部懸浮顯示到最底部
- Flutter 實現底部擴散模糊動畫(二)頁面互動Flutter動畫
- Flutter 實現底部擴散模糊動畫(一)跳轉頁面Flutter動畫
- 高效能web建站規則(將js放在頁面底部)WebJS
- Java 在PDF中插入頁首、頁尾Java
- wkhtmltopdf 生成帶頁首頁尾的pdfHTML
- Excel2007裡面插入頁首和頁尾超簡略Excel
- 讓一個元素在網頁上跟隨網頁視窗大小變化始終保持上下左右居中網頁
- 【LaTeX入門】06、設定頁芯、頁邊距、頁首、頁尾
- Zoovu:產品詳情頁面最終指南
- js頁面跳轉的問題(跳轉到父頁面、最外層頁面、本頁面)JS
- word首頁不顯示頁碼怎麼設定 如何讓頁碼從第二頁開始顯示
- 定製論文頁首頁尾設定需求
- 個性化設定Excel表格頁首頁尾Excel
- 如何設定個性化Excel頁首頁尾Excel
- 部落格園裝飾——(二)滾動到頁面頂部或底部
- Excel2010設定奇偶頁頁首頁尾不同Excel
- router-view子頁面呼叫父頁面方法更新父頁面引數View
- VUE 單頁面應用 修改頁面titleVue
- win10系統下word文件如何新增頁首頁尾_win10 word文件頁首頁尾怎麼設定Win10
- web頁面Web
- css將元素固定於網頁底部CSS網頁
- 讓頁面變得更快一點-HTML解析原理HTML
- 單頁面應用和多頁面應用
- WebForm 頁面ajax 請求後臺頁面 方法WebORM
- win10系統下如何在word任意頁尾設定頁碼_win10在word中設定頁尾頁碼的方法Win10
- js進入詳情頁再返回到上一個列表頁面時怎麼能讓原來頁面資料不變JS
- Laravel 自定義 Markdown 電子郵件頁首和頁尾Laravel