बूटस्ट्रैप 3 मोडल वर्टिकल पोजिशन सेंटर


270

यह एक दो भाग प्रश्न है:

  1. जब आप मोडल की सही ऊँचाई नहीं जानते हैं, तो आप मोडल को केंद्र में लंबवत कैसे रख सकते हैं?

  2. क्या मोडल केंद्रित होना और अतिप्रवाह होना संभव है: मोडल-बॉडी में ऑटो, लेकिन केवल तभी जब मोडल स्क्रीन की ऊँचाई से अधिक हो?

मैंने इसका उपयोग करने की कोशिश की है:

.modal-dialog {
  height: 80% !important;
  padding-top:10%;
}

.modal-content {
  height: 100% !important;
  overflow:visible;
}

.modal-body {
  height: 80%;
  overflow: auto;
}

इससे मुझे परिणाम की आवश्यकता होती है जब सामग्री ऊर्ध्वाधर स्क्रीन आकार से बहुत बड़ी होती है, लेकिन छोटे मोडल सामग्री के लिए यह बहुत अधिक अनुपयोगी होता है।


1
@ हेइकेन किसी कारण से यह मुझे स्क्रीन पर कूद जाता है, मैं क्रोम का उपयोग कर रहा
हूं

जवाबों:


374
.modal {
  text-align: center;
}

@media screen and (min-width: 768px) { 
  .modal:before {
    display: inline-block;
    vertical-align: middle;
    content: " ";
    height: 100%;
  }
}

.modal-dialog {
  display: inline-block;
  text-align: left;
  vertical-align: middle;
}

और यह सुनिश्चित करने के लिए थोड़ा सा .fade वर्ग समायोजित करें कि यह केंद्र की बजाय खिड़की की शीर्ष सीमा से बाहर दिखाई दे


मैं वास्तव में गलती से इसे ओवरराइड कर रहा था, यह इंगित करने के लिए धन्यवाद कि यह वास्तव में पर्दे के पीछे काम करता है।
डोरियन

यह शायद बूटस्ट्रैप मोडल ही नहीं, बल्कि बाकी सभी चीजों को केंद्र में रखने का सबसे अच्छा तरीका है। css-tricks.com/centering-in-the-unknown
मार्क एस

4
मैं स्पष्ट करता हूं कि यह मोबाइल पर बहुत अच्छा काम नहीं करता है। क्योंकि परिभाषा ":" के बाद 100% की ऊंचाई है और स्वचालित रूप से पृष्ठ के नीचे मोडल को स्थानांतरित कर सकता है। मैंने केवल .modal {डिस्प्ले: फ्लेक्स घोषित करते हुए हल किया! महत्वपूर्ण;} .मॉडल-संवाद {मार्जिन: ऑटो}। 92.97% लोगों के पास पहले से ही इस सीएसएस संपत्ति का उपयोग करने का समर्थन है, हालांकि सामान्य सुपारी के लिए मार्जिन का उपयोग करने के लिए जावास्क्रिप्ट का उपयोग कर सकते हैं।
वाल्टर चैपिलिकेन - wZVanG

21
बिल्कुल बढ़िया, लेकिन मैं इसे केवल 768px से ऊपर का उपयोग करने की सलाह दूंगा और मोबाइल पर डिफ़ॉल्ट सेटिंग छोड़ दूंगा। स्क्रीन की ऊंचाई छोटी होने पर मोडल्स के लिए शीर्ष स्थान सबसे अच्छा है। मैंने इसे केंद्र से प्रकट करने के लिए एक एनीमेशन भी समायोजित किया है, यहां काम करने वाले उदाहरण यदि किसी को इसकी आवश्यकता है: codepen.io/anon/pen/zGBpNq
bwitkowicz

यह समाधान मोडल विंडो को 2px के लिए दाईं ओर स्थानांतरित करता है, कारण: तत्व से पहले। लेकिन इसके लिए समान कोड जोड़कर इसे हल किया जा सकता है: बाद
Cypher

146

1. जब आप मोडल की सही ऊँचाई नहीं जानते हैं तो आप केंद्र में मोडल को लंबवत कैसे रख सकते हैं?

ऊंचाई घोषित किए बिना बूटस्ट्रैप 3 मोडल को पूर्ण रूप से केंद्र में रखने के लिए, आपको सबसे पहले बूटस्ट्रैप सीएसएस को अपनी स्टाइल शीट में जोड़कर इसे ओवरराइट करना होगा:

.modal-dialog-center { /* Edited classname 10/03/2014 */
    margin: 0;
    position: absolute;
    top: 50%;
    left: 50%;
}

यह खिड़की के केंद्र में मोडल-संवादों को ऊपरी-बाएँ कोने में रखेगा।

हमें इस मीडिया क्वेरी को जोड़ना होगा वरना छोटे उपकरणों पर मोडल मार्जिन-लेफ्ट गलत है:

@media (max-width: 767px) {
  .modal-dialog-center { /* Edited classname 10/03/2014 */
    width: 100%;
  }
} 

अब हमें जावास्क्रिप्ट के साथ इसकी स्थिति को समायोजित करने की आवश्यकता होगी। ऐसा करने के लिए हम तत्व को उसकी ऊँचाई और चौड़ाई के आधे हिस्से के बराबर एक नकारात्मक शीर्ष और बायाँ मार्जिन देते हैं। इस उदाहरण में हम jQuery का उपयोग कर रहे हैं क्योंकि यह बूटस्ट्रैप के साथ उपलब्ध है।

$('.modal').on('shown.bs.modal', function() {
    $(this).find('.modal-dialog').css({
        'margin-top': function () {
            return -($(this).outerHeight() / 2);
        },
        'margin-left': function () {
            return -($(this).outerWidth() / 2);
        }
    });
});

अपडेट (01/10/2015):

फिनिक के उत्तर पर जोड़ना । अज्ञात में केंद्रित करने का श्रेय ।

.modal {
  text-align: center;
  padding: 0!important;
}

.modal:before {
  content: '';
  display: inline-block;
  height: 100%;
  vertical-align: middle;
  margin-right: -4px; /* Adjusts for spacing */
}

.modal-dialog {
  display: inline-block;
  text-align: left;
  vertical-align: middle;
}

नकारात्मक मार्जिन-सही को नोटिस करें? यह इनलाइन-ब्लॉक द्वारा जोड़े गए स्थान को हटा देता है। उस स्थान के कारण मोडल पेज @ तल की चौड़ाई के नीचे कूद जाता है <768px।

2. क्या यह संभव है कि मॉडल केंद्रित है और अतिप्रवाह है: मोडल-बॉडी में ऑटो, लेकिन केवल तभी जब मोडल स्क्रीन की ऊँचाई से अधिक हो?

यह मोडल-बॉडी को एक अतिप्रवाह-वाई: ऑटो और एक अधिकतम ऊंचाई देकर संभव है। इसे ठीक से काम करने में थोड़ा अधिक काम लगता है। इसे अपनी शैली पत्रक में जोड़ने के साथ शुरू करें:

.modal-body {
    overflow-y: auto;
}
.modal-footer {
    margin-top: 0;
}

हम विंडो की ऊंचाई प्राप्त करने के लिए jQuery का फिर से उपयोग करेंगे और पहले मोडल-कंटेंट की अधिकतम ऊंचाई निर्धारित करेंगे। फिर हमें मोडल-हेडर और मोडल-पाद के साथ मोडल-कंटेंट को घटाकर, मोडल-बॉडी की अधिकतम ऊंचाई तय करनी होगी:

$('.modal').on('shown.bs.modal', function() {
    var contentHeight = $(window).height() - 60;
    var headerHeight = $(this).find('.modal-header').outerHeight() || 2;
    var footerHeight = $(this).find('.modal-footer').outerHeight() || 2;

    $(this).find('.modal-content').css({
        'max-height': function () {
            return contentHeight;
        }
    });

    $(this).find('.modal-body').css({
        'max-height': function () {
            return (contentHeight - (headerHeight + footerHeight));
        }
    });

    $(this).find('.modal-dialog').css({
        'margin-top': function () {
            return -($(this).outerHeight() / 2);
        },
        'margin-left': function () {
            return -($(this).outerWidth() / 2);
        }
    });
});

आप यहां बूटस्ट्रैप 3.0.3 के साथ एक वर्किंग डेमो पा सकते हैं: http://cdpn.io/GwvrJ EDIT: मैं एक अधिक उत्तरदायी समाधान के लिए अद्यतन संस्करण का उपयोग करने की सलाह देता हूं: http://cdpn.io/mKfCc

अपडेट (30/11/2015):

function setModalMaxHeight(element) {
  this.$element     = $(element);  
  this.$content     = this.$element.find('.modal-content');
  var borderWidth   = this.$content.outerHeight() - this.$content.innerHeight();
  var dialogMargin  = $(window).width() < 768 ? 20 : 60;
  var contentHeight = $(window).height() - (dialogMargin + borderWidth);
  var headerHeight  = this.$element.find('.modal-header').outerHeight() || 0;
  var footerHeight  = this.$element.find('.modal-footer').outerHeight() || 0;
  var maxHeight     = contentHeight - (headerHeight + footerHeight);

  this.$content.css({
      'overflow': 'hidden'
  });

  this.$element
    .find('.modal-body').css({
      'max-height': maxHeight,
      'overflow-y': 'auto'
  });
}

$('.modal').on('show.bs.modal', function() {
  $(this).show();
  setModalMaxHeight(this);
});

$(window).resize(function() {
  if ($('.modal.in').length != 0) {
    setModalMaxHeight($('.modal.in'));
  }
});

(अद्यतन 30/11/2015 http://cdpn.io/mKfCc उपरोक्त संपादित करें)


1
उत्कृष्ट उत्तर और पोस्ट! हालांकि, यह भी एनिमेटेड हो सकता है? यह बहुत अच्छा काम करता है जब यह सिर्फ पॉप में आता है, लेकिन एनिमेटेड के बारे में क्या? मैं काम पर हूँ और इसे atm नहीं कर सकता, लेकिन मैं परिणाम देखने के लिए उत्सुक हूँ
स्कूटर

आप मोडल पर एक फीका वर्ग जोड़ सकते हैं। Cdpn.io/mKfCc
dimbslmh

हालाँकि ऐसा लगता है कि यह कोडपेन पर बहुत अच्छा काम कर रहा है, मैं इसे अपने प्रोजेक्ट पर काम करने के लिए नहीं कर सकता। मुझे लगता है कि आपको केवल कोड जोड़ने की आवश्यकता है और कुछ सही की जगह नहीं?
स्कूटर

1
अरे फिर से! निम्नलिखित पर ध्यान दिया। जब पहला मोडल पहली बार खुलता है, तो सही मार्जिन तब तक गलत होता है जब तक आप एक बार आकार नहीं बदल लेते। इस पर कोई आईडी?
स्कूटर

1
: @bernie मैं अपने codepen का एक कांटा जो कम मोडल document.ready पर खुला साथ Browserstack पर स्क्रीनशॉट बनाया browserstack.com/screenshots/... Browserstack स्क्रीनशॉट (अभी तक) के लिए v9.3.x का समर्थन नहीं करता है, लेकिन मुझे लगता है कि iOS 6.0 पर आपके द्वारा वर्णित कुछ समान है (स्क्रीनशॉट iPad 3rd (6.0) (पोर्ट्रेट) देखें)। शायद यह एक पुराना बग है जो v9.3.2 में वापस आ गया है। यदि आप चाहते हैं, तो आप मंचों
community

37

मेरा समाधान

.modal-dialog-center {
    margin-top: 25%;
}

    <div id="waitForm" class="modal">
        <div class="modal-dialog modal-dialog-center">
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
                    <h4 id="headerBlock" class="modal-title"></h4>
                </div>
                <div class="modal-body">
                    <span id="bodyBlock"></span>
                    <br/>
                    <p style="text-align: center">
                        <img src="@Url.Content("~/Content/images/progress-loader.gif")" alt="progress"/>
                    </p>   
                </div>
            </div>
        </div>
    </div>

Yous को पैडिंग-टॉप का उपयोग करना चाहिए। मार्जिन जब आप ओवरले में क्लिक करते हैं, तो करीबी कार्रवाई को तोड़ देगा
anvd

2
25% तक मार्जिन टॉप सेट के लिए मोडल को 50% लंबा होना आवश्यक है।
विद्रोह

28

यह बस के साथ तय किया जा सकता है display: flex

.modal-dialog {
  margin-top: 0;
  margin-bottom: 0;
  height: 100vh;
  display: flex;
  flex-direction: column;
  justify-content: center;
}

.modal.fade .modal-dialog {
  transform: translate(0, -100%);
}

.modal.in .modal-dialog {
  transform: translate(0, 0);
}

उपसर्ग के साथ

.modal-dialog {
  margin-top: 0;
  margin-bottom: 0;
  height: 100vh;
  display: -webkit-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -webkit-flex-direction: column;
      -ms-flex-direction: column;
          flex-direction: column;
  -webkit-box-pack: center;
  -webkit-justify-content: center;
      -ms-flex-pack: center;
          justify-content: center;
}

.modal.fade .modal-dialog {
  -webkit-transform: translate(0, -100%);
          transform: translate(0, -100%);
}
.modal.in .modal-dialog {
  -webkit-transform: translate(0, 0);
          transform: translate(0, 0);
}

2
यह बैकड्रॉप को 100vh ऊंचाई की वजह से क्लिक करने से रोकता है। यह "पृष्ठभूमि: 'स्थिर'" सेटिंग के लिए ठीक है।
१22:

इस कारण से एनीमेशन मुद्दा फीका हो गया
विश्वनाथ लीक्षमान

23

मैं एक शुद्ध सीएसएस समाधान के साथ आया था! हालांकि यह css3 है, जिसका मतलब है कि ie8 या लोअर समर्थित नहीं है, लेकिन इसके अलावा यह परीक्षण किया गया है और ios, android, ie9 +, क्रोम, फ़ायरफ़ॉक्स, डेस्कटॉप सफारी पर काम कर रहा है।

मैं निम्नलिखित सीएसएस का उपयोग कर रहा हूं:

.modal-dialog {
  position:absolute;
  top:50% !important;
  transform: translate(0, -50%) !important;
  -ms-transform: translate(0, -50%) !important;
  -webkit-transform: translate(0, -50%) !important;
  margin:auto 5%;
  width:90%;
  height:80%;
}
.modal-content {
  min-height:100%;
  position:absolute;
  top:0;
  bottom:0;
  left:0;
  right:0; 
}
.modal-body {
  position:absolute;
  top:45px; /** height of header **/
  bottom:45px;  /** height of footer **/
  left:0;
  right:0;
  overflow-y:auto;
}
.modal-footer {
  position:absolute;
  bottom:0;
  left:0;
  right:0;
}

यहाँ एक बेला है। http://codepen.io/anon/pen/Hiskj

.. इसे सही उत्तर के रूप में चुनना क्योंकि कोई अतिरिक्त भारी जावास्क्रिप्ट नहीं है जो एक से अधिक मॉडल्स के मामले में ब्राउज़र को अपने घुटनों तक लाता है।


8
जावास्क्रिप्ट का उपयोग करने का पूरा बिंदु मॉडल की अज्ञात ऊंचाई प्राप्त करना था । आपके समाधान की निश्चित ऊँचाई 80% है, जो आपके स्वयं के प्रश्न का उत्तर नहीं देता है: "जब आप मोडल की सही ऊँचाई नहीं जानते हैं, तो आप केंद्र में लंबवत रूप से स्थिति कैसे बना सकते हैं ?"
मंदबल्म

... स्क्रीन की ऊंचाई की तुलना में ऊंचाई आयाम MAXIMUM मोडल ऊंचाई को सीमित करने के लिए निर्धारित है। हालांकि, अनुवाद का प्रतिशत कंटेंट की ऊंचाई के अनुसार निर्धारित किया गया है।
स्कूटर

3
यदि आप एक समाधान प्राप्त करना चाहते हैं जो मोडल बॉक्स के आकार को नहीं बदलता है तो निम्न सीएसएस समाधान को भी आज़माएं : tweaks.klickagent.ch/#30.05.2014_TwitterBootstrapCenterModal
klnagent.ch

साथ ही बहुत अच्छा। हालाँकि, इसका एक अलग दृष्टिकोण है, जिसका मैं वर्णन कर रहा हूँ। आपके मामले में पूरा मोडल ऊपर-नीचे होता है, जब मेरे मामले में एक ओवरफ्लो तत्व बनता है। हालांकि बहुत अच्छा! मुझें यह पसंद है!
स्कूटरलॉर्ड

इसे सेट करने के लिए ऊँचाई की आवश्यकता होती है .. जो उपयोगकर्ता द्वारा पूछे जाने के समान नहीं है।
विद्रोह

21

यदि आप flexbox का उपयोग करने के साथ ठीक हैं तो इसे हल करने में मदद करनी चाहिए।

.modal-dialog {
  height: 100%;
  width: 100%;
  display: flex;
  align-items: center;
}

.modal-content {
  margin: 0 auto;
}

7
मुझे पता है कि यह जवाब मेरे लिए बहुत अच्छा काम करता है। हालांकि, अगर आप उपयोगकर्ताओं के लिए यह की पृष्ठभूमि पर क्लिक करके एक मॉडल को बंद बताना चाहते हैं, जोड़ना सुनिश्चित करें pointer-events: noneके लिए .modal-dialogऔर pointer-events: autoकरने के लिए .modal-content। बीकासू .modal-dialog {height: 100%}एक मॉडल के ऊपर और नीचे पूरे कॉलम को कवर करता है और उपयोगकर्ताओं को उस क्षेत्र की पृष्ठभूमि पर क्लिक करने के लिए अक्षम करता है।
वेट करें

@ChingTingWu से सुझाव है, सबसे प्रभावी के साथ संयुक्त
Strider

और कहाँ @ChingTingWu सुझाव है?
giovannipds

1
ChingTingWu
xiaolin

1
@giovannipds ओह, मैंने अपना उपयोगकर्ता नाम बदल दिया है, क्योंकि यह छोटा है और टैग किया जाना आसान है। भ्रमित करने के लिए क्षमा करें :)
wuct

20

मेरा समाधान:

.modal.in .modal-dialog 
{
    -webkit-transform: translate(0, calc(50vh - 50%));
    -ms-transform: translate(0, 50vh) translate(0, -50%);
    -o-transform: translate(0, calc(50vh - 50%));
    transform: translate(0, 50vh) translate(0, -50%);
}

यह बूटस्ट्रैप 3 के साथ पूरी तरह से काम करने लगता है। यह स्वीकृत उत्तर क्यों नहीं है? दूसरों की तुलना में इसका बहुत सरल (4 सीएसएस निर्देश)।
danielricecodes

@danielricecodes मैं एक शॉट लेने जा रहा हूं और मान रहा हूं कि व्यूपोर्ट इकाइयों के साथ यह समस्या है। । IE9, और iOs, जो मुझे सुझाव देते हैं, के साथ भी स्कूटरलॉर्ड द्वारा प्रस्तावित संगतता का प्रस्तावित जवाब चिंता का विषय है। यदि आप canIuse के मुद्दों पृष्ठ की जाँच करते हैं, तो आप देखेंगे कि iOs और IE10 और पुराने के साथ समस्याएं हैं। ऐसा नहीं है कि मैं सहमत हूं या नहीं कि यह सही उत्तर है। मैं सिर्फ इशारा कर रहा हूं कि शायद इस जवाब के रूप में क्यों नहीं चुना गया।
मालवोस

1
इस दृष्टिकोण के साथ एक मुद्दा है जब मोडल में स्क्रॉल करने योग्य सामग्री (विंडो में फिट होने से अधिक सामग्री) है
स्टीवन प्रिबिलिनस्की

यह स्वीकृत उत्तर होना चाहिए। अब तक मेरे लिए यही एकमात्र उपाय काम करता है। इसके लिए धन्यवाद।
शिफू

यह काम नहीं करेगा यदि आपकी मोडल सामग्री स्क्रीन की ऊँचाई से अधिक है (यदि आपके मोडल को स्क्रॉल करना है)
ब्रेट ग्रेगसन

18

मेरे मामले में मैंने जो कुछ भी किया है वह मोडल की ऊंचाई को जानते हुए अपनी सीएसएस में टॉप सेट करना है

<div id="myModal" class="modal fade"> ... </div>

मेरे सीएसएस में मैंने सेट किया

#myModal{
    height: 400px;
    top: calc(50% - 200px) !important;
}

1
सीएसएस के लिए एक noob के रूप में, यह जवाब सबसे कम भयावह लग रहा था और काम मिल गया
Oded Ben Dov

2
यह प्रश्न के पहले भाग का उत्तर नहीं देता है: ".. जब आप मोडल की सही ऊँचाई नहीं जानते हैं?"
natec

15

इस साधारण सीएसएस को जोड़ना भी काम करता है।

.modal-dialog {
  height: 100vh !important;
  display: flex;
}

.modal-content {
  margin: auto !important;
  height: fit-content !important;
}

फिट-कंटेंट क्या है?
मार्क रूसेल

12

सीएसएस का उपयोग करने का एक आसान तरीका है:

.modal-dialog {
    position: absolute;
    left: 0;
    right: 0;
    top: 0;
    bottom: 0;
    margin: auto;
    width:500px;
    height:300px;
}

बस। ध्यान दें कि इसे केवल .modal-dialogकंटेनर div पर लागू करने की आवश्यकता है ।

डेमो: https://jsfiddle.net/darioferrer/0ueu4dmy/


7
निश्चित चौड़ाई और ऊंचाई के कारण मोबाइल पर उत्तरदायी नहीं है।
ianstigator

आपका उत्तर मानता है कि हर डिवाइस का स्क्रीन रिज़ॉल्यूशन एक ही है
पेट्रीसियो रॉसी

कोई आदमी नहीं। मुझे लगता है कि आप इस उदाहरण को समझ गए हैं और आप इसे प्रत्येक मामले में अनुकूलित करने में सक्षम हैं।
डेरियो फेरर

बूटस्ट्रैप में v3.3.0 सफल रहा, धन्यवाद
अमीन घुदेरी

11

@ फिनिक के उत्कृष्ट उत्तर पर विस्तार करते हुए, यह फिक्स केवल गैर-मोबाइल उपकरणों पर लागू होता है। मैंने IE8, क्रोम और फ़ायरफ़ॉक्स 22 में परीक्षण किया है - यह बहुत लंबी या छोटी सामग्री के साथ काम करता है।

.modal {
  text-align: center;
}
@media screen and (min-device-width: 768px) {
  .modal:before {
    display: inline-block;
    vertical-align: middle;
    content: " ";
    height: 100%;
  }
}

.modal-dialog {
  display: inline-block;
  text-align: left;
  vertical-align: middle;
}

8

सबसे सार्वभौमिक समाधान जो मैंने लिखा था। डायनामिकल डायलॉग ऊंचाई के साथ गणना करता है। (अगला चरण खिड़की के आकार पर संवादों की ऊँचाई का पुनर्गणना हो सकता है।)

JSfiddle: http://jsfiddle.net/8Fvg9/3/

// initialise on document ready
jQuery(document).ready(function ($) {
    'use strict';

    // CENTERED MODALS
    // phase one - store every dialog's height
    $('.modal').each(function () {
        var t = $(this),
            d = t.find('.modal-dialog'),
            fadeClass = (t.is('.fade') ? 'fade' : '');
        // render dialog
        t.removeClass('fade')
            .addClass('invisible')
            .css('display', 'block');
        // read and store dialog height
        d.data('height', d.height());
        // hide dialog again
        t.css('display', '')
            .removeClass('invisible')
            .addClass(fadeClass);
    });
    // phase two - set margin-top on every dialog show
    $('.modal').on('show.bs.modal', function () {
        var t = $(this),
            d = t.find('.modal-dialog'),
            dh = d.data('height'),
            w = $(window).width(),
            h = $(window).height();
        // if it is desktop & dialog is lower than viewport
        // (set your own values)
        if (w > 380 && (dh + 60) < h) {
            d.css('margin-top', Math.round(0.96 * (h - dh) / 2));
        } else {
            d.css('margin-top', '');
        }
    });

});

7

यहां से सही समाधान मिला

$(function() {
    function reposition() {
        var modal = $(this),
            dialog = modal.find('.modal-dialog');
        modal.css('display', 'block');

        // Dividing by two centers the modal exactly, but dividing by three 
        // or four works better for larger screens.
        dialog.css("margin-top", Math.max(0, ($(window).height() - dialog.height()) / 2));
    }
    // Reposition when a modal is shown
    $('.modal').on('show.bs.modal', reposition);
    // Reposition when the window is resized
    $(window).on('resize', function() {
        $('.modal:visible').each(reposition);
    });
});

1
धन्यवाद। एक बदलाव के साथ मेरे लिए बिल्कुल सही: डायलॉग। एसकेएस ("मार्जिन-टॉप", मैथ.मैक्स (0, ($ (डॉक्यूमेंट)) .scrollTop () + (($ (विंडो) .height) (- डायलॉग.हाईट ())। (2))));
वायाचेस्लाव सोलातोव

4
$('#myModal').on('shown.bs.modal', function() {
    var initModalHeight = $('#modal-dialog').outerHeight(); //give an id to .mobile-dialog
    var userScreenHeight = $(document).outerHeight();
    if (initModalHeight > userScreenHeight) {
        $('#modal-dialog').css('overflow', 'auto'); //set to overflow if no fit
    } else {
        $('#modal-dialog').css('margin-top', 
        (userScreenHeight / 2) - (initModalHeight/2)); //center it if it does fit
    }
});

चयनकर्ताओं पर एक दो के साथ यह आकर्षण की तरह काम किया। @$modal = $('.fade.in'); modalBox = @$modal.find('.modal-content'); initModalHeight = modalBox.outerHeight(); userScreenHeight = @$modal.outerHeight()
juliangonzalez

4

यहाँ एक अन्य सीएसएस केवल एक विधि है जो बहुत अच्छी तरह से काम करती है और इस पर आधारित है: http://zerosixthree.se/vertical-align-anything-with-just-3-lines-of-css/

सास:

.modal {
    height: 100%;

    .modal-dialog {
        top: 50% !important;
        margin-top:0;
        margin-bottom:0;
    }

    //keep proper transitions on fade in
    &.fade .modal-dialog {
        transform: translateY(-100%) !important;
    }
    &.in .modal-dialog {
        transform: translateY(-50%) !important;
    }
}

अन्य transformसमाधानों के साथ समस्या तब होती है जब मोडल में स्क्रॉल करने योग्य सामग्री होती है (विंडो में फिट होने से अधिक सामग्री)
स्टीवन प्रिबिलिंस्की

3

मैंने bellow लिंक से bootstrap3- डायलॉग डाउनलोड किया है और बूटस्ट्रैप-डायलॉग्स में खुले फ़ंक्शन को संशोधित किया है

https://github.com/nakupanda/bootstrap3-dialog

कोड

open: function () {
            !this.isRealized() && this.realize();
            this.updateClosable();
            //Custom To Vertically centering Bootstrap 
            var $mymodal = this.getModal();
            $mymodal = $mymodal.append('<table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%"><tr><td align="center" valign="middle" class="centerModal"></td></tr></table>');
            $mymodal = $mymodal.find(".modal-dialog").appendTo($mymodal.find(".centerModal"));
            //END
            this.getModal().modal('show');
            return this;
        }

सीएसएस

.centerModal .modal-header{
    text-align:left;
}
.centerModal .modal-body{
    text-align:left;
} 

यहां एक संशोधन है जिसे मूल BSDialog स्रोत को बदलने के बिना, अपने स्वयं के कोड में लागू किया जा सकता है: gist.github.com/mahemoff/8ff6d3782d2da6f9cb3 (JS में कुछ संशोधन, कॉफी में भी लिखा गया है, लेकिन आपको यह विचार मिलता है)।
Mahemoff

3

यह मेरे लिए काम करता है:

.modal {
  text-align: center;
  padding: 0!important;
}

.modal:before {
  content: '';
  display: inline-block;
  height: 100%;
  vertical-align: middle;
  margin-right: -4px;
}

.modal-dialog {
  display: inline-block;
  text-align: left;
  vertical-align: middle;
}

2

कुछ इस तरह की कोशिश करो:

.popup__overlay {
    position: fixed;
    left:  0;
    top:  0;
    width: 100%;
    height: 100%;
    z-index: 999;
    text-align: center
    }
.popup {
    display: inline-block;
    vertical-align: middle
    } 

1
यह काफी अच्छा काम कर सकता है लेकिन बूटस्ट्रैप मोडल निरपेक्ष होते हैं, निश्चित रूप से, इस के अंदर और वह ...: /
स्कूटर

1
बूटस्ट्रैप / बूटस्ट्रैप मोडल्स के साथ इन कक्षाओं का क्या करना है?
लोफिएलसिंकी

1

तुम एक div केंद्रित करने के लिए तरीकों के इस संग्रह की जाँच करना चाहते हो सकता है: http://codepen.io/shshaw/full/gEdDt


1
हम्म, यह गुफाओं में कहता है कि आपको ऊंचाई घोषित करनी होगी, जो कि मैं नहीं देख रहा हूँ
स्कूटर

1

एक सरल तरीका है। मेरे लिए काम। Thks rensdenobel :) http://jsfiddle.net/rensdenobel/sRmLV/13/

<style>
.vertical-alignment-helper {
    display:table;
    height: 100%;
    width: 100%;
}
.vertical-align-center {
    /* To center vertically */
    display: table-cell;
    vertical-align: middle;
}
.modal-content {
    /* Bootstrap sets the size of the modal in the modal-dialog class, we need to inherit it */
    width:inherit;
    height:inherit;
    /* To center horizontally */
    margin: 0 auto;
}
</style>
<!-- Button trigger modal -->
<button class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModal">Launch demo modal</button>
<!-- Modal -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="vertical-alignment-helper">
        <div class="modal-dialog vertical-align-center">
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span>

                    </button>
                     <h4 class="modal-title" id="myModalLabel">Modal title</h4>

                </div>
                <div class="modal-body">...</div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                    <button type="button" class="btn btn-primary">Save changes</button>
                </div>
            </div>
        </div>
    </div>
</div>    

1

अभी तक एक और समाधान जो window.resizeघटना पर और पर प्रत्येक दृश्यमान मोडल के लिए एक वैध स्थिति निर्धारित करेगा show.bs.modal:

(function ($) {
    "use strict";
    function centerModal() {
        $(this).css('display', 'block');
        var $dialog  = $(this).find(".modal-dialog"),
            offset       = ($(window).height() - $dialog.height()) / 2,
            bottomMargin = parseInt($dialog.css('marginBottom'), 10);

        // Make sure you don't hide the top part of the modal w/ a negative margin if it's longer than the screen height, and keep the margin equal to the bottom margin of the modal
        if(offset < bottomMargin) offset = bottomMargin;
        $dialog.css("margin-top", offset);
    }

    $(document).on('show.bs.modal', '.modal', centerModal);
    $(window).on("resize", function () {
        $('.modal:visible').each(centerModal);

    });
})(jQuery);

1
var modalVerticalCenterClass = ".modal";
function centerModals($element) {
    var $modals;
    if ($element.length) {
        $modals = $element;
    } else {
        $modals = $(modalVerticalCenterClass + ':visible');
    }
    $modals.each( function(i) {
        var $clone = $(this).clone().css('display', 'block').appendTo('body');
        var top = Math.round(($clone.height() - $clone.find('.modal-content').height()) / 2);
        top = top > 0 ? top : 0;
        $clone.remove();
        $(this).find('.modal-content').css("margin-top", top);
    });
}
$(modalVerticalCenterClass).on('show.bs.modal', function(e) {
    centerModals($(this));
});
$(window).on('resize', centerModals);

1

मुझे पता है कि थोड़ी देर हो गई है, लेकिन मैं एक नया उत्तर जोड़ रहा हूं ताकि यह भीड़ में खो न जाए। यह एक क्रॉस-डेस्कटॉप-मोबाइल-ब्राउज़र समाधान है जो हर जगह ठीक से काम करता है जैसा कि इसे करना चाहिए।

यह बस modal-dialogएक modal-dialog-wrapवर्ग के अंदर लपेटे जाने की जरूरत है और निम्नलिखित कोड अतिरिक्त होने की आवश्यकता है:

.modal-dialog-wrap {
  display: table;
  table-layout: fixed;
  width: 100%;
  height: 100%;
}

.modal-dialog {
  display: table-cell;
  vertical-align: middle;
  text-align: center;
}

.modal-content {
  display: inline-block;
  text-align: left;
}

संवाद केंद्रित होने लगता है और बड़ी सामग्री के मामलों में यह केवल एक स्क्रॉलबार के प्रकट होने तक लंबवत रूप से बढ़ता है।

यहाँ अपनी खुशी के लिए एक काम कर रहे बेला है!

https://jsfiddle.net/v6u82mvu/1/


1

यह काफी पुराना है और विशेष रूप से बूटस्ट्रैप 3 का उपयोग करके एक समाधान के लिए पूछता है, लेकिन किसी को भी आश्चर्य नहीं है: बूटस्ट्रैप 4 से एक अंतर्निहित समाधान कहा जाता है .modal-dialog-centered। यहाँ मुद्दा है: https://github.com/twbs/bootstrap/issues/23638

तो v4 का उपयोग करके आपको केवल मोडल को लंबवत केंद्र में जोड़ना .modal-dialog-centeredहोगा .modal-dialog:

<!-- Button trigger modal -->
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModalCenter">
  Launch demo modal
</button>

<!-- Modal -->
<div class="modal fade" id="exampleModalCenter" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle" aria-hidden="true">
  <div class="modal-dialog modal-dialog-centered" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="exampleModalCenterTitle">Modal title</h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body">
        ...
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Save changes</button>
      </div>
    </div>
  </div>
</div>

0

यहां पाए जाने वाले बूटस्ट्रैप-मोडल प्लगइन का उपयोग करने पर विचार करें - https://github.com/jschr/bootstrap-modal

प्लगइन आपके सभी मॉडल्स को केंद्र में रखेगा


... दुर्भाग्य से मैंने कोशिश की थी, लेकिन यह ठीक से काम नहीं कर सका - कम से कम मेरे कोड के साथ नहीं। मुझे लगता है कि हर किसी को उसकी जरूरतों को अनुकूलित करने की आवश्यकता है! हालांकि उत्तर के लिए धन्यवाद।
स्कूटर

0

केंद्रित करने के लिए, मुझे अति जटिल समाधानों के साथ क्या नहीं मिलता है। बूटस्ट्रैप पहले से ही इसे आपके लिए क्षैतिज रूप से केंद्र में रखता है, इसलिए आपको इसके साथ गड़बड़ करने की आवश्यकता नहीं है। मेरा समाधान सिर्फ jQuery का उपयोग करके एक शीर्ष मार्जिन सेट किया गया है।

$('#myModal').on('loaded.bs.modal', function() {
    $(this).find('.modal-dialog').css({
        'margin-top': function () {
            return (($(window).outerHeight() / 2) - ($(this).outerHeight() / 2));
        }
    });
});

मैंने भरी हुई .bs.modal घटना का उपयोग किया है क्योंकि मैं दूरस्थ रूप से सामग्री लोड कर रहा हूं, और show.ba.modal घटना का उपयोग करने से ऊंचाई की गणना गलत हो जाती है। आप निश्चित रूप से खिड़की के आकार बदलने की स्थिति में जोड़ सकते हैं यदि आपको इसे उत्तरदायी बनाने की आवश्यकता है।


यदि मोडल काफी बड़ा है, तो यह मुद्दों का कारण बन सकता है
स्कूटर

0

इस अवधारणा को प्राप्त करने के लिए बहुत आसान तरीका है और आप fllow के रूप में सीएसएस द्वारा हमेशा अपनी स्क्रीन के मोडल में मोडल प्राप्त करेंगे: http://jsfiddle.net/jy0zc2jc/1/

आपको modalसीएसएस का पालन करके टेबल के रूप में सिर्फ क्लास डिस्प्ले करना है:

display:table

और के modal-dialogरूप मेंdisplay:table-cell

दिए गए बेला में पूर्ण कार्य उदाहरण देखें


मैं सभी में एक मॉडल नहीं देखता
थान्डिनसर

केवल एक चीज जो मैं देख रहा हूं (Google Chrome में) एक रेड क्रॉस आइकन और पृष्ठभूमि है
ThaDafinser


0

यह उतना जटिल नहीं है।

कृपया इसे आज़माएँ:

$(document).ready(function(){
    var modalId = "#myModal";
    resize: function(){
            var new_margin = Math.ceil(($(window).height() - $(modalId).find('.modal-dialog').height()) / 2);
            $(modalId).find('.modal-dialog').css('margin-top', new_margin + 'px');
    }
    $(window).resize(function(){
        resize();
    });
    $(modalId).on('shown.bs.modal', function(){
        resize();
    });
});

0

इस सरल स्क्रिप्ट का उपयोग करें जो मॉडल्स को केंद्र में रखता है।

यदि आप चाहते हैं कि आप केवल कुछ मोडल की कार्यक्षमता को सीमित करने के लिए (.modal के बजाय .modal.modal-vcenter) एक कस्टम वर्ग सेट कर सकते हैं।

var modalVerticalCenterClass = ".modal";

function centerModals($element) {
    var $modals;
    if ($element.length) {
    $modals = $element;
    } else {
    $modals = $(modalVerticalCenterClass + ':visible');
}
$modals.each( function(i) {
    var $clone = $(this).clone().css('display', 'block').appendTo('body');
    var top = Math.round(($clone.height() - $clone.find('.modal-content').height()) / 2);
    top = top > 0 ? top : 0;
    $clone.remove();
    $(this).find('.modal-content').css("margin-top", top);
    });
}
$(modalVerticalCenterClass).on('show.bs.modal', function(e) {
    centerModals($(this));
});
$(window).on('resize', centerModals);

मॉडल के क्षैतिज रिक्ति के लिए इस सीएसएस फिक्स को भी जोड़ें; हम मॉडल्स पर स्क्रॉल दिखाते हैं, बॉडी स्क्रॉल बूटस्ट्रैप द्वारा स्वचालित रूप से छिपाए जाते हैं:

/* scroll fixes */
.modal-open .modal {
    padding-left: 0px !important;
    padding-right: 0px !important;
    overflow-y: scroll;
}

0

मोबाइल प्लांटफॉर्म में यह थोड़ा अलग लग सकता है, यहां मेरा कोड है।

<div class="modal-container">
  <style>
  .modal-dialog{
    margin-top: 60%;
    width:80%;
    margin-left: 10%;
    margin-right: 10%;
    margin-bottom: 100%
  }
  @media screen and (orientation:landscape){
    .modal-dialog{
      margin-top: 70;
      width:80%;
      margin-left: 10%;
      margin-right: 10%;
      margin-bottom: 100%
    }
  }
  .modal-body{
    text-align: center;
  }
  .modal-body p{
    margin:14px 0px;
    font-size: 110%;
  }
  .modal-content{
    border-radius: 10px;
  }
  .modal-footer{
    padding:0px;
  }
  .modal-footer a{
    padding: 15px;
  }
  .modal-footer a:nth-child(1){
    border-radius: 0px 0px 0px 10px;
  }
  .modal-footer a:nth-child(2){
    border-radius: 0px 0px 10px 0px;
  }
  </style>
  <h2>Basic Modal Example</h2>
  <div data-toggle="modal" data-target="#myModal">Div for modal</div>
    <div class="modal fade" id="myModal" role="dialog">
      <div class="modal-dialog">
        <div class="modal-content">
          <div class="modal-body">
            <p>确定要取消本次订单嘛?</p>
          </div>
          <div class="modal-footer">
            <div class="btn-group btn-group-justified">
              <a href="#" class="btn btn-default" data-dismiss="modal">取消</a>
              <a href="#" class="btn btn-default" data-dismiss="modal">确定</a>
            </div>
          </div>
        </div>
      </div>
    </div>
</div>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.