目前还没有完美的解决方法。两个临时方案:
position: absolute
(不建议使用)选项2的详细信息:例如,当对话框打开时,您可以将根div(或任何具有滚动条的元素)设置为overflowY='hidden'
,并在对话框关闭时将其更改为overflowY=''
。(缺点是浏览器会滚动到顶部)
注意:
position: absolute
设置为解决。 - iplus26首先,使用这段代码只针对IOS设备。
//target ios
var isMobile = {
iOS: function() {
return navigator.userAgent.match(/iPhone|iPad|iPod/i);
}
}
if(isMobile.iOS()) {
jQuery('body').addClass('apple-ios');
}
body.apple-ios.modal-open {
position: fixed;
width:100%;
}
这个解决方案帮助我解决了IOS11输入问题: https://bitbucket.org/snippets/OlegChulakovStudio/RgBX8x
它还修复了令人讨厌的背景滚动,当你试图在模态框内滚动时 :)
总结: 您可以将position:fixed添加到body中,缓存window.pageYOffset并在弹出窗口关闭后滚动到缓存位置,以防止页面顶部移动。
试试这个,它可能会对你有帮助
//HTML
<head>
<style>
.ios-11-body-fixed {
position: fixed;
width: 100%;
}
</style>
</head>
//jQuery
$("#leadgen-modal").on('show.bs.modal', function () {
$('body').addClass('ios-11-body-fixed');
});
$('#leadgen-modal').on('hidden.bs.modal', function () {
$('body').removeClass('ios-11-body-fixed');
});
这个bug也会影响到iframe输入,因此我相信我找到的解决方法也将有助于模态框。
所需做的就是将以下CSS应用于iframe中的输入框。
input:hover {
cursor: text
}
我在 iOS 上有一个带有登录表单的 fixed
头部/横幅元素的问题。头部中有一个 button
,用于打开包含登录表单的模态窗口。
实际的模态窗口是 absolute
定位的,但头部/横幅元素是 fixed
的。
我用几行代码很容易地解决了这个问题。我所做的就是将 fixed
容器更改为 absolute
,但仅在登录表单打开时,它会通过输入标记实现魔法。
jQuery:
$('.ios #mob-login').on('click', function(){
$('body').toggleClass('login-open');
});
CSS:
.ios body.login-open #banner-wrapper {
position: absolute;
}
现在固定的标题变成了绝对的。 仅当登录框打开时,它才是iOS。
如果您有类似的问题,这可能会解决您的问题。
附:您需要一个脚本来检测并将类名ios
/ ios11
编写到<html>
或类似物中,但我不会在此帖子中进行说明。 您可以在外面找到许多解决方案。