有時候,我們用CSS創建一個高度自適應佈局,如何保證頁腳(footer)在內容不超過一屏的情況下始終保持在佈局最下方是一個比較頭疼的事。我看過一些利用絕對定位的例子,但總感覺不是那麼完美,經過一下午的研究總結出一個利用負值外補丁的方法來實現這個效果的方法,兼容IE5.0+,Opera 8.5+,Firefox 1.5+。下面我們看步驟:
1、為了讓瀏覽器識別高度100%我們需要先給 html 和 body 加上一個高度值,同時清除所有元素的 margin 和 padding。順便提一下,經過我的測試,html 和 body 的 height: 100%; 等於整個瀏覽器窗口的總高度,無論內容是否超過一屏。而它們下一級子元素 height: 100%; 則等於第一屏的高度。如何,是不是有點不好理解?
* { margin: 0; padding: 0; } html, body { height: 100%; }2、因為上面提到的問題,所以為了讓佈局自適應高度,我們要加上 min-height: 100%;,雖然IE不支持這個屬性但是IE的 height: 100%; 有同樣的作用:
#wrapper { min-height: 100%; } * html #wrapper { height: 100%; } 這樣,一個最簡單的最小高度滿一屏的自適應佈局就做好了。為了便於查看,我加了一些寬度和背景色修飾,如下:
* { margin: 0; padding: 0; } html, body { height: 100%; text-align: center; font: 12px/1.4 Verdana, sans-serif; background: #f00; } #wrapper { width: 770px; min-height: 100%; background: #ccc; margin: auto; text-align: left; } * html #wrapper { height: 100%; }
[Ctrl+A 全部選擇 提示:你可先修改部分代碼,再按運行]
3、加上頁頭頁腳和內容部分,為了讓 footer 在最下方,我們當然要把 footer“請出”wrapper 之外。當然,這樣高度就超過一屏了,別急,後面有解決辦法。
#header { background: Green; height: 40px; } #sidebar { float: left; width: 200px; background: Gray; } #content-box { float: right; width: 570px; background: Olive; } #footer { height: 50px; background: Background; width:770px; margin: auto; }
[Ctrl+A 全部選擇 提示:你可先修改部分代碼,再按運行]
4、為了讓 footer 能夠剛好在最下方,我們可以給 footer 加一個等於自身高度的上方的負邊距強制把它向上推一個自身的高度,即 margin-top: -50px; 。但是這樣的話當內容超過一屏我們會看到內容會蓋在 footer 的上方,顯然這是失敗的。所以我們還要給 content-box 和 sidebar 加一個父級元素,設定它的下方內補丁等於 footer 的高度,強制把 content-box 和 sidebar 向上推一個 footer 的高度。同時,因為 content-box 和 sidebar 是浮動元素,所以我們還要讓它閉合浮動元素 。 這樣就比較完美了。
#out-content { padding-bottom: 50px; }
#out-content:after { clear: both; display: block;
font: 1px/0px serif; content: "."; height: 0; visibility: hidden; }
* html #out-content { height: 1%; }
#footer { height: 50px; background: Background; margin: -50px auto 0; }
[Ctrl+A 全部選擇 提示:你可先修改部分代碼,再按運行]
5、舉一反三,利用上面的原理我們還可以做一個一邊固定寬度一邊自適應寬度的液態彈性佈局,修改一些寬度然後給 #content-box 下面再套一層就可以實現了。
[Ctrl+A 全部選擇 提示:你可先修改部分代碼,再按運行]
其他問題,如果有人希望中間兩欄高度相同的話可以使用圖片欺騙法,見 創建各欄同高的多欄佈局。
OK,經過以上方法,這個佈局應該是比較完美了。
網頁寄存
