移動端使用絕對定位來模擬固定定位


一、原因

  固定定位是參考布局視口做定位的,而在移動端,存在布局視口、視覺視口、理想視口,如果適配方案使用不正確,很容易造成布局錯誤。

二、案例1,有問題版本,在喚起虛擬鍵盤的時候,布局錯亂了。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>移動端使用絕對定位來模擬固定定位</title>
        <meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=no,minimum-scale=1.0,maximum-scale=1.0"/>
        <style type="text/css">
            *{margin: 0; padding: 0;}
            #global-wrapper .header{
                width: 100%;
                height: 100px;
                position: fixed;
                left: 0;
                top: 0;
                background-color: #0000FF;
            }
            .footer{
                width: 100%;
                height: 100px;
                position: fixed;
                left: 0;
                bottom: 0;
                background-color: yellow;
            }
        </style>
    </head>
    <body>
        <div id="global-wrapper">
            <div class="header"></div>
            在做移動端業務開發時,<br/>經常碰到fixed元素和輸入框<br/>同時存在的情況。在手機軟鍵盤喚起的情<br/>況下,會造成原本<br/>fixed定位的元素跟隨軟鍵盤而<br/>上浮,對整體布局造成沖擊<br/>。來看這<br/>樣一個栗子直觀的感受<br/>一下這個bug。
                在做移動端業務開發時,<br/>經常碰到fixed元素和輸入框<br/>同時存在的情況。在手機軟鍵盤喚起的情<br/>況下,會造成原本<br/>fixed定位的元素跟隨軟鍵盤而<br/>上浮,對整體布局造成沖擊<br/>。來看這<br/>樣一個栗子直觀的感受<br/>一下這個bug。
                在做移動端業務開發時,<br/>經常碰到fixed元素和輸入框<br/>同時存在的情況。在手機軟鍵盤喚起的情<br/>況下,會造成原本<br/>fixed定位的元素跟隨軟鍵盤而<br/>上浮,對整體布局造成沖擊<br/>。來看這<br/>樣一個栗子直觀的感受<br/>一下這個bug。
                在做移動端業務開發時,<br/>經常碰到fixed元素和輸入框<br/>同時存在的情況。在手機軟鍵盤喚起的情<br/>況下,會造成原本<br/>fixed定位的元素跟隨軟鍵盤而<br/>上浮,對整體布局造成沖擊<br/>。來看這<br/>樣一個栗子直觀的感受<br/>一下這個bug。
                在做移動端業務開發時,<br/>經常碰到fixed元素和輸入框<br/>同時存在的情況。在手機軟鍵盤喚起的情<br/>況下,會造成原本<br/>fixed定位的元素跟隨軟鍵盤而<br/>上浮,對整體布局造成沖擊<br/>。來看這<br/>樣一個栗子直觀的感受<br/>一下這個bug。
                在做移動端業務開發時,<br/>經常碰到fixed元素和輸入框<br/>同時存在的情況。在手機軟鍵盤喚起的情<br/>況下,會造成原本<br/>fixed定位的元素跟隨軟鍵盤而<br/>上浮,對整體布局造成沖擊<br/>。來看這<br/>樣一個栗子直觀的感受<br/>一下這個bug。
                在做移動端業務開發時,<br/>經常碰到fixed元素和輸入框<br/>同時存在的情況。在手機軟鍵盤喚起的情<br/>況下,會造成原本<br/>fixed定位的元素跟隨軟鍵盤而<br/>上浮,對整體布局造成沖擊<br/>。來看這<br/>樣一個栗子直觀的感受<br/>一下這個bug。
                在做移動端業務開發時,<br/>經常碰到fixed元素和輸入框<br/>同時存在的情況。在手機軟鍵盤喚起的情<br/>況下,會造成原本<br/>fixed定位的元素跟隨軟鍵盤而<br/>上浮,對整體布局造成沖擊<br/>。來看這<br/>樣一個栗子直觀的感受<br/>一下這個bug。
                <input type="text" name="name" id="name" />
                在做移動端業務開發時,<br/>經常碰到fixed元素和輸入框<br/>同時存在的情況。在手機軟鍵盤喚起的情<br/>況下,會造成原本<br/>fixed定位的元素跟隨軟鍵盤而<br/>上浮,對整體布局造成沖擊<br/>。來看這<br/>樣一個栗子直觀的感受<br/>一下這個bug。
                在做移動端業務開發時,<br/>經常碰到fixed元素和輸入框<br/>同時存在的情況。在手機軟鍵盤喚起的情<br/>況下,會造成原本<br/>fixed定位的元素跟隨軟鍵盤而<br/>上浮,對整體布局造成沖擊<br/>。來看這<br/>樣一個栗子直觀的感受<br/>一下這個bug。
                在做移動端業務開發時,<br/>經常碰到fixed元素和輸入框<br/>同時存在的情況。在手機軟鍵盤喚起的情<br/>況下,會造成原本<br/>fixed定位的元素跟隨軟鍵盤而<br/>上浮,對整體布局造成沖擊<br/>。來看這<br/>樣一個栗子直觀的感受<br/>一下這個bug。
                在做移動端業務開發時,<br/>經常碰到fixed元素和輸入框<br/>同時存在的情況。在手機軟鍵盤喚起的情<br/>況下,會造成原本<br/>fixed定位的元素跟隨軟鍵盤而<br/>上浮,對整體布局造成沖擊<br/>。來看這<br/>樣一個栗子直觀的感受<br/>一下這個bug。
                在做移動端業務開發時,<br/>經常碰到fixed元素和輸入框<br/>同時存在的情況。在手機軟鍵盤喚起的情<br/>況下,會造成原本<br/>fixed定位的元素跟隨軟鍵盤而<br/>上浮,對整體布局造成沖擊<br/>。來看這<br/>樣一個栗子直觀的感受<br/>一下這個bug。
                在做移動端業務開發時,<br/>經常碰到fixed元素和輸入框<br/>同時存在的情況。在手機軟鍵盤喚起的情<br/>況下,會造成原本<br/>fixed定位的元素跟隨軟鍵盤而<br/>上浮,對整體布局造成沖擊<br/>。來看這<br/>樣一個栗子直觀的感受<br/>一下這個bug。
                在做移動端業務開發時,<br/>經常碰到fixed元素和輸入框<br/>同時存在的情況。在手機軟鍵盤喚起的情<br/>況下,會造成原本<br/>fixed定位的元素跟隨軟鍵盤而<br/>上浮,對整體布局造成沖擊<br/>。來看這<br/>樣一個栗子直觀的感受<br/>一下這個bug。
                在做移動端業務開發時,<br/>經常碰到fixed元素和輸入框<br/>同時存在的情況。在手機軟鍵盤喚起的情<br/>況下,會造成原本<br/>fixed定位的元素跟隨軟鍵盤而<br/>上浮,對整體布局造成沖擊<br/>。來看這<br/>樣一個栗子直觀的感受<br/>一下這個bug。
                在做移動端業務開發時,<br/>經常碰到fixed元素和輸入框<br/>同時存在的情況。在手機軟鍵盤喚起的情<br/>況下,會造成原本<br/>fixed定位的元素跟隨軟鍵盤而<br/>上浮,對整體布局造成沖擊<br/>。來看這<br/>樣一個栗子直觀的感受<br/>一下這個bug。
                在做移動端業務開發時,<br/>經常碰到fixed元素和輸入框<br/>同時存在的情況。在手機軟鍵盤喚起的情<br/>況下,會造成原本<br/>fixed定位的元素跟隨軟鍵盤而<br/>上浮,對整體布局造成沖擊<br/>。來看這<br/>樣一個栗子直觀的感受<br/>一下這個bug。
            <div class="footer"></div>
        </div>
    </body>
</html>

三、案例2,絕對定位版本,布局沒有錯亂,

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>移動端使用絕對定位來模擬固定定位</title>
        <meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=no,minimum-scale=1.0,maximum-scale=1.0"/>
        <style type="text/css">
            *{margin: 0; padding: 0;}
            html,body{
                width: 100%;
                height: 100%;
                overflow: hidden;
            }
            #global-wrapper{
                width: 100%;
                height: 100;
                overflow: auto;
            }
            #global-wrapper .header{
                width: 100%;
                height: 100px;
                position: absolute; /*相對body進行定位,上下移動的時候只是移動global-wrapper,而body沒有動*/
                left: 0;
                top: 0;
                background-color: #0000FF;
            }
            .footer{
                width: 100%;
                height: 100px;
                position: absolute;/*相對body進行定位*/
                left: 0;
                bottom: 0;
                background-color: yellow;
            }
        </style>
    </head>
    <body>
        <div id="global-wrapper">
            <div class="header"></div>
            在做移動端業務開發時,<br/>經常碰到fixed元素和輸入框<br/>同時存在的情況。在手機軟鍵盤喚起的情<br/>況下,會造成原本<br/>fixed定位的元素跟隨軟鍵盤而<br/>上浮,對整體布局造成沖擊<br/>。來看這<br/>樣一個栗子直觀的感受<br/>一下這個bug。
                在做移動端業務開發時,<br/>經常碰到fixed元素和輸入框<br/>同時存在的情況。在手機軟鍵盤喚起的情<br/>況下,會造成原本<br/>fixed定位的元素跟隨軟鍵盤而<br/>上浮,對整體布局造成沖擊<br/>。來看這<br/>樣一個栗子直觀的感受<br/>一下這個bug。
                <input type="text" name="name" id="name" />
                在做移動端業務開發時,<br/>經常碰到fixed元素和輸入框<br/>同時存在的情況。在手機軟鍵盤喚起的情<br/>況下,會造成原本<br/>fixed定位的元素跟隨軟鍵盤而<br/>上浮,對整體布局造成沖擊<br/>。來看這<br/>樣一個栗子直觀的感受<br/>一下這個bug。
                在做移動端業務開發時,<br/>經常碰到fixed元素和輸入框<br/>同時存在的情況。在手機軟鍵盤喚起的情<br/>況下,會造成原本<br/>fixed定位的元素跟隨軟鍵盤而<br/>上浮,對整體布局造成沖擊<br/>。來看這<br/>樣一個栗子直觀的感受<br/>一下這個bug。
                在做移動端業務開發時,<br/>經常碰到fixed元素和輸入框<br/>同時存在的情況。在手機軟鍵盤喚起的情<br/>況下,會造成原本<br/>fixed定位的元素跟隨軟鍵盤而<br/>上浮,對整體布局造成沖擊<br/>。來看這<br/>樣一個栗子直觀的感受<br/>一下這個bug。
                在做移動端業務開發時,<br/>經常碰到fixed元素和輸入框<br/>同時存在的情況。在手機軟鍵盤喚起的情<br/>況下,會造成原本<br/>fixed定位的元素跟隨軟鍵盤而<br/>上浮,對整體布局造成沖擊<br/>。來看這<br/>樣一個栗子直觀的感受<br/>一下這個bug。
                在做移動端業務開發時,<br/>經常碰到fixed元素和輸入框<br/>同時存在的情況。在手機軟鍵盤喚起的情<br/>況下,會造成原本<br/>fixed定位的元素跟隨軟鍵盤而<br/>上浮,對整體布局造成沖擊<br/>。來看這<br/>樣一個栗子直觀的感受<br/>一下這個bug。
                在做移動端業務開發時,<br/>經常碰到fixed元素和輸入框<br/>同時存在的情況。在手機軟鍵盤喚起的情<br/>況下,會造成原本<br/>fixed定位的元素跟隨軟鍵盤而<br/>上浮,對整體布局造成沖擊<br/>。來看這<br/>樣一個栗子直觀的感受<br/>一下這個bug。
                在做移動端業務開發時,<br/>經常碰到fixed元素和輸入框<br/>同時存在的情況。在手機軟鍵盤喚起的情<br/>況下,會造成原本<br/>fixed定位的元素跟隨軟鍵盤而<br/>上浮,對整體布局造成沖擊<br/>。來看這<br/>樣一個栗子直觀的感受<br/>一下這個bug。
                在做移動端業務開發時,<br/>經常碰到fixed元素和輸入框<br/>同時存在的情況。在手機軟鍵盤喚起的情<br/>況下,會造成原本<br/>fixed定位的元素跟隨軟鍵盤而<br/>上浮,對整體布局造成沖擊<br/>。來看這<br/>樣一個栗子直觀的感受<br/>一下這個bug。
                在做移動端業務開發時,<br/>經常碰到fixed元素和輸入框<br/>同時存在的情況。在手機軟鍵盤喚起的情<br/>況下,會造成原本<br/>fixed定位的元素跟隨軟鍵盤而<br/>上浮,對整體布局造成沖擊<br/>。來看這<br/>樣一個栗子直觀的感受<br/>一下這個bug。
                在做移動端業務開發時,<br/>經常碰到fixed元素和輸入框<br/>同時存在的情況。在手機軟鍵盤喚起的情<br/>況下,會造成原本<br/>fixed定位的元素跟隨軟鍵盤而<br/>上浮,對整體布局造成沖擊<br/>。來看這<br/>樣一個栗子直觀的感受<br/>一下這個bug。
            <div class="footer"></div>
        </div>
    </body>
</html>

效果是沒有錯亂的,使用絕對定位,頭部和尾部都是相對body進行定位,上下移動的時候只是移動global-wrapper,而body沒有動,布局沒有錯亂

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM