在iOS 9 Safari上打开Bootstrap模式时,屏幕会放大

当我在iOS9 Safari上打开Bootstrap 3模式时,屏幕会放大。它在iPhone上的Chrome应用程序上按预期工作。 下面是显示问题的图片。

Safari截图:

safari截图

Chrome屏幕截图(预期行为):

铬的截图

下面的代码为我(和其他一些人 – >见GitHub链接)修复了这个问题:

body { padding-right: 0px !important } .modal-open { overflow-y: auto; } 

来源: https : //github.com/jschr/bootstrap-modal/issues/64#issuecomment-55794181

根据Bootstrap的浏览器漏洞之墙 ,这是iOS 9 Safari中的一个已知问题。

Safari(iOS 9+)
有时会在打开模式后应用过多的自动缩放,并且>用户不允许缩小

WebKit错误#150715

WebKit错误的标题是:

当身体短而溢出时,过度强制缩放:隐藏(新的iOS 9破损)

根据标题中身体短小的部分 ,我尝试将身体的最小高度设置为视口高度,这对于我的网站来说虽然可能不是一个通用的解决scheme:

 body { min-height: 100vh; } 

我不知道为什么会这样。 引导网站上的模式示例工作正常。

无论如何,这是我做的。

我更改了视口元标记,以强制Safari不缩放。 我也不想拿走用户的缩放,所以当用户放弃模式时,我将其改回。

强制停止缩放:

 $('#myModal').on('show.bs.modal', function (e) { document.querySelector('meta[name="viewport"]').content = 'width=device-width, minimum-scale=1.0, maximum-scale=1.0, initial-scale=1.0'; }) 

要将其更改回默认值:

 $('#myModal').on('hidden.bs.modal', function (e) { document.querySelector('meta[name="viewport"]').content = 'viewport" content="width=device-width, initial-scale=1'; }) 

这似乎是一个视口错误。

这里讨论: https : //www.reddit.com/r/web_design/comments/3la04p/psa_safari_on_ios9_has_a_media_query_bug/

从那个线程为我工作的代码:

 if(/iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream){ document.querySelector('meta[name=viewport]') .setAttribute( 'content', 'initial-scale=1.0001, minimum-scale=1.0001, maximum-scale=1.0001, user-scalable=no' ); } 

正如在接受的答案的评论中指出的那样,最好只将修复应用到.modal-open类。

 body.modal-open{ padding-right: 0 !important; overflow-y: auto; } 

基于Sandeep Singh's Answer ,但是调整为倾听所有模式的开启/closures,并存储原始内容。

我正在使用webpack,但只有jQuery( $ )与下面的fixBootstrapModalZoomBug方法是必需的。

 // fix-quirks.js - referenced from my main application's file var $ = require('jquery'); $(fixQuirks); function fixQuirks() { fixBootstrapModalZoomBug(); } function fixBootstrapModalZoomBug() { // Fix Bootstrap Modal zoom bug // https://stackoverflow.com/questions/32675849/screen-zooms-in-when-a-bootstrap-modal-is-opened-on-ios-9-safari if(/iPad|iPhone|iPod/.test(navigator.userAgent.toLowerCase())) { var m = $('meta[name=viewport]'); var originalContent = m.attr('content'); $('body').delegate('*','show.bs.modal',function(ev){ m.attr('content', 'width=device-width, minimum-scale=1.0, maximum-scale=1.0, initial-scale=1.0'); }).delegate('*','hidden.bs.modal',function(ev){ m.attr('content', originalContent); }); } } 

我也遇到了这个问题,并追查了我认为是什么问题。

这个问题(至less对我来说)似乎是当页面上的内容没有垂直填充页面时,导致iOS 9 Safari在显示模式时放大。 这将解释为什么Bootstrap示例按预期工作 – 页面有很多内容(垂直)。

我猜测它需要一些CSS魔术(一个高度:100%的地方?)。 如果有谁是CSS的特别Bootstrap的高手,那么任何帮助将不胜感激,在此期间,我会继续尝试find一个修复和发布在这里更新。

更新:我已经实现了一个CSS粘页脚,这已经解决了这个问题 – 不完全是我想要的修复,但仍在工作。 作为参考,我使用了Ryan Fait( http://ryanfait.com/sticky-footer/ )的粘性页脚实现,但是我想任何粘性页脚都可以工作。