我正在创建一个移动网页,基本上是一个大的形式与几个文本输入。

然而(至少在我的Android手机上),每次我点击一些输入,整个页面都会放大到那里,掩盖页面的其余部分。是否有一些HTML或CSS命令禁用这种缩放移动网页?


当前回答

这应该是你需要的一切:

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

其他回答

使用元标签的解决方案对我来说并不管用(在Chrome win10和safari IOS 14.3上进行了测试),我也相信关于可访问性的担忧,正如Jack和其他人所提到的,应该得到尊重。

我的解决方案是只对被默认缩放破坏的元素禁用缩放。

为此,我为缩放手势注册了事件监听器,并使用event. preventdefault()来抑制浏览器的默认缩放行为。

这需要通过几个事件(触摸手势、鼠标滚轮和按键)来完成。下面是触摸板上的鼠标滚轮和捏手势的示例:

noteSheetCanvas.addEventListener("wheel", e => {
        // suppress browsers default zoom-behavior:
        e.preventDefault();

        // execution of my own custom zooming-behavior:
        if (e.deltaY > 0) {
            this._zoom(1);
        } else {
            this._zoom(-1);
        }
    });

如何检测触摸手势描述在这里:https://stackoverflow.com/a/11183333/1134856

我使用它来保持应用程序大部分部分的标准缩放行为,并在canvas元素上定义自定义缩放行为。

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

纯“user-scalable=no”就足够了,排除其他宽度和缩放参数就可以了。在我的情况下,我只是简单地在我的。在iOS 16上测试。

这应该是你需要的一切:

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

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

添加这些元标签来声明你的应用是“Web App capable”:

    <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" >

但是,只有当你的应用程序是自我维持的时候才使用这个功能,因为前进/后退按钮和URL栏以及共享选项都是禁用的。(你仍然可以左右滑动)然而,这种方法可以实现相当的应用程序的用户体验。全屏浏览器只有在网站从主屏幕加载时才会启动。我在根文件夹中加入了apple-touch-icon-180x180.png文件后,它才开始工作。

作为奖励,你可能还想包括这个的一个变体:

<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">

使用这篇文章和其他一些文章,我设法将其整理出来,以便使用以下代码兼容Android和iPhone/iPad/iPod。这是针对PHP的,您可以将相同的概念用于任何其他带有字符串搜索的语言。

<?php //Device specific headers
$iPod    = stripos($_SERVER['HTTP_USER_AGENT'],"iPod");
$iPhone  = stripos($_SERVER['HTTP_USER_AGENT'],"iPhone");
$iPad    = stripos($_SERVER['HTTP_USER_AGENT'],"iPad");
$Android = stripos($_SERVER['HTTP_USER_AGENT'],"Android");
$webOS   = stripos($_SERVER['HTTP_USER_AGENT'],"webOS");

if($iPhone || $iPod || $iPad){
    echo '<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" />';
} else {
    echo '<meta name="viewport" content="width=device-width, initial-scale=1.0" />';
}

?>