天天看點

【技巧篇】解決懸浮的<header>、<footer>遮擋内容的處理技巧

在現在的前端頁面中,尤其是移動端,經常會需要将<header>或者是<footer>子產品懸浮出來,跟随頁面的滑動保持定位在頁面的最上方或者是最下方,如下圖所示。

【技巧篇】解決懸浮的<header>、<footer>遮擋内容的處理技巧

“回複主題”子產品,就是跟随頁面的浮動一直懸浮在頁面的最下方,代碼結構如下。

實作這樣的功能當然是利用position:fixed。但是,使用position:fixed有一個bug,以懸浮<footer>在最下方為例(懸浮<header>同理),當頁面滑到最下方的時候,由于是fixed定位,脫離了正常文檔流,導緻會遮擋住一部分内容。如下所示:

【技巧篇】解決懸浮的<header>、<footer>遮擋内容的處理技巧

上面左邊是有問題的顯示,右邊為正常顯示。那麼,如何解決這個問題呢?在此,我抛磚引玉提出三種我的看法,希望能有更好的方法。

   

使用js解決,判定當滑動條滑到頁面内容的最底端的時候,将原本會脫離文檔流的fixed定位改為不脫離文檔流的relative定位即可。

使用腳本解決問題是最繁重的方法,能用css解決的盡量不使用腳本,但是也是一種方法。

給html<body>标簽加上一個padding-bottom屬性,這樣正常文檔流的内容距離body底部就會産生一個padding-bottom設定的距離。

缺點是,考慮到現在項目上線之後子產品的複用及經常需要合并css檔案,當其他頁面不需要這個懸浮塊,就會給不需要<footer>fixed定位的頁面造成負擔,不推薦使用這種方法。

個人認為這個方法最為實用,在<footer>塊之外再包裹一層div,然後再增加一個與<footer>同級的<div>塊,這個<div>塊的高度設定為與<footer>同樣高,不包含任何内容,這樣就可以起到一個占位符的效果,在頁面最底占據與<footer>同樣高度的空間,當然頁面滑到最下方,原本的<footer>懸動塊就會與這個占位塊完美重疊。且不會對其他頁面産生影響。代碼如下:

唯一缺點是不符合語義化,增加了無實質内容的空标簽。

  

以上是我想到的三種方法,才疏學淺,文中若有纰漏錯誤或者有更好的方法,萬望告知,感謝。

繼續閱讀