2015-09-20 4 views

Antwort

29

Der folgende Code das Problem behoben für mich (und einige andere Leute -> siehe GitHub Link):

body { 
    padding-right: 0px !important 
} 

.modal-open { 
    overflow-y: auto; 
} 

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

+1

dies funktionierte für mich, ich hatte zuvor den Code wie unten, wo es den Meta-Inhalt aktualisiert, aber das hat in meinem Fall nicht funktioniert. Ich habe die beiden obigen css-Anweisungen in einem einzigen css body.modal-open zusammengefasst. – Ron

+3

FWIW: Einstellung 'body {padding-right: 0px! Wichtig;}', der 'body' auf jeder Seite/Ansicht in Ihrer Website/App unabhängig davon, ob ein Modal sichtbar ist oder nicht wird' padding-right: 0px; '. Dies kann negative Auswirkungen auf Bereiche Ihrer App haben. Wenn Sie das 'padding-right' in' .model-open {} 'verschieben, haben Sie das gleiche Ergebnis, stellen aber sicher, dass der 'body' nur auf diese Weise ausgeführt wird, wenn ein Modal geöffnet ist. Dies funktioniert, weil die Klasse ".modal-open" an das Tag "body" angehängt ist, nicht an ein verschachteltes Tag innerhalb des "body". Gehen Sie auch auf Spezifität, indem Sie die Regel als body.modal-open {...} definieren, wenn Sie das möchten. – WizzyBoom

+0

Ein Problem, das ich auf einer von uns verwalteten Website bemerkte, war, dass einige Inhalte (absichtlich) außerhalb der Ansicht gezwängt wurden. Daher wurde die Körperbreite auf 100% festgelegt, indem sie durch Vererbung an die HTML-Breite angepasst wurde die Fensterbreite. – JSess

7

Ich habe keine Ahnung, warum dies geschieht. Modale Beispiele auf der Bootstrap-Website funktionieren einwandfrei.

Wie auch immer, hier ist was ich getan habe.

Ich habe das Viewport-Meta-Tag geändert, damit Safari nicht zoomt. Ich wollte auch nicht den Zoom vom Benutzer wegnehmen, also änderte ich ihn zurück, als der Benutzer das Modal wegwarf.

zu zwingen, um den Zoom zu stoppen:

$('#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'; 
})  

es zu Standard zurück zu ändern:

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

Ich habe auch dieses Problem und haben aufgespürt, was ich das zu glauben getroffen worden Problem.

Das Problem (zumindest für mich) scheint zu sein, wenn der Inhalt auf der Seite nicht die Seite vertikal füllt, was dazu führt, dass iOS 9 Safari beim Anzeigen des Modales heranzoomt. Dies würde erklären, warum das Bootstrap-Beispiel wie erwartet funktioniert - die Seite hat viel Inhalt (vertikal).

Ich vermute, dass es etwas CSS-Magie braucht (eine Höhe: 100% irgendwo?). Wenn irgendjemand ein Experte mit CSS ist, vor allem Bootstrap, dann würde jede Hilfe geschätzt werden, in der Zwischenzeit werde ich weiter versuchen, einen Fix & Post hier mit einem Update zu finden.

Update: Ich habe eine CSS Sticky Footer implementiert und dies hat das Problem angesprochen - nicht genau die Korrektur, die ich wollte, aber es funktioniert trotzdem. Als Referenz habe ich die Sticky-Footer-Implementierung von Ryan Fait (http://ryanfait.com/sticky-footer/) verwendet, aber ich denke, dass jeder sticky footer funktionieren würde.

+0

Hallo DotNetHacker, was Sie von meiner Lösung halten. Würdest du es weiterempfehlen? –

+0

Ich denke, Ihre Lösung wäre besser, wenn der Selektor in der Klasse .modal und nicht in der ID wäre. Dann funktioniert die Korrektur für jedes Modal, das Sie auf Ihrer Webseite/Site haben. –

1

Basierend auf Sandeep Singh's Answer, aber angepasst für alle modalen Öffnen/Schließen, zu hören und den ursprünglichen Inhalt zu speichern.

Ich benutze Webpack, aber nur jQuery ($) mit der fixBootstrapModalZoomBug Methode wird benötigt.

// 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); 
    }); 
    } 
} 
+0

fehlt eine Klammer. sollte sein: if (/iPad|iPhone|iPod/.test (navigator.userAgent.toLowerCase())) – iVenGO

+0

Danke. Arbeitete für mich, aber erst nachdem ich das iPad | iPhone in Kleinbuchstaben geändert habe, auch wenn (/ipad|iphone|ipod/.test (navigator.userAgent.toLowerCase())) –

9

Nach Bootstrap des Wall of Browser Bugs, ist dies ein bekanntes Problem in iOS 9 Safari.

Safari (iOS 9+)
Manchmal übermäßiger automatischer Zoom wird nach dem Öffnen eines modalen angewandt, und> der Benutzer nicht

zu verkleinern ist erlaubt

WebKit bug #150715

Der Titel Der WebKit Bug ist:

Übermäßiger erzwungener Zoom, wenn der Körper kurz ist und Überlauf: versteckt (neue iOS 9 Bruch)

Basierend auf dem Teil des Titels , wenn der Körper kurz ist, habe ich versucht, den Körper der Mindesthöhe der Darstellungshöheneinstellung, die eine allgemeine Lösung sein kann, nicht jedoch für meine Website gearbeitet:

body { 
    min-height: 100vh; 
} 

+1

Dieser Fehler wurde von [WebKit Bug 152803 behoben ] (https://bugs.webkit.org/show_bug.cgi?id=152803) – jacob

+1

Du hast meinen Tag-Mann gerettet. thanx –

+0

Ich habe versucht, wie 10 Lösungen, bevor ich das versuchte - nichts hat funktioniert, aber das tat :) Ich muss nur überprüfen, dass dies keine seltsamen Auswirkungen hat. –

3

Wie in den Kommentaren der akzeptierten Antwort angemerkt, ist es am besten, den Fix nur auf die .modal-open-Klasse anzuwenden.

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