1. 程式人生 > >web端ios佈局fixed元素軟鍵盤喚起時fixed失效

web端ios佈局fixed元素軟鍵盤喚起時fixed失效

在ios上做了一個簡單的頁面頭部置頂底部置頂原始碼如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0" />
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        .top{
            position: fixed;
            top:0;
            height: 50px;
            background-color: black;
            width: 100%;
        }
        .but{
            position: fixed;
            bottom:0;
            height: 50px;
            background-color: red;
            width: 100%;
        }
        .main{
            height: 2000px;
            top:50px;
            bottom: 50px;
            width: 100%;

        }
    </style>
</head>
<body>
    <div class="top"></div>
    <div class="main">
        <div>1</div>
        <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div>

    </div>
    <div class="but"> <input type="text" />
        <button class="submit">提交</button></div>
</body>
</html>
效果如下:

但是使用者在輸入時底部輸入框軟鍵盤被喚起以後,再次滑動頁面,fixed元素佈局的div竟然跟著滾動起來了:


軟鍵盤喚起後,頁面的 fixed 元素將失效(即無法浮動,也可以理解為變成了 absolute 定位),所以當頁面超過一屏且滾動時,失效的 fixed 元素就會跟隨滾動了。

既然ios中喚起軟鍵盤會導致頁面fixed元素失效,導致跟著頁面一起滾動,那麼頁面如果不出現長滾動,就算失效也無法跟隨頁面滾動,就不會出現上面的問題程式碼如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0"/>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        .top {
            position: fixed;
            top: 0;
            height: 50px;
            background-color: black;
            width: 100%;
        }

        .but {
            position: fixed;
            bottom: 0;
            height: 50px;
            background-color: red;
            width: 100%;
        }

        .main {
            position: absolute;
            top: 50px;
            bottom: 50px;
            width: 100%;
            /* 使之可以滾動 */
            overflow-y: scroll;
            /* 增加該屬性,可以增加彈性 */
            -webkit-overflow-scrolling: touch;
        }

        .content {
            height: 2000px;
            overflow-y: scroll;
        }
    </style>
</head>
<body>
<div class="top"></div>
<div class="main">
    <div class="content">
        <div>1</div>
        <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div> <div>1</div>
    </div>
</div>
<div class="but"><input type="text" />
    <button class="submit">提交</button>
</div>
</body>
</html>
我把中間層main定位換成absolute,再把main內部加入一個div高度為4000,於是在mian內部的div就能滾動了再加上了2個樣式使滾效果沒那麼卡頓:(ios區域性滾動會出現卡頓現象
/* 使之可以滾動 */
overflow-y: scroll;
/* 增加該屬性,可以增加彈性 */
-webkit-overflow-scrolling: touch;