2012-10-17 36 views
13

Tôi đang sử dụng Twitter Bootstrap's modal, nhưng tôi phải thay đổi vị trí của chúng thành tuyệt đối, nguyên nhân là tôi cần chúng để cuộn nguyên nhân của màn hình nhỏ. Đáng buồn thay, với điều này, các modals mở đến một vị trí cố định của trang web và không phải trên khu vực được xem. Có cách nào để mở chúng (và có thể cuộn) đến màn hình những gì tôi hiện đang xem không?Đặt lớp phương thức ở giữa màn hình đã xem

Picture of my problem

CSS:

.modal { 
    width: 845px; 
    margin: -250px 0 0 -430px; 
    background-color: #f6f5ed; 
    position: absolute; 
    border: 1px solid #cdc4b2; 
    top: 50%; 
    left: 50%; 
} 

Trả lời

14

chủ đề này: Modal plugin of Bootstrap 2 is not displayed by the center có câu trả lời đúng, được đăng ở đây cũng như:

$('#YourModal').modal().css(
      { 
       'margin-top': function() { 
        return window.pageYOffset-($(this).height()/2); 
       } 
      }); 
+0

Cảm ơn, điều này đã giúp! :) – Stefanie

+0

Điều đó giúp thực sự nhưng giờ đây, phương thức này đã bắn hết tất cả các tài liệu trên trang web không dành cho điện thoại di động cho tôi. – mbrochh

+0

xem câu trả lời tôi đưa ra ngay bây giờ, tôi đã duy trì từ css chỉ – Innodel

1

Sử dụng vị trí "cố định" không phải là "tuyệt đối".

Xem thêm chi tiết tại đây http://css-tricks.com/absolute-relative-fixed-positioining-how-do-they-differ/

+2

đã đọc những gì tôi viết:" ... nhưng tôi đã phải thay đổi vị trí của họ để tuyệt đối, là nguyên nhân tôi cần chúng để có thể cuộn ... " – Stefanie

+0

Bạn đã bao giờ tìm được giải pháp cho stefanie này chưa? Tôi ở trên cùng một con thuyền. – TerryB

+0

-1 mặc định trong bootstrap là "cố định". OP đang tìm cách khắc phục các vấn đề với "cố định". – AllInOne

4

Các giải pháp từ @steve không làm việc cho tôi mặc dù vấn đề của tôi là giống với @ Stephanie.

Khôi phục sự cố mà Stephanie và tôi chia sẻ:

Tôi có các kiểu khởi động dài. Trên màn hình nhỏ, các modals không thể được nhìn thấy toàn bộ mà không cần cuộn. Theo mặc định trong các mô hình bootstrap là vị trí: cố định. Tôi có thể cho phép chúng được cuộn bằng cách thay đổi điều này thành vị trí: tuyệt đối.

Nhưng bây giờ tôi có một vấn đề mới. Các trang của tôi cũng dài và khi tôi kích hoạt phương thức từ dưới cùng của trang, phương thức xuất hiện ở số đầu trang của trang, ngoài chế độ xem trình duyệt hiện tại.

Vì vậy, để khắc phục cả hai:

css:

// allows the modal to be scrolled 
.modal {position: absolute;} 

javascript/jQuery:

// jumps browser window to the top when modal is fired 
$('body').on('show', '.modal', function(){ 
    $('body').scrollTop(0); 
}); 

Nhưng nó chỉ ra rằng Firefox không thích 'body' như một selector cho scrollTop, nhưng không thích 'html'. Webkit hoạt động ngược lại. Sử dụng một bình luận từ đây: Animate scrollTop not working in firefox

Kể từ khi tôi đang sử dụng jQuery < 1.9 Tôi có thể làm trình duyệt sniffing để giải quyết này:

// jumps browser window to the top when modal is fired 
$('body').on('show', '.modal', function(){ 
    // Firefox wants 'html', others want 'body' 
    $(jQuery.browser.mozilla ? "html" : "body").scrollTop(0); 
}); 

Bây giờ khi modals được bắn chúng xuất hiện ở phía trên cùng của trang, cửa sổ trình duyệt cuộn lên để lộ chúng, nhưng người dùng vẫn có thể cuộn xuống nếu màn hình của họ quá nhỏ để hiển thị toàn bộ chiều dài của phương thức.

+0

Tôi biết tôi đến muộn với bên nhưng đây thực sự là giải pháp đúng cho vấn đề đã nêu. Cảm ơn vì điều đó. – max7

0

Đã phải thay đổi vị trí tuyệt đối cũng như vậy sẽ di chuyển trên điện thoại di động.

này đã làm việc cho tôi là tốt (giải pháp bởi AllInOne):

// jumps browser window to the top when modal is fired 
$('body').on('show', '.modal', function(){ 
    // Firefox wants 'html', others want 'body' 
    $(jQuery.browser.mozilla ? "html" : "body").scrollTop(0); 
}); 
1

Một chút muộn để các trò chơi nhưng đây là sửa chữa Tôi hiện đang có tại chỗ và hoạt động trên trình duyệt Firefox, Chrome và IE.

$('body').on('show', '.modal', function() { 
$(this).css({ 'margin-top': window.pageYOffset - $(this).height()/2, 'top': '50%' }); 
$(this).css({ 'margin-left': window.pageXOffset - $(this).width()/2, 'left': '50%' }); 
}); 
0

Vấn đề là CSS - "cơ thể" của bạn & "HTML" thẻ được thiết lập để "height: 100%"

Các vấn đề liên quan