使用固定宽度视口元标记时,Android会忽略最大比例

log*_*lic 7 mobile html5 android viewport ios

我有一个固定宽度的网页(640像素宽).我希望这个页面缩小到移动设备的宽度.但是,如果设备的原始宽度大于640像素,我不希望它被拉伸.看起来很简单:

<meta name="viewport" content="width=640, maximum-scale=1.0" />
Run Code Online (Sandbox Code Playgroud)

这在iPad/iPhone中可以正常使用.但是,在Android平板电脑上(例如在横向模式下),内容会按比例放大以适合显示.换句话说,Android只是忽略了maximum-scale = 1.您可以在此处查看包含此问题的示例页面.为了完整起见,这里有来源:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Test Viewport</title>
    <meta name="viewport" content="width=640, maximum-scale=1.0" />
    <style>
      div.bar {
        position: absolute;
        width: 636px;
        height: 50px;
        background-color: yellow;
        border: 2px solid black;
        left: 50%;
        margin-left: -320px;
      }
    </style>
  </head>
  <body>
    <div class="bar">
    </div>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

我一直在使用视口元标记进行大量的研究和实验.我已经阅读了关于这个主题的所有内容,但没有看到这个看似基本的问题.

两个笔记:

  • 这不是目标密度dpi问题

  • 在这种情况下,将视口宽度设置为设备宽度没有帮助,因为内容宽度是固定的并且大于(例如)手机的纵向设备宽度.如果我设置width = device-width,页面将不会自动缩小以适合手机..

非常感谢.

log*_*lic 10

在更多地敲击桌子之后,我找到了一个解决方案:

不幸的是,iOS和Android似乎只是表现不同(Android显然没有按照规范所说的忽略最大规模).解决方案是使用JavaScript专门基于解决方案:

  • 如果屏幕宽度(参见下面的注释)大于或(在我的例子640)等于固定的页面宽度,然后视元标记的内容宽度设置为屏幕宽度

  • 否则将视口元标记的内容宽度设置为固定页面宽度(640)

普雷斯托.Lame它需要JavaScript专业化,但这就是生活.

需要注意的是JavaScript的screen.width在iPad/iPhone是不正确如果设备是横向模式(在iPad仍然报告纵向宽度而不是横向宽度,不同于Android的这得到它的权利在这种情况下!).因此,您需要在iPad/iPhone上检查window.orientation并使用screen.height而不是screen.width,如果您在横向.