बूटस्ट्रैप मोडल स्क्रॉल बार को हटा देता है


94

जब मैं अपने पृष्ठ में एक मोडल दृश्य ट्रिगर करता हूं तो यह स्क्रॉल बार को गायब करने के लिए ट्रिगर करता है। यह एक कष्टप्रद प्रभाव है क्योंकि जब मोडल चलता है तो पृष्ठभूमि पृष्ठ हिलना शुरू हो जाता है। क्या उस प्रभाव का कोई इलाज है?


1
ब्राउज़र संगत जवाब: stackoverflow.com/a/47807685/7186739
सुपर मॉडल

जवाबों:


115

यह एक विशेषता है, जब आप मोडल दिखाते हैं तो क्लास modal-openHTML में जुड़ जाती है bodyऔर जब आप इसे छिपाते हैं तो उसे हटा दिया जाता है।

यह स्क्रॉलबार गायब कर देता है क्योंकि बूटस्ट्रैप css कहता है

.modal-open {
    overflow: hidden;
}

आप इसे निर्दिष्ट करके ओवरराइड कर सकते हैं

.modal-open {
    overflow: scroll;
}

में अपनी खुद की सीएसएस।


क्या आप कृपया अधिक विशिष्ट हो सकते हैं?
एल ड्यूड

1
कुछ और विवरण जोड़े। अब बेहतर है?
22

14
यह अतिप्रवाह-वाई का उपयोग करने के लिए अधिक उपयुक्त है: स्क्रॉल, जो मुझे लगता है कि बेहतर ओपी प्रश्न के इरादे को संबोधित करता है। ओवरफ़्लो का उपयोग करना: स्क्रॉल स्क्रीन के नीचे एक क्षैतिज स्क्रॉलबार जोड़ देगा।
स्कॉट

1
सही, कोणीय-पट्टा मोडल के साथ भी काम करता है, बस उपरोक्त सीएसएस को <style></style>अंदर से शामिल कर सकता है templateUrlताकि यह ऐप में अन्य मॉडल्स पर न हो।
दविदकोनराड

2
अतिप्रवाह का उपयोग करें: विरासत; बजाय। इस तरह से जब आप स्क्रॉल करते हैं तो मोडल स्क्रॉल को नहीं हटाता है और जब आपके पास नहीं होता है तो स्क्रॉल नहीं जोड़ते हैं
Alisson Alvarenga

32

मुझे लगता है कि इनहेरिट स्क्रॉल से बेहतर है क्योंकि जब आप मोडल खोलते हैं, तो यह हमेशा स्क्रॉल से खुलेगा, लेकिन जब आपके पास कोई स्क्रॉल नहीं होगा तो आपको वही समस्या मिलेगी। तो मैं बस यही करता हूँ:

.modal-open {
  overflow: inherit;
}

यही असली जवाब है। अतिप्रवाह स्क्रॉल अभी भी मेरे मामले में कुछ तत्व को प्रभावित करता है।
कोइक्सॉक्स

25

मैंनें इस्तेमाल किया

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

इस स्थिति में आप क्षैतिज स्क्रॉल बार प्रदर्शित करने से बचते हैं


हम इसे @Alisson अल्वारेंगा के उत्तर के साथ जोड़ सकते हैं और ओवरफ्लो-वाई का उपयोग कर सकते हैं: विरासत;
डुव्व्द

23

ओवरफ्लो-वाई का उपयोग करना बेहतर है: बॉडी से स्क्रॉलिंग और पैडिंग को हटा दें, बूटस्ट्रैप मोडल ने पेजिंग बॉडी में पैडिंग को जोड़ा।

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

IE ब्राउज़र संगत: IE ब्राउज़र डिफ़ॉल्ट रूप से एक ही काम कर रहा है।


1
धन्यवाद। इसके अतिरिक्त, यदि मोडल पॉपअप को स्क्रॉल करने की आवश्यकता है और माता-पिता को अभी भी रहने की आवश्यकता है। शरीर-शरीर {अधिकतम-ऊंचाई: कैल्क (100vh - 210px); ओवरफ्लो-वाई: ऑटो; } .मोडल-ओपन {ओवरफ्लो: छिपा हुआ; ओवरफ्लो-वाई: स्क्रॉल; गद्दी-सही: 0-महत्वपूर्ण; }
Oracular Man

9

भगवान का शुक्र है कि मैं इस पोस्ट पर आया! मैं अपने बालों को खींच रहा था और यह जानने की कोशिश कर रहा था कि खिड़की को बंद करते समय मेरे अपने नजदीकी लिंक का उपयोग करके अपने स्क्रॉलबार को कैसे प्राप्त किया जाए। मैंने CSS के लिए सुझावों की कोशिश की, लेकिन यह ठीक से काम नहीं कर रहा था। पढ़ने के बाद

क्लास मोडल-ओपन HTML बॉडी में तब जुड़ जाता है जब आप मोडल दिखाते हैं, और जब आप इसे छिपाते हैं तो उसे हटा दिया जाता है। - @ अनुप

मैं jquery का उपयोग कर एक समाधान के साथ आया था, इसलिए किसी और को उसी मुद्दे पर उकसाया है और ऊपर दिए गए सुझाव काम नहीं करते -

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

मेरे पास एक ऐसा मुद्दा था जहां मैं Hide.bs.modal इवेंट को ओवरराइड कर रहा था ताकि मैं कुछ कस्टम कोड निष्पादित कर सकूं, जब मोडल छिपा हुआ था, लेकिन जो मुझे महसूस नहीं हुआ वह है कि मोडल-ओपन क्लास को शरीर से हटाए जाने से रोका गया - इसलिए मेरा स्क्रॉल बार इस एक विशिष्ट मोडल को बंद करते समय वापस नहीं आया। मैं अपने Hide.bs.modal कोड में मैन्युअल-खुले वर्ग को मैन्युअल रूप से नहीं निकाल रहा हूं और यह उस समस्या को हल करता है।
जिम

1
आपको data-dismiss="modal"इस तरह से कुछ भी कस्टम करने के बजाय बस अपने लिंक में एक विशेषता जोड़ने की आवश्यकता होनी चाहिए । जब उस लिंक पर क्लिक किया जाता है, तो बूटस्ट्रैप सभी उपयुक्त समापन क्रियाएं करेगा।
नोलिज

1
data-बर्खास्तगी = "modal" मेरे मामले में काम नहीं कर रहा है क्योंकि मैं कोणीय नियंत्रक में एक फ़ंक्शन कह रहा हूं। सुझाव दिया गया jQuery का समाधान मेरे लिए बहुत अच्छा काम करता है।
गियान्नी

5

मैं बूटस्ट्रैप मॉडल्स के इस 'फीचर' के साथ खेल रहा था। ऐसा लगता है कि .modalक्लास में overflow-y:auto;मोडल रैपर को अपना स्क्रॉलबार मिल जाता है जब मोडल अपने आप हाई हो जाता है।

यदि आप हमेशा एक स्क्रॉलबार चाहते हैं (डिजाइनर अक्सर करते हैं) पहले शरीर को सेट करें

body {
    overflow-y:scroll;
}

फिर संभाल लें .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 */
}

स्क्रॉलबार को इस मामले में अछूता शरीर पर छोड़ दें

इस पृष्ठ के अन्य सभी उत्तर मेरी सामग्री को जम्प करते रहे।

सचेत!

हालांकि यह समाधान मेरे लिए हर समय काम करता था, कल मुझे इस फिक्स का उपयोग करने में समस्या थी जब मोडल को ड्रैग करने योग्य और स्क्रीन को फिट करने के लिए बड़े (लंबवत)। position:stickyमेरे द्वारा जोड़े गए तत्वों के साथ इसका कुछ करना हो सकता है ?


जब मैंने शरीर {overflow-y: स्क्रॉल;} जोड़ा है, तो मेरी समस्या हल हो गई थी। धन्यवाद महोदय।
FrenkyB

1

यदि आप अपने बूटस्ट्रैप के एक निश्चित हिस्से को अनुकूलित करने के लिए अपनी स्वयं की सीएसएस फ़ाइल बनाएंगे तो बेहतर होगा।

बूटस्ट्रैप की सीएसएस फाइल को ऑल्टर न करें क्योंकि आपके पेज के अन्य हिस्सों में उपयोग करने के बाद यह आपके बूटस्ट्रैप में सब कुछ बदल देगा।

यदि आपका पृष्ठ कुछ लंबा है, तो यह स्वतः ही एक स्क्रॉल बार प्रदान करेगा। और जब मोडल खोला जाता है, तो वह स्क्रॉल बार को छिपा देगा क्योंकि बूटस्ट्रैप डिफ़ॉल्ट के रूप में ऐसा करता है।

मोडल खुलने पर इसे छिपाने से बचने के लिए, बस अपनी स्वयं की सीएसएस फ़ाइल पर सीएसएस कोड (नीचे) डालकर इसे ओवरराइड करें।

.modal-open {
    overflow: scroll;
}

बस इसके विपरीत ...

.modal-open {
    overflow: hidden;
}

3
ऐसा लगता है कि इस प्रश्न पर अन्य उत्तर के समान ही जानकारी है। यदि आपका उत्तर अलग है, तो यह स्पष्ट करने के लिए इसे संपादित करें कि वास्तव में क्या अलग है। यदि आपके पास कुछ नया है तो कृपया केवल एक नया उत्तर जोड़ें।
जेफरी बोसबोम

1
इसमें एक ही उत्तर है, लेकिन इसे समझाने का अन्य तरीका है। कभी-कभी, समझ इस बात पर निर्भर करती है कि इसे कैसे समझाया जाता है।
नॉर्मनबैबिलटाज़न

1
सभी पाठकों को समान विचार नहीं मिल सके। स्पष्ट रूप से समझने के लिए उन्हें समझाने के अन्य तरीके देने के लिए बेहतर है।
नॉर्मन काबिलटाज़न

1

इसके अतिरिक्त, यदि मोडल पॉपअप को सामग्री के साथ स्क्रॉल करने की आवश्यकता है और माता-पिता को अभी भी बने रहने की आवश्यकता है, तो अपने Custom.css (ओवरराइडिंग सीएसएस) में निम्नलिखित जोड़ें।

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

0

बूटस्ट्रैप मोडल खुलने के बाद एक पेडिंग जोड़ता है ताकि आप इस कोड को अपने सीएसएस में आज़मा सकें

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

0

यह शायद इसलिए होता है कि 1 मोडल (जब बंद होता है) बॉडी एलिमेंट से मोडल-ओपन क्लास को हटाता है और दूसरा वॉन्टल-ओपन को ट्रिगर करते समय इसे वापस जोड़ देता है।

इस मामले में, मैं यह जांचने के लिए घटना का उपयोग करूंगा कि क्या मोडल बंद / छिपा हुआ है और पूरी तरह से खुला है

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

यह तब तक प्रतीक्षा करेगा जब तक कि 1 मोडल बंद न हो जाए, यह सुनिश्चित करने के लिए कि मोडल-ओपन को शरीर से हटा दिया गया है और खुले होने पर इसे फिर से जोड़ा गया है।


0

मुझे सिर्फ यह समस्या थी, और इस प्रश्न को खोजने से मुझे यह समझने में मदद मिली कि व्यवहार क्या था। तो धन्यवाद।

हालाँकि, मुझे लगता है कि ये सीएसएस वर्कअराउंड थोड़ा असभ्य है। जब तक, वह यह है कि आप विशेष रूप से स्क्रॉलबार रखना चाहते हैं (हालांकि मैं इसके लिए एक कारण के बारे में नहीं सोच सकता)।

स्क्रॉलबार हटाने की भरपाई के लिए अनिवार्य रूप से बूटस्ट्रैप कुछ तत्वों के लिए पैडिंग-राइट लगा रहा है।

इसलिए, आपको बस इतना करना है कि अपने समस्याग्रस्त तत्व के चारों ओर शून्य गद्दी-सही के साथ एक अतिरिक्त आवरण डाल दें (और उस वर्ग को स्थानांतरित करें जो इसे लक्षित किया जा रहा है)।

इससे बदलाव ...

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

... इसके लिए...

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.