Twitter bootstrap kaydırılabilir modal


84

Üzerinde çalıştığım bir proje için twitter bootstrap kullanıyorum.

İçinde biraz daha uzun bir form olan kalıcı bir pencerem var ve pencere çok küçüldüğünde modalın kaydırılmamasından hoşlanmadım (kaydırılamayan sayfamdan kaybolduysa).

Bunu düzeltmek için aşağıdaki css'yi kullandım

.modal {
    overflow-y:auto;
    max-height:90%;
    margin-top:-45%;
}

Bu, Chrome'da tam olarak istediğim şekilde çalışıyor (yani, pencere yeterince büyük olduğunda form tam boyuttadır, ancak pencere küçüldükçe mod küçülür ve kaydırılabilir hale gelir). Sorun şu ki, IE'de modal ekran dışında. Bu soruna daha iyi bir çözümü olan var mı?

Örneğim tinyhousemap.com adresinde bulunabilir (modalin görünmesi için gezinme penceresinde 'Haritaya Giriş Ekle'yi tıklayın)

Teşekkürler


Bu çözümü buldum ve kullanıyorum. Arka plan içeriğinin değil, yalnızca önyükleme modelinin kaydırılmasına izin vermesi çok şık. github.com/aroc/Bootstrap-Scroll-Modal
Richard Adleta

Yanıtlar:


137

Aşağıdaki çözüme ne dersiniz? Benim için çalıştı. Bunu dene:

.modal .modal-body {
    max-height: 420px;
    overflow-y: auto;
}

Detaylar:

  1. .modal sınıfından overflow-y: auto;veya kaldır overflow: auto;(önemli)
  2. kaldırma max-height: 400px;ile ilgili .modalsınıfı (önemli)
  3. Ekle max-height: 400px;için .modal .modal-gövdeyi (veya her ne olabilir 420pxveya daha az, ancak daha gitmezdim 450px)
  4. ekle overflow-y: auto;için.modal .modal-body

Bitti, yalnızca gövde kaydırılacak.


5
Bu kadar uzağa kendi başıma geldim ama gerçekten en düşük ortak payda yerine pencerenin izin verdiği kadar uzun olmasını istedim. Ancak belirtmek max-height: 80%;işe yaramaz, kaydırmak yerine genişler. Ayarlamak için yeniden boyutlandırma etkinliklerini kullanmam gerekir $(".modal")[0].style.maxHeightmi?
Peter Wone

18

Sadece jQuery kullanarak küçük bir çözüm yaptım.

Öncelikle, <div class="modal-body">benim "ativa-scroll" dediğime ek bir sınıf eklemeniz gerekir, böylece bu şöyle bir şey olur:

<div class="modal-body ativa-scroll">

Şimdi bu kod parçasını sayfanıza, JS yüklemenizin yanına koyun:

<script type="text/javascript">
  $(document).ready(ajustamodal);
  $(window).resize(ajustamodal);
  function ajustamodal() {
    var altura = $(window).height() - 155; //value corresponding to the modal heading + footer
    $(".ativa-scroll").css({"height":altura,"overflow-y":"auto"});
  }
</script>

Benim için mükemmel çalışıyorum, aynı zamanda duyarlı bir şekilde! :)


1
Harika çözüm, ancak yüksekliği maksimum yüksekliğe değiştirirdim
Oleg

1
Ayrıca, $ ['. Modal']. On ('show.bs.modal', function (e) {}); boyutlandırma işlevini tetiklemek için. Bu, yüksekliği her yeniden boyutlandırma ve yüklemede değil, yalnızca gerektiği kadar hesaplayacaktır. Sadece, css'yi hesaplamadan / uygulamadan önce, mevcut modun özel kaydırma yüksekliğini kullanıp kullanmadığını kontrol etmeniz yeterlidir. yani var scrollModal = $ ('. modal-body.modal-scroll', this); eğer (scrollModal.length) ...
Robert Waddell

bu bootstrap 2 veya 3 için mi?
casus

17
/* Important part */
.modal-dialog{
    overflow-y: initial !important
}
.modal-body{
    max-height: calc(100vh - 200px);
    overflow-y: auto;
}

Bu, JS kodu olmadan Bootstrap 3 için çalışır ve duyarlıdır.

Kaynak


bu bootstrap 2 mi yoksa 3 mü? soru büyük olasılıkla bootstrap 2 için gönderildi
casus

@spy bu önyükleme için 3
Guillaume

8

Bootstrap'in:

 .modal {
position: fixed;

İle:

.modal {
position: absolute;

Benim için çalıştı.


1
IPad'de hizalama sorununa neden oluyor
Oleg

4

Ben de ekledim

.modal { position: absolute; }

iletişim kutusunun kaydırılmasına izin vermek için stil sayfasına gidin, ancak kullanıcı uzun bir sayfanın en altına inmişse, modal görünen alanın üstünden gizlenebilir.

Bunun artık bootstrap 3'te bir sorun olmadığını anlıyorum, ancak yükseltme yapana kadar nispeten hızlı bir düzeltme aradım, yukarıdakileri ve modal'ı açmadan önce aşağıdakileri aradım.

$('.modal').css('top', $(document).scrollTop() + 50);

FireFox, Chrome, IE10 8 & 7'de (elime geçmem gereken tarayıcılar) mutlu görünüyor


1

Modaliniz firefox'ta gizleniyor ve bunun nedeni genel stil sayfanızdaki negatif marj beyanıdır:

.modal {
    margin-top: -45%; /* remove this */
    max-height: 90%;
    overflow-y: auto;
}

Negatif marjı kaldırın ve her şey yolunda gidiyor.


Kenar boşluğunun kaldırılması, modal'ı IE'de ekrandan çok uzakta olmayacak şekilde geliştirdi, ancak şimdi yalnızca belirli bir pencere boyutunda ekranda (dikey olarak) ortalanıyor. Diğer tüm boyutlar, modal ekranın üst veya altından taşar.
Dan nokta net

1
@Dandotnet, modal otomatik olarak pencerenin üstünden% 50'yi konumlandırır, bunun üzerine% 10 gibi daha düşük bir değer yazabilirsiniz, ancak negatif bir değer eklerseniz, IE'de olduğu gibi ekrandan kaybolur. Bu arada, aynı şey firefox'ta da oluyor.
Andres Ilich

1

Kullanılması durumunda, gövde zaten taştığında .modal {overflow-y: auto;}sayfanın sağ tarafında ek kaydırma çubuğu oluşturur .

Bunun için çevrede çalışma kaldırmaktır taşma gelen vücut geçici etiketi ve set modal taşma-y için oto .

Misal:

$('.myModalSelector').on('show.bs.modal', function () {

        // Store initial body overflow value
        _initial_body_overflow = $('body').css('overflow');

        // Let modal be scrollable
        $(this).css('overflow-y', 'auto');
        $('body').css('overflow', 'hidden');


    }).on('hide.bs.modal', function () {

        // Reverse previous initialization
        $(this).css('overflow-y', 'hidden');
        $('body').css('overflow', _initial_body_overflow);
});

1

@ Grenoult'un CSS çözümündeki sorun (çoğunlukla işe yarıyor), klavye açıldığında (yani kalıcı iletişim kutusundaki bir girişi tıkladıklarında) tamamen duyarlı ve mobil cihazda ekran boyutu değişiyor ve kalıcı iletişim kutusu boyut değişiklikleri ve yeni tıkladıkları girişi gizleyebilir, böylece ne yazdıklarını göremezler.

Benim için daha iyi çözüm jquery'yi aşağıdaki gibi kullanmaktı:

$(".modal-body").css({ "max-height" : $(window).height() - 212, "overflow-y" : "auto" });

Pencere boyutunu değiştirmeye yanıt vermez, ancak bu zaten o kadar sık ​​olmaz.


1

.Modal-body öğesinde max-height ile "vh" metriğini kullanarak bunun üstesinden gelebildim. 70vh kullanımlarım için doğru görünüyordu. Ardından overflow-y'yi otomatik olarak ayarlayın, böylece yalnızca gerektiğinde kaydırılır.

.modal-body {
   overflow-y: auto;
   max-height: 70vh;
}

0

Bunların hiçbiri beklendiği gibi çalışmayacak .. Doğru yol pozisyon değiştirmektir: pozisyona sabitlenir: .modal sınıf için mutlak


2
sonucunu neye dayandırıyorsun?
Rafael Herscovici
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.