2015-09-20 19 views

Trả lời

29

Các mã sau đây khắc phục sự cố cho tôi (và một số người khác -> xem GitHub link):

body { 
    padding-right: 0px !important 
} 

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

Nguồn: https://github.com/jschr/bootstrap-modal/issues/64#issuecomment-55794181

+1

điều này làm việc cho tôi, trước đây tôi đã có mã như dưới đây, nơi nó cập nhật nội dung meta, nhưng điều này đã không làm việc trong trường hợp của tôi. Tôi kết hợp hai câu lệnh css ở trên vào một css body.modal-open duy nhất. – Ron

+3

FWIW: đặt 'body {padding-right: 0px; quan trọng;}', 'body' trên mỗi trang/lượt xem trong trang web/ứng dụng của bạn bất kể một phương thức có hiển thị hay không sẽ là' padding-right: 0px; '. _Could_ này có tác dụng phụ trong các lĩnh vực ứng dụng của bạn. Nếu bạn di chuyển 'padding-right' sang' .model-open {} 'bạn sẽ có kết quả tương tự nhưng sẽ đảm bảo rằng' body' chỉ được thực hiện theo cách này khi một phương thức được mở. Điều này làm việc vì lớp '.modal-open' được gắn vào thẻ' body', không phải một số thẻ lồng nhau trong 'body'. Ngoài ra, đi cho cụ thể bằng cách thiết lập các quy tắc như 'body.modal-open {...}' nếu bạn muốn. – WizzyBoom

+0

Để thêm vào điều này, một vấn đề tôi nhận thấy trên trang web mà chúng tôi quản lý là một số nội dung (cố ý) buộc phải xem bên ngoài và do đó thiết lập chiều rộng của cơ thể thành 100% cố định nó, vì nó phù hợp với chiều rộng html bằng cách kế thừa chiều rộng cửa sổ. – JSess

7

Tôi không có ý tưởng tại sao điều này đang xảy ra. Các ví dụ phương thức trên trang web bootstrap đang hoạt động tốt.

Dù sao đi nữa, đây là những gì tôi đã làm.

Tôi đã thay đổi thẻ meta chế độ xem, để buộc safari không phóng to. Tôi cũng không muốn lấy đi thu phóng từ người dùng, vì vậy tôi đã thay đổi lại khi người dùng loại bỏ phương thức.

Để buộc dừng zoom:

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

Để thay đổi nó trở lại mặc định:

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

Tôi cũng bị ảnh hưởng bởi vấn đề này và đã theo dõi xuống những gì tôi tin là các vấn đề.

Vấn đề (ít nhất là đối với tôi) có vẻ là khi nội dung trên trang không điền theo chiều dọc trang, làm cho iOS 9 Safari phóng to khi phương thức được hiển thị. Điều này sẽ giải thích tại sao ví dụ Bootstrap hoạt động như mong đợi - trang có rất nhiều nội dung (theo chiều dọc).

Tôi đoán rằng nó cần một số phép thuật CSS (chiều cao: 100% ở đâu đó?). Nếu bất cứ ai là một whiz với CSS đặc biệt là Bootstrap thì bất kỳ trợ giúp sẽ được đánh giá cao, trong khi chờ đợi tôi sẽ tiếp tục cố gắng tìm một sửa chữa & đăng trở lại đây với một bản cập nhật.

Cập nhật: Tôi đã triển khai CSS Sticky Footer và điều này đã giải quyết được vấn đề - không chính xác là bản sửa lỗi tôi muốn nhưng nó vẫn hoạt động. Để tham khảo, tôi đã sử dụng triển khai chân trang dính bởi Ryan Fait (http://ryanfait.com/sticky-footer/) nhưng tôi đoán bất kỳ chân trang dính nào cũng sẽ hoạt động.

+0

Hi DotNetHacker, bạn nghĩ gì về giải pháp của tôi. Bạn muốn giới thiệu nó? –

+0

Tôi nghĩ giải pháp của bạn sẽ tốt hơn nếu bộ chọn nằm trong lớp .modal thay vì theo id, khi đó bản sửa lỗi sẽ hoạt động đối với mọi phương thức bạn có trên trang web/trang web của mình. –

1

Dựa trên Sandeep Singh's Answer, nhưng điều chỉnh để lắng nghe cho tất cả các phương thức mở/đóng, và để lưu trữ các nội dung ban đầu.

Tôi đang sử dụng webpack, nhưng chỉ jQuery ($) với phương thức fixBootstrapModalZoomBug dưới đây là cần thiết.

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

thiếu một khung. nên: if (/iPad|iPhone|iPod/.test (navigator.userAgent.toLowerCase())) – iVenGO

+0

Cảm ơn. Làm việc cho tôi, nhưng chỉ sau khi tôi thay đổi iPad | iPhone để giảm trường hợp là tốt nếu (/ipad |iphone |ipod/.test (navigator.userAgent.toLowerCase())) –

9

Theo Bootstrap's Wall of Browser Bugs, đây là sự cố đã biết trong iOS 9 Safari.

Safari (iOS 9 +)
Đôi khi quá mức zoom tự động được áp dụng sau khi mở một phương thức, và> người dùng không được phép để thu nhỏ

WebKit bug #150715

Tiêu đề của lỗi WebKit là:

Phóng to quá mức được thực thi khi cơ thể ngắn và tràn: ẩn (vỡ mới iOS 9)

Dựa trên một phần của tiêu đề khi cơ thể là ngắn, tôi cố gắng thiết lập chiều cao tối thiểu của cơ thể với chiều cao khung nhìn, mà làm việc cho trang web của tôi mặc dù có thể không phải là một giải pháp chung:

body { 
    min-height: 100vh; 
} 
+1

Lỗi này đã được sửa bởi [Lỗi WebKit 152803 ] (https://bugs.webkit.org/show_bug.cgi?id=152803) – jacob

+1

Bạn đã cứu người đàn ông ngày của tôi. thanx –

+0

Tôi đã cố gắng như 10 giải pháp trước khi tôi thử điều này - không có gì làm việc nhưng điều này đã làm :) Tôi chỉ cần xác minh rằng điều này không có bất kỳ hiệu ứng lạ. –

3

Như đã lưu ý trong các ý kiến ​​của câu trả lời được chấp nhận, tốt nhất là áp dụng bản sửa lỗi cho chỉ lớp mở .modal.

body.modal-open{ 
    padding-right: 0 !important; 
    overflow-y: auto; 
} 
Các vấn đề liên quan