【问题标题】:Portrait mode gets misinterpreted as landscape when keyboard is on键盘打开时,纵向模式被误解为横向
【发布时间】:2014-04-04 11:54:14
【问题描述】:

我正在开发一个针对平板电脑和手机的网络应用程序。系统设计为可用,因此必须同时支持横向模式和纵向模式。因此,当用户改变方向时,我的 Web 应用程序将触发一些事件以相应地重新排列页面。

键盘出现时纵向模式被误解为横向

这就是问题所在。在我的 Web 应用程序的所有页面中,都有一个由文本框和一个按钮组成的搜索控件。当我处于纵向模式并单击文本字段时,键盘显示并且视口大小更改为height < width,这导致我的应用程序在设备处于纵向时变为横向。当用户离开该领域的焦点时,键盘消失,肖像模式正确恢复回来。

看一下这里的图片:当用户搜索某些东西时,横向模式被激活。为什么?很简单:因为键盘显示导致视口发生变化,最终视口的高度低于宽度。

没有键盘时,我们有Height1 > Width1,但当键盘打开时,我们有Height2 < Width2,但有Width2 = Width1

涉及的所有设备

您可以想象,这是一个实际上涉及所有设备的问题:

  • 安卓
  • 苹果 iOS
  • 窗户

设备。

你知道如何解决这个问题吗?针对这样的场景可以采取哪些类型的方法?

【问题讨论】:

    标签: android ipad mobile web-applications


    【解决方案1】:

    来自https://web.archive.org/web/20160509220835/http://blog.abouthalf.com/development/orientation-media-query-challenges-in-android-browsers/的摘录

    要解决键盘抽搐的问题,我们需要更换blunt 包罗万象的术语,例如“肖像”,其纵横比可以捕捉我们的 奇怪的键盘边缘案例。

    从上面,我们知道 Droid Razr 的屏幕尺寸,在 显示键盘的纵向方向为 360 像素 x 253 像素。 将 360 除以 253 得到 1.4(四舍五入到最接近的十分之一)。 虽然我们可以只写一个纵横比媒体查询,比如 最小纵横比:360/253,这对于一台设备来说有点过于具体了。 因此,我们将使用 13 到 9。这也大致等于 1.4,但它是 眼睛更舒服。

    对于横向媒体:

    @media screen and (min-aspect-ratio: 13/9) { /* landscape styles here */}
    

    对于肖像媒体:

    @media screen and (max-aspect-ratio: 13/9) { /* portrait styles here */}
    

    【讨论】:

    • +100 你救了我的命,而无需深入研究,非常感谢!
    【解决方案2】:

    这还取决于您如何获得当前方向,您是否使用传感器?结果可能与物理方向和屏幕比例不同

    【讨论】:

    • 不,我只是在获取视口大小,并且基于此...那么使用传感器是什么意思?请考虑这是一个 Web 应用程序,所以我只有 Javascript...
    • 对不起,我错过了 web 应用程序的那部分,弹出式键盘会出现在屏幕底部,这样它就不会改变你的窗口尺寸。
    • 嗯,弹出式键盘是什么意思?可能是我不知道的东西,如何从javascript或html触发它?
    • 它可以是元素初始设置为在 css display:none 中不可见或其他属性使其不可见,并且可以在用户聚焦文本框时放置在应用程序 UI 的底部,然后例如通过 JavaScript 设置它可见,因此它不会使您的内容容器变小,但它会出现在它之上,因此它不会改变大小。唯一的问题可能是如果您不想在页面底部添加许多输入字段,那么弹出窗口可能只会覆盖它们并且用户将无法看到它,但我建议弹出解决方案,因为在附加的图片上我假设您的应用程序将是一种搜索引擎
    猜你喜欢
    • 1970-01-01
    • 2014-09-15
    • 2020-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多