所有移动浏览器的全屏网页和禁用缩放视口 meta 标签

44

我希望我的网页在所有移动设备上都可以全屏显示,并禁用缩放。

使用以下meta标签:


```html ```
<meta name="viewport" content="width=1165, user-scalable=no">
我能够在iPhone/iPad上实现此功能,但在Android设备上,该网站会被缩放到大约125%。 如果我使用标签

,页面会以正确的方式分段。
<meta name="viewport" content="width=max-device-width, user-scalable=no">

我得到了相反的结果。因此它在安卓上可以工作,但在iPad/iPhone上无法工作。


哈哈哈 :) 这就是我现在的看法...而且那时候它也成为了我的解决方案。在响应式网站的早期阶段,我觉得应该禁用缩放功能... - user1054080
4
开发者们,请不要这样做!这样可能会导致视力差的人完全无法使用您的网站!请只针对缩小的视图进行构建,但允许用户缩放。该功能存在是有原因的! - rickythefox
12个回答

84

不幸的是,每个浏览器都有自己的viewport meta标记实现方式。不同的组合将在不同的浏览器上起作用。

Android 2.2: viewport meta标签似乎根本不被支持。

Android 2.3.x/3.x: 通过设置user-scalable=no,您自己也禁用了viewport meta标签的缩放功能,这可能是为什么您的宽度选项没有效果的原因。要允许浏览器缩放您的内容,您需要设置user-scalable=yes,然后将最小和最大比例设置为相同的值,以防止它收缩或增长。尝试不断调整初始比例,直到您的站点完美适应。

<meta name="viewport" content="initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,width=device-width,height=device-height,target-densitydpi=device-dpi,user-scalable=yes" />

Android 4.x: Android 4.x遵循与2.3.x相同的规则,除了不再支持最小和最大缩放比例,如果使用user-scalable=yes,则用户可以随时进行缩放,将其设置为“no”表示忽略您自己的缩放比例,这就是我现在遇到的问题...在4.x中似乎无法同时禁用缩放和比例。

iOS/Safari(已测试4.x/5.x): 根据预期工作,您可以使用user-scalable=0来禁用缩放(关键字yes/no在4.x中不起作用)。iOS/Safari也没有target-densitydpi概念,因此应该将其排除以避免错误。您不需要最小和最大值,因为您可以按预期的方式关闭缩放。只需使用width或您将遇到iOS方向更改错误

<meta name="viewport" content="initial-scale=1.0,width=device-width,user-scalable=0" />

Chrome:与iOS一样,缩放工作如预期那样,最小值和最大值都被尊重,您可以通过使用user-scalable=no关闭缩放功能。

<meta name="viewport" content="initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,width=device-width,user-scalable=no" />
结论: 你可以使用一些相当简单的JS来根据基本的浏览器/设备检测设置内容。我知道这种检测方式受到谴责,但在这种情况下几乎是不可避免的,因为每个供应商都有自己的做法!希望这对那些与视口作斗争的人有所帮助,如果有人有一个在Android 4.x上禁用缩放而不使用视口的解决方案,请告诉我。
[编辑] Android 4.x Chrome浏览器(我认为在大多数国家中都是预装的):您可以确保用户无法缩放并且页面全屏显示。 缺点是:您必须确保内容具有固定宽度。 我没有在较低版本的Android上测试过。 要执行此操作,请参见示例:
<meta name="viewport" content="width=620, user-scalable=no" />

[编辑2]

iOS/Safari 7.1:自从v7.1,苹果推出了一个名为minimal-ui的新标志,用于 viewport meta 标签。为了协助全屏应用程序,它隐藏地址栏和底部工具栏,以获得全屏体验(不完全是 Full Screen API,但接近且不需要用户接受)。它也有一些bug,而且在 iPad 上无法使用。

<meta name="viewport" content="initial-scale=1.0,width=device-width,user-scalable=0, minimal-ui" />

[编辑3]

iOS/Safari 8 Beta 4:在此版本中,苹果已经删除了EDIT 2中提到的视口meta标签minimal-ui来源-WebKit注释


1
感谢这篇有用的文章。我一直在为Android上的Chrome浏览器苦恼。对于Android 4.x原生浏览器,我们通过设置像素视口宽度来解决上述问题。假设您想要一个固定比例为1.3,则视口宽度应为Math.floor((screen.availWidth * 10) / 13)。我们将该数字放入cookie中,然后强制重新加载以允许服务器端代码设置正确的元标记。 - Berend Engelbrecht

4

HTML

<head>
    <meta name='viewport' content='width=device-width,initial-scale=1,maximum-scale=1'>
</head>

jQuery

选项1:

$('meta[name=viewport]').attr('content','width='+$(window).width()+',user-scalable=no');

选项2:
var deviceSpecific = {
    iPad: 'width=1165,user-scalable=no'
};
if(navigator.userAgent.match(/iPad/i){
    $('meta[name=viewport]').attr('content',deviceSpecific.iPad);
}

如果你发现不一致,Option two 可以作为最后选择。

1
谢谢您的回答。我尝试了一下:在Android上,它仍然无法显示完整页面,并且缩放仍然可用。在iPad上,它也会缩放并几乎适合屏幕,但如果我从横向切换到纵向或反之亦然,它会保持那个分辨率...不好,请自行检查。 - user1054080
我在家里没有iToys的访问权限,但是既然你已经在使用jQuery,这应该可以回答你的问题,尽管可能有更有效率的方法... - Alastair

3

只需使用以下代码:

<meta name="HandheldFriendly" content="True" />

在我的三星Note II和HTC Desire上运行良好。


1
这适用于Android Chrome浏览器,在我的情况下,Chrome没有添加这个meta标签就无法检测视口。 - vangoz

2

我有一部三星Galaxy Note 4手机,并使用Chrome作为我的浏览器。我发现它忽略了viewport meta标签,但是通过使用HandheldFriendly标签,我成功让它起作用。最终,我使用了一组meta标签。在Android和iOS上都对我有效。

<meta name="HandheldFriendly" content="True">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="viewport" content="width=YOUR_SITE_WIDTH">

2

安卓从版本4.4.2开始修复了此问题。

<meta name="viewport" content="initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,width=device-width,height=device-height,target-densitydpi=device-dpi,user-scalable=yes" />

2
对于苹果设备来说很简单:
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
<meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1.0" />

第一个标签通过在 iPhone/iPod/iPad 主屏幕上的快捷方式打开时,以全屏模式运行 Web 应用程序。
第二个标签只能与第一个标签一起使用。可能的值是:default、black 和 black-translucent。
第三个标签将网站宽度锁定为其标准大小(1.0),并且不允许缩放。
注意:由于“apple-mobile”元标记在非 Apple 设备上被忽略,并且第三个标记在 HTML5 中是官方的,因此您可以同时使用它们。
对于 Android,您没有全局解决方案,因为不是每个人都使用默认的 Android Web 浏览器。请参见 Fullscreen Web App for Android 以下是一些其他有用的链接:
iOS提示:http://matt.might.net/articles/how-to-native-iphone-ipad-apps-in-javascript/ 所有已知的官方和非官方 meta 标记:https://gist.github.com/kevinSuttle/1997924

0
我正在使用这段代码来防止 iPhone 缩放并解决了问题,但另一个问题出现了。当我点击输入字段时,整个窗口会跳起来,然后将其位置设置为正常值,当我按下“前往”按钮时,同样的行为发生,窗口会跳动。我需要摆脱这种跳动,使窗口只调整到正常位置而不跳动。
function zoomDisable(){
  $('head meta[name=viewport]').remove();
  $('head').prepend('<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0" />');
}

0

我在这方面遇到了各种问题,甚至开始构建浏览器检测系统,以向不同的浏览器提供不同的视口标签。然后我决定简化我的操作,一切都正常了。将视口设置为您想要网站的宽度,然后离开,现在一切都正常了。

<meta name="viewport" content="width=1165 />

0

不管价值如何,这是我用来在我的Nexus 7(Android 4.2.2)/ Chrome上将1024px宽度的内容页面完全全屏显示的方法。 只适用于横屏模式,而无需使用javascript *:

width=device-width, initial-scale=.94, minimum-scale=0.8, maximum-scale=1.2, user-scalable=no

(我认为user-scalable=no实际上抵消了min-和max-scale。)我是通过试错得到了0.94的值,而不是通过任何涉及设备像素密度或类似内容的计算。

*即强制内容宽度与窗口匹配--我确实使用js有条件地编写了viewport meta内容。


0
<meta name="viewport" content="width=device-width; height=device-height; maximum-scale=1.4; initial- scale=1.0; user-scalable=yes"/>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接