在網(wǎng)頁設(shè)計(jì)中,Sticky footers設(shè)計(jì)是最古老和最常見的效果之一,大多數(shù)人都曾經(jīng)經(jīng)歷過。它可以概括如下:如果頁面內(nèi)容不夠長的時候,頁腳塊粘貼在視窗底部;如果內(nèi)容足夠長時,頁腳塊會被內(nèi)容向下推送。這種效果不僅是無處不在,很受歡迎,而且實(shí)現(xiàn)起來看上去也非常容易。但實(shí)際上實(shí)現(xiàn)起來要比預(yù)期花的時間更多。此外,在CSS2.1中的解決方案中幾乎都要給頁腳設(shè)置一個固定高度。這是很脆弱的,很少是可行的。實(shí)際上實(shí)現(xiàn)這個效果過于復(fù)雜,而且還需要增加特定的標(biāo)記和一些Hack手段。在CSS2.1中受到一些限制,但使用現(xiàn)代CSS,我們能把這個效果做得更好,那要如何做呢?
1、嵌套層級不深,可直接繼承自 body width:100%; height:100%;
// html <body> <div id="sticker"> <div class="sticker-con">我是內(nèi)容</div> </div> <div class="footer">我是腳</div> </body>
// css html,body{ width:100%; height:100%; } #sticker{ width:100%; min-height:100%; } .sticker-con{ padding-bottom:40px; // 40px 為 footer 本身高度 } .footer{ margin-top:-40px; // 40px 為 footer 本身高度 }
2、嵌套層級很深,無法直接從上級繼承 百分比高度的
第一種方法:給需要的 sticker-footer 創(chuàng)建一個 wrapper
<body> <div id="wrapper"> <div id="sticker"> <div class="sticker-con">我是內(nèi)容</div> </div> <div class="footer">我是腳</div> </div> </body>
.wrapper{ position:fixed; // 這樣 wrapper 就可以直接從 html,body 繼承 百分比高度了 overflow:auto; // 當(dāng)高度超過 100% ;時產(chǎn)生滾動條 width:100%; height:100%; // 繼承自 body } // wrapper 內(nèi)部包裹的結(jié)構(gòu),就如上所示了,css樣式也一樣
3. 當(dāng)無法用百分比獲取高度時,也可通過js方式獲得
//css樣式同第一種, 只是 sticker 的 min-height 用css獲取 <body> <div id="sticker"> <div class="sticker-con">我是內(nèi)容</div> </div> <div class="footer">我是腳</div> </body> var sticker = document.querySelector('#sticker'); var h = document.body.clientHeight; sticker.style.minHeight = h - 44 + 'px'; //這種方式也可應(yīng)對一些特殊情況,比如有頭部導(dǎo)航欄的情況,可以靈活的處理 min-height:
4. 強(qiáng)大的 flex 布局 flex-direction:column
將wrapper容器 display:flex; flex-direction:column
sticker: flex:1; 占據(jù)除footer以外的剩余空間
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"> <title>sticker footer</title> </head> <style> html,body{ width: 100%; height: 100%; background-color: #ccc; margin:0; padding: 0; } header{ height:44px; width: 100%; text-align: center; line-height: 44px; } #wrapper{ display: flex; flex-direction: column; width: 100%; /*height: 100%;*/ } #sticker{ background-color: red; flex: 1; } #sticker .sticker-con{ padding-bottom: 40px; } .footer{ background-color: green; height: 40px; } </style> <body> <header>我是頭部</header> <div id="wrapper"> <div id="sticker"> <div class="sticker-con">我是內(nèi)容</div> </div> <div class="footer">我是腳</div> </div> </body> <script> var wrapper = document.querySelector('#wrapper'); var h = document.body.clientHeight; wrapper.style.minHeight = h - 44 + 'px'; // 減去頭部導(dǎo)航欄高度 </script> </html>
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持。
【網(wǎng)站聲明】本站除付費(fèi)源碼經(jīng)過測試外,其他素材未做測試,不保證完整性,網(wǎng)站上部分源碼僅限學(xué)習(xí)交流,請勿用于商業(yè)用途。如損害你的權(quán)益請聯(lián)系客服QQ:2655101040 給予處理,謝謝支持。