如何在移动网页上"禁用"缩放?

Mar*_*man 301 html css mobile

我正在创建一个移动网页,它基本上是一个包含多个文本输入的大表单.

但是(至少在我的Android手机上),每次点击某些输入时,整个页面都会缩放,遮挡页面的其余部分.是否有一些HTML或CSS命令可以在moble网页上禁用这种缩放?

kgu*_*dge 417

这应该是你需要的一切

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

  • 每个视障人士,包括我自己,都比这更讨厌.我必须进行屏幕抓取才能执行此操作,然后在图片查看器中放大它们. (38认同)
  • 这也会禁用用户一般放大的能力,以及浏览器自动调整页面适合视口的方式的能力 - 马丁正在寻找的是一种禁用'放大输入点击'的方法行为. (22认同)
  • 第二个元标记有什么作用?第一个元标记中是不是'width = device-width`? (6认同)
  • 现在有人在Posterous做了这个,而字体为12px所以它是不可读的,我无法找到解决方法. (3认同)
  • 它在Galaxy Nexus 4.1.1上的chrome中不起作用. (3认同)
  • 这似乎不适用于 iOS 7。请参阅 lukad03 答案 (2认同)

Luk*_*ler 152

对于那些迟到的人来说,kgutteridge的答案对我不起作用,Benny Neugebauer的答案包括target-densitydpi(一个被弃用功能).

但这对我有用:

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

  • 现在这是正确的答案.其他答案不再有效(至少对于iOS 7而言). (7认同)
  • 有人在iOS 10.x上试过这个我不认为它有效吗? (7认同)
  • 由于 Apple 的 SFB 问题,仍然无法在 Safari/iOS 11 上运行。 (2认同)
  • 有一个小小的区别 - kgutteridge 的答案是“user-scalable=0”而不是“user-scalable=no”。我不确定这有什么区别。 (2认同)

SW4*_*SW4 50

这里有许多方法 - 虽然位置通常是用户在进行可访问性缩放时不应受到限制,但可能会出现以下情况:

在设备的宽度处渲染页面,不要缩放:

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

防止缩放 - 并防止用户缩放:

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

删除所有缩放,所有缩放

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

  • “通常用户不应该受到限制” 我从未见过可以缩放的移动应用程序。为什么移动网络应用程序应该有所不同?如果您正确使用 rem 单位,用户可以简单地增加其设备上的字体大小。 (3认同)
  • “通常用户不应该受到限制”,但是在为移动设备开发 Web 应用程序时,您通常必须处理“输入焦点放大”。我发现在这种情况下禁用缩放很有帮助。 (2认同)

Ben*_*uer 39

您可以使用:

<head>
  <meta name="viewport" content="target-densitydpi=device-dpi, initial-scale=1.0, user-scalable=no" />
  ...
</head>
Run Code Online (Sandbox Code Playgroud)

但请注意,对于Android 4.4,不再支持属性target-densitydpi.因此,对于Android 4.4及更高版本,建议将以下内容作为最佳做法:

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

  • 这对我不起作用。我的网站在 Android 上的 FF 中仍然可扩展。 (2认同)

Api*_*Api 35

似乎只是向 index.html 添加元标记并不能阻止页面缩放。添加以下样式将发挥魔力。

:root {
  touch-action: pan-x pan-y;
  height: 100% 
}
Run Code Online (Sandbox Code Playgroud)

编辑:演示:https : //no-mobile-zoom.stackblitz.io

  • 这应该被接受修复,也适用于 mobile safari ios13 atm (3认同)
  • 我必须使用 html 作为我的选择器。:root 对我来说在 iOS 13 上不起作用,但 html 可以。PS,编辑:演示链接不再起作用。 (2认同)

Aza*_*lov 23

由于最初的问题仍然没有解决方案,这里是我的纯CSS两分钱.

移动浏览器(大多数)要求输入中的字体大小为16px.所以

input[type="text"],
input[type="number"],
input[type="email"],
input[type="tel"],
input[type="password"] {
  font-size: 16px;
}
Run Code Online (Sandbox Code Playgroud)

解决了这个问题.因此,您无需禁用站点的缩放和松散辅助功能.

如果移动设备上的基本字体大小不是16px或不是16px,则可以使用媒体查询.

@media screen and (max-width: 767px) {
  input[type="text"],
  input[type="number"],
  input[type="email"],
  input[type="tel"],
  input[type="password"] {
    font-size: 16px;
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 为什么这个解决方案的票数如此之少?这是迄今为止避免表单单击缩放的最佳方法。 (4认同)
  • 是的; 这也解决了我的问题!我不想完全禁用缩放,而这正是我所需要的。 (2认同)
  • 您还可以为整个页面设置 `font-size: 1rem`,这样字体可以很好地缩放,同时避免“焦点缩放”问题。 (2认同)

小智 10

<script type="text/javascript">
document.addEventListener('touchmove', function (event) {
  if (event.scale !== 1) { event.preventDefault(); }
}, { passive: false });
</script>
Run Code Online (Sandbox Code Playgroud)

请添加脚本以禁用捏合、点击、聚焦缩放


Sar*_* Ak 9

请尝试添加此元标记和样式

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


<style>
body{
        touch-action: manipulation;
    }
</style>
Run Code Online (Sandbox Code Playgroud)

  • 不应将“touch-action”设置为“none” - https://developer.mozilla.org/en-US/docs/Web/CSS/touch-action#Values (2认同)

tlt*_*tlt 8

Web 应用程序的可能解决方案:虽然无法再在 iOS Safari 中禁用缩放,但从主屏幕快捷方式打开站点时它将被禁用。

添加这些元标记以将您的应用程序声明为“支持 Web 应用程序”:

    <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" name="viewport" >
    <meta name="apple-mobile-web-app-capable" content="yes" >
Run Code Online (Sandbox Code Playgroud)

但是,只有在您的应用程序是自我维持的情况下使用此功能,因为前进/后退按钮和 URL 栏以及共享选项被禁用。(虽然你仍然可以左右滑动)但是这种方法可以启用类似 ux 的应用程序。全屏浏览器仅在从主屏幕加载站点时启动。我也只有在我的根文件夹中包含一个 apple-touch-icon-180x180.png 后才能让它工作。

作为奖励,您可能还想包含它的一个变体:

<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
Run Code Online (Sandbox Code Playgroud)


小智 5

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

pure"user-scalable=no"就足够了,排除其他宽度和比例参数应该适合您的情况。就我而言,我只是简单地将代码片段添加到我的 . 在 iOS 16 上测试。