bootstrap modal kaydırma çubuğunu kaldırır


Yanıtlar:


116

Bu bir özelliktir, modal'ı gösterdiğinizde sınıf modal-openHTML'ye eklenir bodyve gizlediğinizde kaldırılır.

Bu, önyükleme css dediği için kaydırma çubuğunun kaybolmasına neden olur

.modal-open {
    overflow: hidden;
}

Bunu belirterek geçersiz kılabilirsiniz

.modal-open {
    overflow: scroll;
}

içinde kendi css.


lütfen daha spesifik olur musun?
El Dude

1
Biraz daha ayrıntı eklendi. Şimdi daha iyi?
flup

14
OPs sorusunun amacına daha iyi hitap ettiğini düşündüğüm overflow-y: scroll kullanmak daha uygundur. Taşma kullanma: kaydırma, ekranın altına yatay bir kaydırma çubuğu ekler.
Scott

1
mükemmel, açısal kayışlı modlarla da çalışır, yukarıdaki CSS'yi bir <style></style>içine dahil edebilir, templateUrlböylece uygulamadaki diğer modlara zarar vermez.
davidkonrad

2
Taşma kullanın: devralın; yerine. Bu şekilde, modal, kaydırmanız olduğunda parşömeni kaldırmaz ve elinizde olmadığında parşömeni eklemez
Alisson Alvarenga

32

Kalıtımın kaydırmadan daha iyi olduğunu düşünüyorum çünkü modal'ı açtığınızda her zaman kaydırma ile açılır, ancak herhangi bir parşömeniniz olmadığında aynı sorunu yaşarsınız. Bu yüzden sadece şunu yapıyorum:

.modal-open {
  overflow: inherit;
}

Bu gerçek cevap. overflow scroll hala benim durumumda bazı öğeleri etkiliyor.
Coisox

25

kullandım

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

Bu durumda yatay kaydırma çubuğunu görüntülemekten kaçınırsınız


bunu @Alisson Alvarenga'nın cevabıyla birleştirebilir ve overflow-y: inherit;
Dmitry Kurmanov

23

Overflow-y'yi kullanmak daha iyidir: gövdeden dolguyu kaydırın ve kaldırın, sayfa gövdesine önyükleme modal dolgu ekledi.

.modal-open {
  overflow:hidden;
  overflow-y:scroll;
  padding-right:0 !important;
}

IE tarayıcı Uyumlu: IE tarayıcısı varsayılan olarak aynı şeyi yapıyor.


1
Teşekkür. Ek olarak, kalıcı pop-up'ın kaydırılması gerekiyorsa ve üst öğenin hareketsiz kalması gerekiyorsa .modal-body {max-height: calc (100vh - 210px); overflow-y: otomatik; } .modal-open {overflow: hidden; overflow-y: kaydırma; padding-right: 0! önemli; }
Oracular Man

9

Tanrıya şükür bu yazı karşısına geldim! Kendi yakın bağlantımı kullanarak pencereyi kapatırken kaydırma çubuklarını nasıl geri alacağımı anlamaya çalışırken saçımı çekiyordum. CSS için önerileri denedim ama düzgün çalışmıyordu. Okuduktan sonra

modal-open sınıfı, modal'ı gösterdiğinizde HTML gövdesine eklenir ve gizlediğinizde kaldırılır. - @flup

Jquery kullanarak bir çözüm buldum, bu yüzden başka birinin aynı sorunu yaşaması ve yukarıdaki öneriler işe yaramaması durumunda -

<script>
            jQuery(document).ready(function () {
jQuery('.closeit').click(function () {
 jQuery('body').removeClass('modal-open');
                });
            });
        </script>

Hide.bs.modal olayını geçersiz kıldığım bir sorunla karşılaştım, böylece modal gizlendiğinde bazı özel kodlar çalıştırabilirdim, ancak fark etmediğim şey modal-open sınıfının gövdeden kaldırılmasını engelledi - dolayısıyla bu belirli bir modeli kapatırken kaydırma çubuğum geri gelmedi. Hide.bs.modal kodumda modal-open sınıfını manuel olarak kaldırmıyorum ve bu sorunu düzeltir.
Jim

1
Bunun data-dismiss="modal"gibi özel bir şey yapmak yerine bağlantınıza bir öznitelik eklemeniz gerekir . Bootstrap, bu bağlantıya tıklandığında tüm uygun kapatma eylemlerini gerçekleştirecektir.
nollidge

1
data-dismiss = "modal" benim durumumda çalışmıyor çünkü açısal denetleyicide bir fonksiyon çağırıyorum. Önerilen jQuery çözümü benim için çok iyi çalışıyor.
gianni

5

Ben sadece Bootstrap modellerinin bu 'özelliği' ile oynuyordum. Görünüşe göre .modalsınıf varoverflow-y:auto; modal kendisi yüksek seviyesine hale geldiğinde kalıcı sarıcı kendi kaydırma çubuğunu alır Yani.

Her zaman bir kaydırma çubuğu istiyorsanız (tasarımcılar genellikle bunu yapar) Önce gövdeyi

body {
    overflow-y:scroll;
}

Sonra idare edin .modal-open

.modal-open .modal {
    overflow-y:scroll; /* Force a navbar on .modal */
}

.modal-open .topnavbar-wrapper {
    padding-right:17px; /* Noticed that right aligned navbar content got overlapped by the .modal scrollbar */
}

Bu durumda, gövde üzerinde kaydırma çubuğunu devre dışı bırakmayı dokunmadan bırakın

Bu sayfadaki diğer tüm cevaplar içeriğimi atlamaya devam etti.

Dikkat et!

Her ne kadar bu çözüm benim için her zaman işe yarasa da, dün modal sürüklenebilir olduğunda ve ekrana (dikey olarak) sığacak kadar büyük olduğunda bu düzeltmeyi kullanırken bir sorun yaşadım. position:stickyEklediğim öğelerle bir ilgisi olabilir mi?


{Overflow-y: scroll;} gövdesini eklediğimde sorunum çözüldü. Teşekkürler bayım.
FrenkyB

1

Bot tuzağınızın belirli bir bölümünü özelleştirmek için kendi css dosyanızı oluşturacaksanız daha iyi.

Önyükleme css dosyasını değiştirmeyin, çünkü sayfanızın diğer bölümlerinde kullandığınızda önyüklemenizdeki her şeyi değiştirecektir.

Sayfanız biraz uzunsa, otomatik olarak bir kaydırma çubuğu sağlayacaktır. Modal açıldığında, kaydırma çubuğunu gizleyecektir çünkü önyükleme varsayılan olarak bunu yapar.

Modal açıldığında gizlemekten kaçınmak için, css kodunu (aşağıda) kendi css dosyanıza koyarak geçersiz kılmanız yeterlidir.

.modal-open {
    overflow: scroll;
}

tam tersi ...

.modal-open {
    overflow: hidden;
}

3
Bu, bu soruya verilen diğer cevapla aynı bilgileri içeriyor gibi görünüyor. Cevabınız farklıysa, tam olarak neyin farklı olduğunu açıklığa kavuşturmak için düzenleyin. Lütfen yalnızca yeni bir sorunuz varsa yeni bir yanıt ekleyin.
Jeffrey Bosboom

1
Aynı cevabı içerir, ancak onu başka şekilde açıklar. Bazen anlamak, nasıl açıklandığına bağlıdır.
NormanCabilatazan

1
Tüm okuyucular aynı fikre sahip olamaz. Açıkça anlamaları için başka bir açıklama yolu vermek daha iyidir.
NormanCabilatazan

1

Ek olarak, kalıcı pop-up'ın içeriğin içinde kaydırılması gerekiyorsa ve üst öğenin hareketsiz kalması gerekiyorsa, aşağıdakileri Custom.css dosyanıza ekleyin (css'yi geçersiz kılma)

.modal-body {
    max-height: calc(100vh - 210px);
    overflow-y: auto;
}
.modal-open {
    overflow: hidden;
    overflow-y: scroll;
    padding-right: 0 !important;
}

1

Benim için işe yarayan tek cevap şudur:

.modal-open {
  padding-right: 0 !important;
}
html {
  overflow-y: scroll !important;
}

0

bootstrap modal açıldığında bir padding ekler, böylece bu kodu kendi css'nizde deneyebilirsiniz

.modal-open {
    padding: 0 !important;
}

0

Bu muhtemelen 1. modelin (kapatıldığında) gövde elemanından modal-açık sınıfını kaldırması ve ikincisinin tetik modal-açık olduğunda onu geri eklememesine neden olur.

Bu durumda, modun tamamen kapalı / gizlenmiş olup olmadığını kontrol etmek ve bir başkasını açmak için olayı kullanırım.

let modal1 = $('.modal1);
let modal2 = $('.modal2);
$modal1.on('hidden.bs.modal', function (e) {
   $modal2.modal('show');
});

Bu, modal-open'in gövdeden kaldırıldığından ve açıldığında yeniden eklendiğinden emin olmak için 1. modal kapanana kadar bekleyecektir.


0

Bu sorunu yeni yaşadım ve bu soruyu hızlı bir şekilde bulmak, davranışa neyin sebep olduğunu anlamama yardımcı oldu. Çok teşekkürler.

Ancak, bu CSS çözümlerini biraz uygunsuz buluyorum. Diğer bir deyişle, özellikle kaydırma çubuklarını tutmak istemediğiniz sürece (bunun için bir neden düşünemememe rağmen).

Esasen Bootstrap, kaydırma çubuğunun kaldırılmasını telafi etmek için belirli öğelere padding-right uyguluyor.

Bu nedenle, yapmanız gereken tek şey sorunlu öğenizin etrafına sıfır dolgulu fazladan bir sarmalayıcı koymaktır (ve hedeflenen sınıfı ona doğru hareket ettirmektir).

yani bundan değiş ...

<div class="fixed-top p-1 bg-dark">
    ...this content will move as padding will be modified...
</div>

... buna...

<div class="fixed-top p-0 bg-dark">
    <div class="p-1">
        ...this content won't move...
    </div>
</div>
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.