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

Met*_*uru 362 html zoom mobile-safari viewport ios

我已经尝试了所有这三个无济于事:

<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;” />
Run Code Online (Sandbox Code Playgroud)

每个都是我通过谷歌搜索或SO搜索推荐的不同值,但是'user-scalable = X'值似乎都没有工作

我也尝试用逗号分隔值而不是分号,没有运气.然后我尝试只提供用户可扩展的值,仍然没有运气.

UPDATE

从Apple的网站得到这个,它的工作原理:

<meta name="viewport" content="width=device-width, user-scalable=no" />
Run Code Online (Sandbox Code Playgroud)

原来问题是非标准引号,因为我从使用它们的网站复制了元标记,哎呀

Bol*_*ock 688

您的代码将属性双引号显示为精美的双引号.如果您的实际源代码中存在花哨的引号,我猜这就是问题所在.

这适用于iOS 4.2中的Mobile Safari.

<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
Run Code Online (Sandbox Code Playgroud)

  • 这是花哨的报价,我从网站上复制了标签而没有注意到,谢谢你指出了! (12认同)
  • 也许这是在这里的长尾,但值得指出的是,这需要应用于"顶级"页面.如果您将此元标记应用于iframe,则除非元标记也应用于最顶层页面,否则它将无效. (5认同)
  • 为什么没有人会创建一款能够创建引人注目的报价的软件,这超出了我的范围。 (2认同)
  • @Traubenfuchs:排版. (2认同)
  • 这是一个相当古老的答案,并且解决了我曾经读过的问题,如果你将用户可扩展设置为否,这将导致可访问性问题.从iOS 10开始,它工作正常,允许用户根据需要进行缩放,但不能缩放输入框.无需设置大字体. (2认同)

Mat*_*tis 152

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

从发行说明:

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

据我所知,我们很幸运.

  • Apple做出了多么可怕的决定.现在,使用带有" - "和"+"按钮的微调器递减/递增数字会在iOS Safari上反复缩放页面.这些印刷机被解释为双击缩放,无法禁用它.iOS Chrome运行完美.令人沮丧. (6认同)
  • 世界将变得地狱 (6认同)
  • 虽然我已经搞砸了这个决定,但我真的很高兴苹果作为用户,因为我想在许多使用小元素的网站中强制使用这个功能. (5认同)
  • 苹果讨厌网络应用程序;他们希望我们所有人都能为 iOS 开发原生应用程序。这就是为什么他们让 Safari 处于过时的边缘,但仍然强迫每个人都使用它。本地应用程序在这里没有问题;如果你想让一个元素响应捏合手势,你可以允许它们;否则你就不会。“可访问性”问题在哪里?都是胡说八道。 (3认同)
  • 不,这太可怕了!我觉得我的工作很讨厌 (2认同)
  • 哎呀,谁会猜到?苹果做出的另一个荒谬选择 (2认同)
  • 留给Apple强制所有人使用可访问性“功能”,而不仅仅是在** Accessibility **设置中为其添加一个选项... (2认同)
  • 使用“touch-action” CSS 属性可以在较新的 iOS 版本上实现此功能。查看我的答案:/sf/answers/4351552481/ (2认同)

jer*_*ess 96

@mattis是正确的,iOS 10 Safari不允许您使用用户可伸缩属性禁用缩放缩放.但是,我在"gesturestart"事件中禁用了preventDefault.我只在iOS 10.0.2的Safari上验证了这一点.

document.addEventListener('gesturestart', function (e) {
    e.preventDefault();
});
Run Code Online (Sandbox Code Playgroud)

  • 在iOS 10上,我发现这很有效,但是如果你滚动页面然后在滚动时捏缩放,它就可以进行缩放.然后你发现自己陷入了新的缩放级别,直到你再次滚动.因此,除非您的页面主体不可滚动,否则这看起来不是一个好的解决方案.:( (8认同)
  • 什么是"双击"相当于`gesturestart`?[DBLCLICK](https://developer.mozilla.org/en/docs/Web/Events/dblclick)? (4认同)
  • 另请注意,如果要禁用缩放的双击方面.Mobile Safari还支持"触摸操作:操作"(属于"基本支持",禁用双击事件.此处的文档:https://developer.mozilla.org/en-US/docs/Web/CSS/touch-行动 (3认同)
  • 适用于 iOS 15 (2认同)

Fer*_*oss 49

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

要禁用捏缩放手势和双击缩放:

body {
  touch-action: pan-x pan-y;
}
Run Code Online (Sandbox Code Playgroud)

如果您的应用程序也不需要panning,即滚动,请使用:

body {
  touch-action: none;
}
Run Code Online (Sandbox Code Playgroud)

  • 这是目前的答案。 (6认同)
  • 这是我让它在 IOS 13.6.1 上工作的唯一方法,谢谢! (3认同)
  • 不幸的是,`touch-action: pan-x pan-y` 很糟糕并且损坏了。如果反复捏合,它仍会缩放约 5% 的时间。 (2认同)

Jos*_*igo 16

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

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

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


Art*_*hur 15

for iphones safari直到iOS 10"viewport"不是解决方案,我不喜欢这种方式,但我已经使用了这个javascript代码,它帮助了我

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

  • 它应该是`event.scale!== 1` (3认同)
  • @JamesPizzurro是的,你可以使用`event.scale!== undefined && event.scale!== 1` (3认同)
  • 似乎不适用于iOS 11.3. (3认同)

ang*_*iwi 11

user-scalable=0
Run Code Online (Sandbox Code Playgroud)

这不再适用于iOS 10. Apple删除了该功能.

除非你制作大平台应用程序,否则你现在无法在iOS上禁用缩放网站.

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

Lor*_*uer 8

尝试将以下内容添加到head-tag:

<meta name="viewport" content="width=device-width, initial-scale=1.0, 
minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
Run Code Online (Sandbox Code Playgroud)

另外

<meta name="HandheldFriendly" content="true">
Run Code Online (Sandbox Code Playgroud)

最后,无论是作为样式属性还是在css文件中,为基于webkit的浏览器添加以下文本:

html {
    -webkit-text-size-adjust: none
}
Run Code Online (Sandbox Code Playgroud)


ime*_*rat 7

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

<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" />
Run Code Online (Sandbox Code Playgroud)

以及 CSS 样式表的以下规则

html {
	-webkit-text-size-adjust: none;
	touch-action: manipulation;
}
Run Code Online (Sandbox Code Playgroud)


小智 7

实际上,Apple 在最新的 iOS 版本上禁用了 user-scalable=no。我试过作为指导,这种方式可以工作:

body {
  touch-action: pan-x pan-y;
}
Run Code Online (Sandbox Code Playgroud)

  • 我在IOS 15上试过了,不行! (2认同)

Nik*_*wda 5

在IOS 10.3.2中工作正常

    document.addEventListener('touchmove', function(event) {
        event = event.originalEvent || event;
        if (event.scale !== 1) {
           event.preventDefault();
        }
    }, false);
Run Code Online (Sandbox Code Playgroud)

谢谢@arthur和@aleclarson