如何在Mobile Safari上禁用视口缩放?


393

我尝试了所有这三个方法都无济于事:

<meta name=”viewport” content=”width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;” />

<meta name=”viewport” content=”width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=false;” />

<meta name=”viewport” content=”width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=no;” />

每个都是我发现由Google搜索或SO搜索推荐的不同值,但是' user-scaleable = X '值似乎都不起作用

我还尝试了用逗号分隔值,而不是分号,没有运气。然后,我尝试仅具有user-scalable价值,仍然没有运气。


更新

从苹果网站上得到了它,它的工作原理是:

<meta name="viewport" content="width=device-width, user-scalable=no" />

事实证明,问题出在非标准引号,因为我从使用它们的网站复制了元标记,哎呀


6
如果您要制作游戏,那么控制缩放可能是有效的。但是,在几乎所有其他情况下,都强烈建议不要这样做。不幸的是,它已成为许多移动开发人员的标准做法。如果用户想要放大以便能够更轻松地阅读文本等,阻止他们这样做不是很好。
user2268788

72
我们正在基于移动Web的应用程序上禁用缩放。您无法放大本机iOS应用程序,并且在我们的Web应用程序中不需要。如果您的网站或应用程序是针对移动设备优化的,则您的用户将无需缩放。总是有禁用缩放的用例。不一定总是采用一种方法。
布拉德利洪水

10
是的,我并没有遵循这样的逻辑:在移动优化网站上禁用缩放是件坏事。更糟糕的是,视口会意外平移,因为屏幕在不需要进行缩放的站点上意外地平移和缩放了输入。实际上,如果您的用户需要放大您的移动优化网站上的内容,那么问题出在设计上,而不是缺乏缩放。
内森·霍恩比

3
@NathanHornby:禁用缩放的问题是缺乏对用户偏好的尊重。不同的用户喜欢不同的文本大小,视力好的年轻观众可能会喜欢看更多的内容,而视力差的观众则不能使用没有大文字的内容。其他人有帕金森症,但仍然有良好的视力,因此他们更喜欢超大按钮,但通常不会从大文本中受益。
Lie Ryan

4
@NathanHornby并不意味着设计师一定做错了什么。它只是意味着用户,无论出于何种原因,都希望放大。捏缩放是所有触摸屏手机的标准功能。拥有此类电话的任何用户都知道如何使用它。我知道这是一个老问题,但是我仍然对那些坚持破坏手机功能的众所周知的开发人员感到沮丧,因为他们认为这会使他们的设计看起来更好。
user1751825

Answers:


718

您的代码将属性双引号显示为花式双引号。如果您的实际源代码中包含花哨的引号,我想可能是问题所在。

这对我适用于iOS 4.2中的Mobile Safari。

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

12
那是花哨的引号,我是从网站上复制标签的,没有注意到,谢谢指出!
MetaGuru 2010年

5
也许这是长尾巴,但值得指出的是,这需要在“顶层”页面上应用。如果您将此meta标记应用于iframe,则除非meta标记也应用于最顶层的页面,否则它将无法正常工作。
founddrama

2
为什么没有人会创建一款能够创建引人注目的报价的软件,这超出了我的范围。
Traubenfuchs 2015年

3
@Traubenfuchs:印刷术。
BoltClock

3
这是一个比较老的答案,我已经读过一个问题,如果您将user-scaleable设置为no,这将导致可访问性问题。从iOS 10开始,它可以正常工作,允许用户根据需要缩放,但不能缩放输入框。也无需设置大字体。
大卫

161

对于正在寻找iOS 10解决方案的人们,在iOS 10的user-scaleable=noSafari中已被禁用。原因是Apple试图通过允许人们放大网页来改善可访问性。

从发行说明

为了提高Safari中网站的可访问性,即使网站在视口中设置了user-scalable = no,用户现在也可以捏缩放。

据我了解,我们很不走运。


6
苹果公司的决定真糟糕。现在,使用带有“-”和“ +”按钮的微调器来递增/递减数字,可以在iOS Safari上反复放大和缩小页面。印刷机被解释为双击以进行缩放,而无法禁用它。iOS Chrome完美运行。令人沮丧
保罗

5
尽管我为这个决定感到困惑,但是作为一个用户,我对Apple感到非常高兴,因为我想在许多内部使用小元素的网站中强制使用此功能。
比绍伊·汉娜

10
世界快要死了
小家伙

2
哎呀,谁会猜到?苹果做出的另一个荒谬选择
埃米尔·皮德森

3
留给苹果公司强制所有人使用可访问性功能,而不仅仅是在可访问性设置中为其添加一个选项...
Lennholm

98

@mattis是正确的,因为iOS 10 Safari不允许您使用用户可缩放属性禁用捏缩放。但是,我在'gesturestart'事件上使用了preventDefault来禁用它。我仅在iOS 10.0.2的Safari上对此进行了验证。

document.addEventListener('gesturestart', function (e) {
    e.preventDefault();
});

8
在iOS 10上,我发现这可行,但是如果您滚动页面,然后在仍滚动时捏住缩放,则可以进行缩放。然后,您会发现自己陷入了新的缩放级别,直到再次滚动。因此,除非您的页面正文不可滚动,否则这似乎不是一个好的解决方案。:(
Rand Scullard '16

1
一个警告:用户仍然可以双击屏幕,该屏幕将/可以缩放并且不会被屏幕捕获。
斯蒂芬

1
有时仍然可以通过双击屏幕来进行缩放。:(
Jarzka '16

4
什么是“双击” gesturestartdblclick
lowtechsun

3
另请注意,如果要禁用缩放的双击功能。Mobile Safari还支持“触摸动作:操纵”(属于“基本支持”,它会禁用双击事件。此处提供文档:developer.mozilla.org/en-US/docs/Web/CSS/touch-action
jeremypress

15

适用于iOS 10或更高版本的iPhone Safari浏览器“视口”不是解决方案,我不喜欢这种方式,但是我使用了此javascript代码,它对我有帮助

 document.addEventListener('touchmove', function(event) {
    event = event.originalEvent || event;
    if(event.scale > 1) {
      event.preventDefault();
    }
  }, false);

3
应该是event.scale !== 1
aleclarson '17

@aleclarson event.scale> 1包括条件event.scale!== 1
Arthur Tsidkilov

@aleclarson用于阻止在Mobile Safari上缩放是足够的,我写道我不喜欢这种方式,通常因为它必须用于视口,但是在IOS iphone 6及更高版本上它不起作用(我认为您的event.scale !== 1应该更正确,但是所有这一切都不正确,这有点像黑客入侵)
Arthur Tsidkilov

@aleclarson似乎使用!==破坏了Android 4.4中的本机浏览器;event.scale未定义。
James Pizzurro

3
@JamesPizzurro是的,您可以使用event.scale !== undefined && event.scale !== 1
aleclarson

11
user-scalable=0

这在iOS 10上不再起作用。Apple删除了该功能。

除非您制作总平台应用,否则您无法立即在iOS上禁用缩放网站。


真是令人b目结舌...知道为什么要删除它吗?
Stephen Tetreault,

3
@smt他们不希望网络体验与应用商店上的应用体验相竞争。
Marvin Danig '18

2
@marvindanig是...因为他们要支付99美元的费用才能制作出一个应用程序,否则该应用程序可以很容易地成为适用于所有平台的网页应用程序。同样,Apple也不喜欢“网络体验”,如果这意味着用户+开发人员可以避开围墙花园。这一切都与苹果的力量和金钱有关:(
humanityANDpeace

实际上,可以在更新的iOS版本上使用此功能。看到我的答案:stackoverflow.com/a/62165035
Feross

7

尝试将以下内容添加到您的标签中:

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

另外

<meta name="HandheldFriendly" content="true">

最后,作为样式属性或在您的css文件中,为基于Webkit的浏览器添加以下文本:

html {
    -webkit-text-size-adjust: none
}

在较新的iOS版本上不起作用
Feross

7

我使用以下代码在iOS 12中运行它:

if (/iPad|iPhone|iPod/.test(navigator.userAgent)) {
  window.document.addEventListener('touchmove', e => {
    if(e.scale !== 1) {
      e.preventDefault();
    }
  }, {passive: false});
}

使用第一个if语句,我确保它仅在iOS环境中执行(如果在Android环境中执行,则滚动行为将被破坏)。另外,请注意passive设置为的选项false


在我的iOS 12.3.1上不起作用,这是测试链接:https
Jess


4

我设法通过将以下内容添加到HTML标头中来停止这种行为。这适用于移动设备,因为桌面浏览器在使用鼠标滚轮时支持缩放。在桌面浏览器上这没什么大不了的,但考虑到这一点很重要。

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

以及CSS样式表的以下规则

html {
	-webkit-text-size-adjust: none;
	touch-action: manipulation;
}


在较新的iOS版本上不起作用
Feross

3

有时,content标记中的其他指令会弄乱Apple关于如何布局页面的最佳猜测/启发式,您只需禁用捏缩放即可。

<meta name="viewport" content="user-scalable=no" />

在较新的iOS版本上不起作用
Feross

2

在Safari 9.0及更高版本中,您可以在视口meta标签中使用“ 缩小以适合”,如下所示

<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">

在较新的iOS版本上不起作用
Feross

0

我愚蠢地有一个包装器div,其宽度以像素为单位。其他浏览器似乎足够智能,可以解决此问题。一旦将宽度转换为百分比值,它就可以在Safari移动版上正常工作。很烦人。

.page{width: 960px;}

.page{width:93.75%}

<div id="divPage" class="page">
</div>

0

使用CSS touch-action属性是最优雅的解决方案。在iOS 13.5上测试。

要禁用双指缩放手势,然后点按两次以缩放:

body {
  touch-action: pan-x pan-y;
}

如果您的应用也不需要平移(即滚动),请使用以下命令:

body {
  touch-action: none;
}

-3

为了符合WAI WCAG 2.0 AA的可访问性要求,您绝不能禁用收缩缩放。(WCAG 2.0:SC 1.4.4调整AA级文本的大小)。您可以在此处阅读有关它的更多信息: 移动辅助功能:WCAG 2.0和其他W3C / WAI准则如何应用于移动,2.2缩放/放大


13
这不是一个答案..许多客户还要求阻止缩放..所以我不能将其作为一般规则

9
辅助功能缩放不是页面(与此无关的任何应用)的责任。提供可访问的缩放工具是操作系统的责任。如今,每个操作系统都提供了这样的功能,该功能适用​​于屏幕缩放,并且它不应干扰页面的缩放本身,因为这并不是为了可访问性而设计的。
Bruno Finger

4
这样的东西总是有有效的用例。由于某种原因,几乎所有网络文学似乎都认为网络仅用于制作博客。就像JavaScript的有效用例一样eval(),禁用缩放也是如此。我将其用于与蓝牙扫描仪结合使用的网络应用程序,以防止在扫描条形码时页面放大。
user128216 2015年

3
我完全同意可访问性建议的目的,但是毫无疑问,有时不需要或不需要缩放,甚至可能破坏用户体验。另外,您知道,客户。
Chuck Le Butt 2015年

2
我想说的是,在html / javascript应用程序中,这些准则不适用。毕竟,本机应用程序可以让您放大和缩小吗?
约尔根Sigvardsson

-5

这个应该可以在iphone等上使用。

<meta name="viewport" content="width=device-width, initial-scale=1 initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.