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

时间:2010-12-17 17:00:25

标签: html css mobile

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

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

13 个答案:

答案 0 :(得分:396)

这应该是你需要的一切

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

答案 1 :(得分:148)

对于那些迟到的人来说,kgutteridge的回答对我不起作用,而Benny Neugebauer的回答包括target-densitydpi(a feature that is being deprecated)。

但这对我有用:

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

答案 2 :(得分:48)

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

以设备宽度渲染页面,不要缩放:

<meta name="viewport" content="width=device-width, initial-scale=1.0">

防止缩放 - 并阻止用户进行缩放:

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

删除所有缩放,全部缩放

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

答案 3 :(得分:39)

您可以使用:

<head>
  <meta name="viewport" content="target-densitydpi=device-dpi, initial-scale=1.0, user-scalable=no" />
  ...
</head>

但请注意, Android 4.4 属性target-densitydpi is no longer supported。因此,对于Android 4.4及更高版本,建议将以下内容作为最佳做法:

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

答案 4 :(得分:22)

似乎只是将meta标签添加到index.html并不妨碍页面缩放。添加以下样式将起到神奇作用。

:root {
  touch-action: pan-x pan-y;
  height: 100% 
}

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

答案 5 :(得分:13)

由于最初的问题仍然没有解决办法,所以这里我的纯CSS两分钱。

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

&#13;
&#13;
input[type="text"],
input[type="number"],
input[type="email"],
input[type="tel"],
input[type="password"] {
  font-size: 16px;
}
&#13;
&#13;
&#13;

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

如果您的基本字体大小不是手机上的16px或16px,则可以使用媒体查询。

&#13;
&#13;
@media screen and (max-width: 767px) {
  input[type="text"],
  input[type="number"],
  input[type="email"],
  input[type="tel"],
  input[type="password"] {
    font-size: 16px;
  }
}
&#13;
&#13;
&#13;

答案 6 :(得分:6)

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

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


<style>
body{
        touch-action: manipulation;
    }
</style>

答案 7 :(得分:1)

您只需将以下'meta'元素添加到“head”中即可完成任务:

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

添加“width”,“initial-scale”,“maximum-width”,“maximum-scale”等所有属性可能无法正常工作。因此,只需添加上述元素即可。

答案 8 :(得分:0)

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' />

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

作为奖励,您可能还希望包括该变量的一种变体:

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

答案 9 :(得分:0)

DELIMITER //

CREATE PROCEDURE submitOrder(
IN customerId INT, 
IN productId INT, 
IN qty INT, 
OUT orderId INT)
BEGIN
DECLARE orderId, storeId, staffId, qty, customerId, productId INT; 
DECLARE listPrice DECIMAL(10,2); 
DECLARE discount DECIMAL(4,2);

SELECT MAX(order_id)+1 FROM orders INTO @orderId;

SELECT s.store_id
FROM stocks AS s
INNER JOIN products AS p USING (product_id)
WHERE p.product_id = s.product_id
ORDER BY s.quantity DESC
LIMIT 1
INTO @storeId;

SELECT staffs.staff_id 
FROM staffs
INNER JOIN stores
WHERE staffs.store_id = stores.store_id
LIMIT 1
INTO @staffID; 

SET @qty = 1;

SELECT products.product_id
FROM products
WHERE products.product_id = productId;

SELECT products.list_price
FROM products
INTO @listPrice;

INSERT INTO orders VALUES (
@orderId, @customerId, 1, CURDATE(), ADDDATE(CURDATE(), INTERVAL 7 day), NULL, @storeId, @staffId);

INSERT INTO order_items
VALUES (@orderId, 1, @productId, @qty, @listPrice,0);

END//

DELIMITER ;

请将该脚本添加到“禁用捏”,点击并聚焦“缩放”

答案 10 :(得分:0)

使用 meta-tag 的解决方案对我不起作用(在 Chrome win10 和 safari IOS 14.3 上测试),而且我也相信 Jack 和其他人提到的有关可访问性的担忧应该受到尊重.

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

我通过为缩放手势注册事件侦听器并使用 event.preventDefault() 抑制浏览器默认缩放行为来做到这一点。

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

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

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

此处描述了如何检测触摸手势:https://stackoverflow.com/a/11183333/1134856

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

答案 11 :(得分:0)

使用这篇文章和其他一些文章,我设法解决了这个问题,以便使用以下代码与 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" />';
}

?>

答案 12 :(得分:-2)

document.addEventListener('dblclick', (event) => {
    event.preventDefault()
}, { passive: false });