键盘方向和媒体查询错误(应用程序模式) 将此网页添加到iOS7主屏幕 打开它,聚焦输入字段(键盘弹出) 文本变为红色,因为手机认为它处于横向模式

键盘方向和媒体查询错误(应用程序模式) 将此网页添加到iOS7主屏幕 打开它,聚焦输入字段(键盘弹出) 文本变为红色,因为手机认为它处于横向模式,ios7,media-queries,Ios7,Media Queries,有什么办法吗?还是我们应该责怪苹果 注意:此问题仅在应用程序模式下发生,而不是在常规Safari浏览模式下发生。它在iOS6中运行良好 代码: <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <meta name="apple-mobile-web-app-capable" content="yes">

有什么办法吗?还是我们应该责怪苹果

注意:此问题仅在应用程序模式下发生,而不是在常规Safari浏览模式下发生。它在iOS6中运行良好

代码:

<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<meta name="apple-mobile-web-app-capable" content="yes">

<style>
body {
    color: blue;
}   
@media (orientation:landscape) {
    body {
        color: red;
    }
}
</style>

<body>
    <h3>this text will go red when in landscape</h3>
    <input type="text" />
</body>

身体{
颜色:蓝色;
}   
@媒体(方向:景观){
身体{
颜色:红色;
}
}
当处于横向时,此文本将变为红色

innerHeight
现在受到iOS7中键盘打开的影响。当设备处于纵向时,如果在键盘向上的情况下检查
innerHeight
vs
innerWidth
,您会发现
innerHeight
,因此浏览器的方向检查可能就这么简单,而不是直接使用设备方向。

这显然是一个iOS7错误。在我的应用程序中,我发现我可以可靠地区分纵向模式和横向模式,即使在屏幕键盘打开的情况下,使用此媒体查询聚焦于输入字段:

@media only screen and (device-width: 768px) and (device-height: 1024px) and 
    (min-aspect-ratio: 4/3) {
  /* landscape differences here */
}
我无法使用方向:横向,因为即使在纵向模式下,如果键盘打开,该规则也会被激活


对于iPhone,我可能需要一个不同的规则,但我还没有做到这一点

键盘定位错误也会影响某些web浏览器,不仅仅是应用模式,希望这两种情况都可以使用。这似乎也影响了一些安卓设备

以下是我如何在移动web浏览器中使用它的:

@media only screen and (min-device-aspect-ratio:1/1) and 
                       (max-device-aspect-ratio:3/2)    {
 /* Landscape-to-portrait corrections here */
}
这个想法是,只有当屏幕是一个完美的正方形或接近正方形时,这个查询才能触发,这种情况几乎只有在触摸屏设备上升起键盘时才会发生。我使用的纵横比值转换为1到1.5之间,因此作为一个示例,16:9屏幕的纵横比为1.778(16/9),不会成为目标。一旦MQ触发,您就可以重新设置受影响元素的样式。这并不能修复bug,只是隐藏了它

如果一个操作系统不包含这个bug,这个查询将永远不会被触发,所以如果苹果修复了这个bug,如果你不想的话,你不需要修改你的代码

如果一个设备真的被切换到横向模式,纵横比只会增加,如果键盘被提升,则更是如此,因此当一个设备处于其一侧时,错误永远不会出现

据我所知,没有任何带有方形/几乎方形屏幕的设备可以接收此媒体查询(在撰写本文时),但如果我错了,请纠正我

这已经在运行iOS7的Safari、Dolphin和Mercury浏览器中的iPhone 5s上进行了测试,并在运行安卓4.2.1的Android One X上的Chrome上进行了测试(该浏览器在键盘上也遇到了相同的错误定位错误)

我还检查了它是否会在黑莓Bold 9780(480x360)上启动,但它没有。我不太相信这一点,因为分辨率应该使它落在目标范围内,并且它加载了其他MQs,所以它可能根据屏幕的物理大小而不是像素数来评估纵横比。这可能是媒体查询将错误解决方案应用于未遇到错误的屏幕的一个实例

这并不完美,但它让我在经历了很多头痛之后摆脱了麻烦