代码:
<select>
<option value="1">Home</option>
<option value="2">About</option>
<option value="3">Services</option>
<option value="4">Contact</option>
</select>
当我触摸select
时,iPhone会放大该元素(取消选择后不会缩小)。
我该怎样防止这种情况?或缩小?我不能使用user-scalable=no
因为我实际上需要这个功能。它适用于iPhone,选择菜单。
答案 0 :(得分:69)
可以通过将font-size:16px设置为所有输入字段来防止这种情况。
答案 1 :(得分:64)
<强>更新强>: 此方法不再适用于iOS 10。
它取决于Viewport,你可以用这种方式禁用它:
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"/>
添加user-scalable=0
,它也适用于您的输入。
答案 2 :(得分:18)
对于iOS,您可以通过简单地为操作系统认为足够的字体大小(> = 16px)来避免输入元素的缩放,从而避免需要缩放,例如:
input, select, textarea {
font-size: 16px;
}
这是各种框架也使用的解决方案,允许您避免使用元标记。
答案 3 :(得分:3)
这可能有助于查看:
Disable Auto Zoom in Input "Text" tag - Safari on iPhone
您基本上需要捕获点击表单元素的事件,然后不运行默认的iOS放大操作,但仍允许它缩放页面的其余部分。
编辑:
链接提及,
2)您可以使用javascript动态更改META视口标记 (请参阅使用Javascript启用/禁用iPhone Safari的缩放功能?)
详细说明:
如果在单击表单元素时无法更改标记,请放置一个模仿表单元素的div,当您按下它时,它会更改标记,然后调用输入。
答案 4 :(得分:3)
设置字体大小的最高投票答案对我不起作用。使用javascript to identify the client和答案中的元标记,我们可以防止iPhone在输入焦点上的缩放行为,同时保持缩放功能不变。
$(document).ready(function ()
{
if (/iPhone/.test(navigator.userAgent) && !window.MSStream)
{
$(document).on("focus", "input, textarea, select", function()
{
$('meta[name=viewport]').remove();
$('head').append('<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0">');
});
$(document).on("blur", "input, textarea, select", function()
{
$('meta[name=viewport]').remove();
$('head').append('<meta name="viewport" content="width=device-width, initial-scale=1">');
});
}
});
似乎我们必须使用blur-event上的新值替换元标记,只是为了删除它似乎不会触发更新的行为。
请注意,UI仍在初始化缩放,但它会再次快速缩小。我相信这是可以接受的,iPhone用户必须已经习惯于在适用的场景中浏览器正在进行一些动态缩放。
答案 5 :(得分:3)
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"/>
在iOS10.0.1上不再工作
font-size:16px
有效
答案 6 :(得分:2)
设置字体大小适用于输入元素,但不适合我的选择元素。对于select标签,我需要在用户开始与select元素交互时主动禁用视口缩放,然后在完成时重新启用它。
//the mousedown event seems to be the one that does the trick, versus 'focus', because focus fires after the zoom already happens.
$('select').mousedown(function(){
$('meta[name=viewport]').remove();
$('head').append('<meta name="viewport" content="width=device-width, maximum-scale=1.0, user-scalable=0">');
})
$('select').focusout(function(){
$('meta[name=viewport]').remove();
$('head').append('<meta name="viewport" content="width=device-width, initial-scale=yes">' );
})
答案 7 :(得分:0)
如果您正在使用Bootstrap,那么只需找到一个简单的修复:
如w3s中所述:您可以通过在元素中添加 .form-group-lg 来快速调整水平形式的标签和表单控件。
<form class="form-horizontal">
<div class="form-group form-group-lg">
<label class="control-label">Large Label</label>
<div>
<input class="form-control" type="text">
</div>
</div>
请参阅此页面上的第二个示例: http://www.w3schools.com/bootstrap/bootstrap_forms_sizing.asp
在iPhone SE上的Safari和Chrome中测试它,它就像一个魅力!
答案 8 :(得分:0)
所以这是最终修复,对我来说很有效。
@media screen and (-webkit-min-device-pixel-ratio:0) { select, textarea, input { font-size: 16px !important; } }
答案 9 :(得分:0)
这是jQuery解决方案,对我来说效果很好。
device_type = (ua.match(/iPad/i) || ua.match(/iPhone/)) ? "touchstart" : "click";
if(device_type === "touchstart" ){
$('head').append('<style type="text/css">input, select, textarea {font-size: 16px;}</style>');
}
答案 10 :(得分:0)
使用maximum-scale=1
而不是user-scalable=no
来防止表单缩放问题,而不会破坏用户捏住缩放的能力。
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
答案 11 :(得分:0)
我们在工作中遇到了这个问题,并找到了与@alex类似的答案。如果它是iOS设备,我们可以对其进行操作:
document.addEventListener('DOMContentLoaded', event => {
if (/iPhone/.test(navigator.userAgent) && !window.MSStream) {
const metaViewportTag = document.head.querySelector('meta[name="viewport"]')
metaViewportTag.content = 'width=device-width, initial-scale=1, maximum-scale=1'
}
})
这可以防止将窗体控件缩放到iOS上的焦点,并且仍然允许Android正常工作。