對“粘連”footer布局的思考和總結

經典的"粘連"footer布局

參考文章鏈接在文章末尾,簡單的語言總結如下:

經典的“粘連”footer布局就是。我們有一塊內容<main>。當<main>的高度足夠長的時候,緊跟在<main>后面的元素<footer>會跟在<main>元素的后面。當<main>元素比較短的時候(比如小于屏幕的高度),我們期望這個<footer>元素能夠“粘連”在屏幕的底部。如下圖所示:

main足夠長時

main比較短時

上面布局的實現方法在參考文章中已經有提到。下面主要探討我們項目中遇到的情況:

我們需要實現的布局就是 按鈕“提交”所在的區域能夠自由伸縮。當屏幕較低時,最就是“提交”按鈕和表單所在的區域接觸或者有一定的間隙。 示例圖就是下面的:

當屏幕足夠高的時候

屏幕足夠高的時候

當屏幕比較低的時候

屏幕比較低的時候

上面的布局在移動端需要考慮以下因素對布局的影響:

  1. 安卓上鍵盤彈起會對absolutefixed產生影響;

  2. 我們的絕對定位的元素是使用的bottom相對于屏幕的底部定位;

為了解決以上的兩個問題的解決方案:

  1. 使用正常文檔流的元素包裹絕對定位的元素;

  2. 絕對定位元素的父級元素應該有一個min-height防止,父級元素太低時,絕對定位元素“溢出”父級元素;(min-height >= 絕對定位元素 + bottom);

根據“粘連”footer布局的思想,結合彈性盒布局。我們需要的這種布局可以有兩種方式,分別介紹如下:

1.使用vh單位

先來了解下vhvw這兩個單位。

  1. vh相對于視口的高度。視口被均分為100單位的vh。

  2. vw相對于視口的寬度。視口被均分為100單位的vw。

上面兩個單位通俗的意義就是在css中獲取當前屏幕的高度和寬度(不通過js計算)。

示例代碼如下:

<body><div class="item1"></div><div class="item2"></div><div class="item3"><div class="btn-item">你好</div></div>
</body>

css代碼如下:

* {margin: 0;padding: 0;
}body {/*主要就是這里獲取視窗口的高度*/min-height: 100vh;display: -webkit-box;display: -webkit-flex;display: -moz-box;display: -ms-flexbox;display: flex;-webkit-flex-flow: column;-ms-flex-flow: column;flex-flow: column;
}.item1 {height: 100px;background-color: #ddd
}.item2 {height: 300px;background-color: #fea0a0
}.item3 {/*防止絕對定位的元素溢出父級元素*/min-height: 30px !important;border: 1px solid #481eff;position: relative;height: 0;-webkit-box-flex: 1;-webkit-flex: 1;-moz-box-flex: 1;-ms-flex: 1;flex: 1;-webkit-flex-basis: 0;-ms-flex-preferred-size: 0;flex-basis: 0;max-height: 100%;
}.btn-item {position: absolute;bottom: 10px;border: 1px solid #000;
}

以上就是完全使用css來實現我們項目中布局的方法,但是這個方法有一個很明顯的缺點就是vh單位的兼容性問題。兼容列表如下:

因為兼容性問題,純css的方法在我們的項目中使用還是不現實。但是我們想下問題的本質:在使用彈性盒的基礎上,我們唯一需要做的就是知道彈性盒元素的高度(就是我們項目中屏幕的高度)。

2.js簡單計算滿足兼容問題。

就是在dom樹渲染完成以后給body設置高度未屏幕的高度。為了避免不必要的“重繪”或者是“重排”在head標簽中添加如下js。


var callback = function(){document.body.style.height=window.screen.height+'px';
};//是否是頁面加載觸發綁定了事件
if ( document.readyState === "complete" || (document.readyState !== "loading" && !document.documentElement.doScroll) ) {callback();
} else {//DOMContentLoaded 僅支持ie9+ 和移動端  <=ie8 使用 onreadystatechange  可以監聽dom是否加載完畢document.addEventListener("DOMContentLoaded", callback);
}

使用 jQuery 或者是 Zepto 的方法,仍然在head標簽中添加如下js。

$(function(){$('body').height($(window).height());
})

所以在我們的項目中結合彈性盒布局和添加簡單的動態js計算屏幕的高度。就可以完美實現我們項目中需要的布局。

body {/*使用js動態計算就可以不使用vh單位*//*min-height: 100vh;*/display: flex;
}

參考文章:

因為是一個

cssstickyfooter.com
ryanfait.com/sticky-footer
css-tricks.com/snippets/css/sticky-footer
pixelsvsbytes.com/blog/2011/09/sticky-css-footers-the-flexible-way
mystrd.at/modern-clean-css-sticky-footer


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/259860.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/259860.shtml
英文地址,請注明出處:http://en.pswp.cn/news/259860.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

計算機函數公式一等獎怎么算,信息技術應用 用計算機畫函數圖象教案設計(一等獎)...

衛鵬展地區&#xff1a; 湖北省 - 黃岡市 - 英山縣學校&#xff1a;英山縣金鋪鎮金鋪中學 共1課時信息技術應用 用計算機畫函數圖象">信息技術應用 用計算機畫… 初中數學 人教2011課標版 1教學目標1&#xff0e;結合具體情境理解一次函數的意義&#xff0c;能結…

這樣去寫你的 HTML

昨天在 twitter 上說&#xff0c;怎么忍心把頁面寫得這么難用&#xff1f;是的&#xff0c;這個世界還有一群人等著我們創建出來的東西&#xff0c;可以讓他們的生活能過得更容易呢。比如那些需要讀屏軟件的用戶。作為一個前端&#xff0c;我們又怎么會忍心呢。之前就一直想寫這…

iframe懶加載_前端常見問題

原地址&#xff1a;https://blog.csdn.net/Mr_JavaScript/article/details/843110681. flex布局&#xff1a;又叫做彈性布局任何一個容器都可以指定flex布局&#xff0c;如display:flex 或 display:inline-flex注意&#xff1a;設置了flex布局以后&#xff0c;子元素的float&am…

手機運行服務器無響應,《最強蝸牛》服務器無響應怎么辦 服務器無響應解決方法...

導讀最強蝸牛服務器無響應怎么辦&#xff1f;本作在今日迎來了正式的公測&#xff0c;這會導致大批量的玩家同時涌入進來&#xff0c;而服務器也因此而遭受到了非常大的符合&#xff0c;所以會導致后續加入進來的玩家出現服務器無響應進不去的現象。下面就為大家帶...最強蝸牛服…

Android 開源框架Universal-Image-Loader學習

Android 開源框架Universal-Image-Loader完全解析&#xff08;一&#xff09;--- 基本介紹及使用 Android 開源框架Universal-Image-Loader完全解析&#xff08;二&#xff09;--- 圖片緩存策略詳解 Android 開源框架Universal-Image-Loader完全解析&#xff08;三&#xff09;…

自己動手寫操作系統--個人實踐

近期開始看于淵的《自己動手寫操作系統》這本書&#xff0c;剛開始看就發現做系統的引導盤居然是軟盤&#xff01;心里那個汗啊&#xff01; 如今都是U盤了&#xff0c;誰還用軟盤。于是考慮用U盤。 于是開始下面步驟&#xff1a; 1、既然書上說給先要把軟盤做引導盤&#xff0…

蔻馳和mk哪個更大牌_mk和coach哪個好?mk和coach包包是一個檔次嗎?

說到包包&#xff0c;mk和coach可謂是輕奢界的兩大巨頭了。因此&#xff0c;兩個品牌的包包不可避免的會被經常拿來作比較。那么&#xff0c;從各個角度來講mk和coach那款包包更好呢&#xff1f;這兩款包包又有哪些本質上的區別呢&#xff1f;mk和coach哪個好價格對比大致上&am…

Linux 配置 swap 區

Linux 配置 swap 區 很多時候我們需要配置 swap 主要的原因是物理內存太貴了&#xff0c; 服務器也是一樣&#xff0c; 當內存不夠用時&#xff0c; 系統會卡死&#xff0c; 因此我們寧愿犧牲一點性能也要讓系統正常運行。 當然&#xff0c; 在系統物理內存足夠的條件下&#x…

嵊州職教中心計算機多少分數,嵊州中考考試分數線

每年六月份最熱鬧的大概就是中考了&#xff0c;很多人都想提前知道中考分數線&#xff0c;下面是百分網小編整理的嵊州2017年中考考試分數線&#xff0c;歡迎閱讀借鑒!嵊州2017年中考分數線2017年嵊州中考考試時間嵊州中考錄取情況1. 第一批 嵊州中學、馬寅初中學實驗班&#x…

12月和12年

剛剛撇了一眼&#xff0c;注冊博客園已經12年了。時間有時只是個數字&#xff0c;有沒有意義呢&#xff0c;自己去判斷啦。 像博客園這樣的技術社區&#xff0c;很是難得&#xff0c;雖然這個社區里.NET開發者才是一等公民。 我最喜歡的是它的博客系統的高度可Diy性。經常訪問我…

【2011-6】【奇數】

Description 鍵盤輸入一個奇數 P (P<50)&#xff0c;其個位數字不能是5&#xff0c;求一個整數 S&#xff0c;使 P*S 1111...1&#xff0c;即乘積各位都是1。要求用兩行依次輸出以下結果: ①S的全部數字&#xff1b;②乘積中數字1的個數。 例&#xff1a;輸入P3&#xff0c…

sql加上唯一索引后批量插入_阿里大佬總結的52條SQL語句性能優化策略,建議收藏...

你知道的越多&#xff0c;不知道的就越多&#xff0c;業余的像一棵小草&#xff01;你來&#xff0c;我們一起精進&#xff01;你不來&#xff0c;我和你的競爭對手一起精進&#xff01;編輯&#xff1a;業余草cnblogs.com/SimpleWu/p/9929043.html推薦&#xff1a;https://www…

Web緩存技術

本章導讀 緩存主要是為了提高數據的讀取速度。因為服務器和應用客戶端之間存在著流量的瓶頸&#xff0c;所以讀取大容量數據時&#xff0c;使用緩存來直接為客戶端服務&#xff0c;可以減少客戶端與服務器端的數據交互&#xff0c;從而大大提高程序的性能。 本章從緩存所在的命…

神武4手游服務器維護,神武4手游勢不可擋開服時間表_神武4手游新區開服預告_第一手游網手游開服表...

2020-06-1910:00新服天涯刀客已經開服2020-06-0510:00新服飛仙摘星已經開服2020-05-2910:00新服踏雪無痕已經開服2020-05-2210:00新服因緣際會已經開服2020-05-1910:00新服龍的傳人已經開服2020-05-1510:00新服鸞鳳和鳴已經開服2020-05-1211:40新服其疾如風已經開服2020-05-081…

BZOJ 4066 簡單題 ——KD-Tree套替罪羊樹

【題目分析】 直接x,y二維輪番劃分&#xff0c;暴力即可。 套上替罪羊&#xff0c;打碎重構&#xff0c;對于時間復雜度有了保證。 寫起來好麻煩&#xff0c;重構的技巧很棒&#xff01; 【代碼】 #include <cstdio> #include <cstring> #include <iostream>…

【HTML5初探之繪制圖像(上)】看我canvas元素引領下一代web頁面

弧度一塊可能有誤&#xff0c;需要再研究 導航 【初探HTML5之使用新標簽布局】用html5布局我的博客頁&#xff01; 【HTML5初探之form標簽】解放表單驗證、增加文件上傳、集成拖放 【HTML5初探之繪制圖像&#xff08;上&#xff09;】看我canvas元素引領下一代web頁面 【HTML5初…

或運算

邏輯或 ||int i, j, k;i 0x15;j 0x41;k i || j;反匯編代碼如下:MOV DWORD PTR SS:[EBP-4], 15MOV DWORD PTR SS:[EBP-C], 41CMP DWORD PTR SS:[EBP-4], 0JNZ SHORT asm_OR.00401029CMP DWORD PTR SS:[EBP-C], 0JNZ SHORT asm_OR.00401029MOV DWORD PTR SS:[EBP-10], 0JMP SH…

構造方法的調用順序和成員變量的初始化時機以及動態綁定

構造方法的調用順序&#xff1a;子類構造器中&#xff0c;JVM會自動的先調用父類的構造方法&#xff0c;然后再執行子類構造方法。在JVM自動調用父類構造方法的時候&#xff0c;會完成父類中擁有的成員變量的值的初始化操作&#xff0c;此時子類的成員變量并未初始化&#xff0…

Python interview_python

https://github.com/taizilongxu/interview_python 1 Python的函數參數傳遞 strings, tuples, 和numbers是不可更改的對象&#xff0c;而list,dict等則是可以修改的對象 2 Python中的元類(metaclass) 3 staticmethod和classmethod python 三個方法&#xff0c;靜態方法&#xf…

突然不能 ip訪問服務器文件夾,用友U8 工作站連接不到服務器,ping IP及服務器名都正常,訪問服務器共享文件夾也正常...

用友U8 U8存貨采購入庫單存貨現存量與存貨核算中的明細帳數量不符用友U8 U8存貨采購入庫單存貨現存量與存貨核算中的明細帳數量不符問題原因:錯誤原因見下面解決方案中的分析。解決方法:在查詢存貨明細帳和現存量09倉庫存貨510241數量為123&#xff0c;但在添采購入庫單紅字時卻…