带输入的Flexbox移动页脚会导致虚拟键盘间隙

时间:2016-05-31 18:56:14

标签: html ios css flexbox mobile-website

我有一个非常简单的基于flexbox的布局,带有div和footer。页脚中有一个输入框。每当键盘出现在移动游猎或镀铬中时,在机身和键盘之间会显示一个小间隙。有谁知道如何消除这个可怕的差距?

请在您的设备上查看以下JS Bin:http://jsbin.com/rujexadodu/edit?html,css,js,output

Out

完整代码

  <html>
  <head>
  <title>Test</title>
  <meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, maximum-scale=1, user-scalable=0"/>
  <style type="text/css">

  html {
    margin: 0;
    padding: 0;
  }

  body {
    height: 100%;
    margin: 0;
    padding: 0;
    border: 1px solid pink;
  }

  .container {
    height: 100%;
    display:flex;
    flex-direction: column;
    margin: 0;
    padding: 0;
  }

  .footer {
    height: 30px;
    background-color: lightgray;
    padding: 10px;
    display: flex;
    align-items: center;
  }

  .content {
    flex: 1;
    height: 100%;
    width: 100%;
    padding: 10px;
  }

  input {
    width: 100%;
  }
  </style>
  </head>
  <body>
  <div class="container">
  <div class="content">
    This is the body content.
  </div>
  <div class="footer">
    <input type="text" />
  </div>
  </div>
  </body>
  </html>

2 个答案:

答案 0 :(得分:0)

我无法在我的iPad上重现这一点,并且没有任何内容在您的代码中跳出错误。所以它可能只是你所拥有的Safari版本中的一个错误。

我写了一个库调用iFrame-resizer,它保持iFrame高度与内容大小相匹配,并且在不同浏览器中计算内容高度是如此不可靠,以至于我必须提供10种不同的方法来解决它。

它不是一个完整的修复程序,但是,设置bodyhtml元素的背景颜色以匹配页脚将使其更不明显。

答案 1 :(得分:0)

我无法重现这一点,因此它必须是浏览器问题。 以下是一些可能会有所帮助的事情:

根据您的safari版本,您可能需要为flexbox添加前缀:

display: -webkit-box; /* Really old */
display: -moz-box; /* Firefox */
display: -ms-flexbox; /* IE */
display: -webkit-flex; /* Chrome & Safari */
display: flex;

和弹性值:

-webkit-box-flex: 1 0 auto;
-moz-box-flex:  1 0 auto;
-webkit-flex:  1 0 auto;
-ms-flex:  1 0 auto;
flex:  1 0 auto;

您需要提供flex三个值才能正常工作,它们依次为growshrinkbasis。默认设置是允许增长,禁止收缩,尺寸从“自动”1 0 auto开始。

我认为如果你没有给孩子们设置flex值,flexbox仍然有用,但是不同的浏览器可以有怪癖......所以我会确保页脚有

flex: 1 0 auto;

而不是

display: flex;

我认为有用的一些链接: