将 ipad 从纵向旋转到横向时,Div 保持相同的宽度

Posted

技术标签:

【中文标题】将 ipad 从纵向旋转到横向时,Div 保持相同的宽度【英文标题】:Div remains same width when rotating ipad from portrait to landscape 【发布时间】:2012-01-13 23:20:54 【问题描述】:

我目前正在开发我的第一个网络应用程序,但遇到了一个问题。当应用程序打开时,底部的导航 div(如下图所示)呈现良好,当我将 iPad 旋转为纵向时也是如此。但是当我从纵向旋转到横向时,它似乎保持相同的宽度,至少在我触摸屏幕之前是这样。这不是一个大问题,因为当我开始滚动时它会恢复到正常状态,但看起来有点不整洁。我附上了几张图片:

肖像:

从纵向旋转到横向后:

这是我用于该 div 的 CSS:

nav background-image: linear-gradient(bottom, rgb(0,0,0) 15%, rgb(51,51,51) 69%);
    background-image: -o-linear-gradient(bottom, rgb(0,0,0) 15%, rgb(51,51,51) 69%);
    background-image: -moz-linear-gradient(bottom, rgb(0,0,0) 15%, rgb(51,51,51) 69%);
    background-image: -webkit-linear-gradient(bottom, rgb(0,0,0) 15%, rgb(51,51,51) 69%);
    background-image: -ms-linear-gradient(bottom, rgb(0,0,0) 15%, rgb(51,51,51) 69%);
    background-image: -webkit-gradient(
    linear,
    left bottom,
    left top,
    color-stop(0.15, rgb(0,0,0)),
    color-stop(0.69, rgb(51,51,51)));
    border-top: 1px solid #000;

    text-align: center;
    position: fixed;
    bottom: 0px;
    left: 0px;
    width: 100%;
    height: 51px;
    color:#CCC;
    font-size:11.3px;
    font-weight:bold;
    overflow: hidden;
    margin: 0 auto 0;

有没有办法解决这个问题并让 div 自动填充屏幕的宽度而无需用户触摸它?

【问题讨论】:

我已将 position: fixed; 更改为 relative 并解决了问题,但显然现在导航没有固定在页面底部,所以它不是一个解决方案,但显然这就是哪里问题出在..有什么想法吗? 你能把剩下的代码贴出来吗? 我真的没有空间在评论中发布所有内容,而且它不允许我编辑我的第一篇文章,因为我是新人。结构基本上是 ,其中 nav 是上面的 CSS,navContent 是以下内容:#navContent width:550px; margin: 0 auto 0; 您实际上并不需要包含代码的所有颜色和渐变以及字体大小。尝试将其减少到重现问题所需的最低限度。 重复What is the best method of re-rendering a web page on orientation change? 【参考方案1】:

我遇到过两次这个问题。第一次,我不得不从

更改我的视口元标记
<meta name="viewport" content="width=device-width, user-scalable=no,initial-scale = 1.0">

<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no">

这行得通,但下一次就不行了,尽管结构基本相同……这一次,我不得不使用媒体查询,所以在 CSS 中,我将页脚设置为 position:fixed;bottom:0;width:100% 但紧随其后的是:

@media screen and (max-device-width: 480px) and (orientation:landscape) 
    #navbarwidth:480px;
    #footwidth:480px;

@media screen and (min-device-width: 481px) and (orientation:landscape) 
    #navbarwidth:1024px;
    #footwidth:1024px;

【讨论】:

【参考方案2】:

我认为这可能与您的宽度属性有关,而不是将其设置为固定像素,为什么不将其设置为 100%?

我已经在模拟器上测试过了,但不是真正的设备。它似乎在 ios 模拟器上运行良好。

这是我的意思的一个例子:

<html>
    <head>
        <style>
            #nav
                position:fixed;
                bottom:0px;
                left:0px;
                height:40px;
                width:100%;
                background:blue;
                text-align:center;
            
        </style>
    </head>
    <body>
        <div id="nav">
            <p>My Navigation bar</p>
        </div>
    </body>
</html>

【讨论】:

您好,nav div的宽度目前设置为100%,其中的div设置为550px;但我不认为这是导致问题的原因。当它从纵向到横向时,它会保持纵向屏幕的宽度大于 550 像素(我记得大约是 200 像素)。 @Kai Right 我认为这是您的样式表的整体问题。如果您发布了更多代码,即 html 和 css,我可以为您提供更多帮助。我建议你看看下面的link。它使用 jQuery 移动框架,将告诉您如何检测方向变化,并给出一个更改内容以适应方向变化的示例。如果你给 body 一个横向或纵向类,即 body.landscape 和 body.portrain 以及它们的创建样式,它应该可以解决你的问题。【参考方案3】:

this 修复呢?

@media screen and (orientation: landscape)
  .fix-orientation  background:red;  /* This will cause a style recalculation */

【讨论】:

这可能适用于 Galaxy S3 股票浏览器,但不适用于 Safari iPad(刚刚测试)。请参阅my answer 了解强制回流的有效解决方案。

以上是关于将 ipad 从纵向旋转到横向时,Div 保持相同的宽度的主要内容,如果未能解决你的问题,请参考以下文章

当我在 iOS7 的 iPad 中将视图从纵向旋转到横向或反之亦然时,UITextfield shouldChangeCharactersInRange 没有调用

元素无法从纵向切换到横向 ipad

即使 iPad 处于纵向模式,如何强制 iPad 上的电视处于横向模式

从横向旋转到纵向 (iPad) 后 UITableView 的奇怪行为

在两个视图之间切换以及从纵向切换到横向时出现 iPad 方向问题,反之亦然

从纵向模式旋转到横向模式时,搜索栏会丢失 FirstResponder