বুটস্ট্র্যাপ 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;
}

এবং কেন্দ্রের পরিবর্তে উইন্ডোর উপরের সীমানার বাইরে উপস্থিত রয়েছে তা নিশ্চিত করার জন্য একটু ফ্যাড ক্লাস সামঞ্জস্য করুন


আমি আসলে ভুল করে এটিকে ওভাররাইড করছিলাম, এটি আড়াল করার জন্য ধন্যবাদ এটি আসলে পর্দার আড়ালে কাজ করে।
ডোরিয়ান

এটি কেবল বুটস্ট্র্যাপ মডেল নয়, সমস্ত কিছু উল্লম্বভাবে কেন্দ্র করার সর্বোত্তম উপায়। css-tricks.com/centering-in-the-unعلوم
মার্ক এস '

4
আমি পরিষ্কার করে দিয়েছি যে এটি মোবাইলে খুব ভাল কাজ করে না। কারণ সংজ্ঞা ":" এর পরে "100% উচ্চতা থাকার পরে এবং স্বয়ংক্রিয়ভাবে মোডালটিকে পৃষ্ঠার নীচে সরানো যেতে পারে। আমি সবেমাত্র .ডমাল flex ডিসপ্লে ঘোষণা করে সমাধান করেছি: ফ্লেক্স! গুরুত্বপূর্ণ; mod .মডাল-ডায়লগ {মার্জিন: অটো} ইতিমধ্যে ৯২.৯7% লোক এই সিএসএস সম্পত্তিটি ব্যবহার করে সমর্থন করেছে, তবে সাধারণ সুপার্টের জন্য মার্জিন সেট করতে জাভাস্ক্রিপ্ট ব্যবহার করতে পারেন।
ওয়াল্টার চ্যাপিলিকুইন - ডাব্লুজেডভিং

21
অবশ্যই দুর্দান্ত, তবে আমি এটি কেবলমাত্র 768px এর উপরে ব্যবহার করার পরামর্শ দেব এবং মোবাইলে ডিফল্ট সেটিংটি রেখে দেব। যখন পর্দার উচ্চতা ছোট হয় তখন মডেলগুলির জন্য শীর্ষ অবস্থানটি সেরা। এনিমেশনটি এটিকে কেন্দ্র থেকে প্রদর্শিত করার জন্য আমি এডজাস্টও
স্পেন

এই দ্রবণটি মোডাল উইন্ডোটি 2px-র ডানদিকে ডানদিকে সরান, কারণ: মৌলটির আগে। তবে এর জন্য একই কোড যুক্ত করে এটি সমাধান করা যেতে পারে: পরে
সাইফার

146

১. আপনি যখন মডেলের সঠিক উচ্চতা জানেন না তখন আপনি কেন মাঝখানে মডেলটিকে উল্লম্বভাবে অবস্থান করতে পারেন?

কোনও উচ্চতা ঘোষণা না করে বুটস্ট্র্যাপ 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%;
  }
} 

এখন আমাদের জাভাস্ক্রিপ্টের সাথে এর অবস্থানটি সামঞ্জস্য করতে হবে। এটি করার জন্য আমরা উপাদানটিকে তার উচ্চতা এবং প্রস্থের অর্ধের সমান aণাত্মক শীর্ষ এবং বাম মার্জিনটি দেই। এই উদাহরণে আমরা 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 পৃষ্ঠার নীচে লাফিয়ে তুলতে বাধ্য করে।

২. মডেল কেন্দ্রিক এবং ওভারফ্লো হওয়া সম্ভব: মডেল-বডিতে অটো, তবে কেবল যদি মডেলটি স্ক্রিনের উচ্চতা ছাড়িয়ে যায়?

মডেল-বডিকে একটি ওভারফ্লো-ওয়াই: অটো এবং সর্বোচ্চ-উচ্চতা দিয়ে এটি সম্ভব। এটি সঠিকভাবে কাজ করতে আরও কিছুটা সময় লাগে। আপনার স্টাইল শীটে এটি যুক্ত করে শুরু করুন:

.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.০.৩ সহ একটি ওয়ার্কিং ডেমো খুঁজে পেতে পারেন: http://cdpn.io/GwvrJ সম্পাদনা: আমি আরও প্রতিক্রিয়াশীল সমাধানের পরিবর্তে আপডেট সংস্করণটি ব্যবহার করার পরামর্শ দিচ্ছি: 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
চমৎকার উত্তর এবং পোস্ট! তবে, এটি কি অ্যানিমেটেড করা যেতে পারে? এটি দুর্দান্তভাবে কাজ করে যখন এটি কেবল পপ ইন করে, তবে অ্যানিমেটেডের কী হবে? আমি কর্মক্ষেত্রে আছি এবং এটি এটিএম পরীক্ষা করতে পারছি না, তবে আমি ফলাফলগুলি দেখতে আগ্রহী
স্কুটারলর্ড

আপনি মডেলে একটি বিবর্ণ ক্লাস যুক্ত করতে পারেন। Cdpn.io/mKfCc-
dimbslmh

যদিও কোডেকেনটিতে এটি দুর্দান্ত কাজ করছে বলে মনে হচ্ছে, আমি এটি আমার প্রকল্পে কাজ করতে পারি না। আমার ধারণা আপনার কেবল কোড যুক্ত করতে হবে এবং সঠিক কিছু প্রতিস্থাপন করা উচিত নয়?
স্কুটারলর্ড

1
ওহে আবার! নীচে লক্ষ্য করা। প্রথম মডেলটি প্রথম যখন খোলে তখন আপনি একবারের আকার পরিবর্তন না করা অবধি সঠিক মার্জিনটি ভুল। এই কোন আপত্তি?
স্কুটারলর্ড

1
: @bernie আমি আমার codepen একটি কাঁটাচামচ যা হয়েছে সংক্ষিপ্ত মোডাল document.ready খোলা সঙ্গে Browserstack উপর স্ক্রিনশট তৈরি browserstack.com/screenshots/... Browserstack স্ক্রিনশট (এখনও) জন্য v9.3.x সমর্থন করে না, কিন্তু আমি মনে করি আপনার বর্ণিতটির অনুরূপ কিছু আইওএস 6.0 এ ঘটে (স্ক্রিনশট আইপ্যাড 3 য় (6.0) (প্রতিকৃতি) দেখুন। সম্ভবত এটি একটি পুরানো বাগ যা v9.3.2 এ ফিরে এসেছে। আপনি যদি চান, আপনি forums.developer.apple.com/commune/safari-and-web/…
dimbslmh

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>

ইউসকে প্যাডিং-টপ ব্যবহার করা উচিত। আপনি ওভারলেতে ক্লিক করলে মার্জিনটি ঘনিষ্ঠ অ্যাকশনটি ভেঙে দেবে
এএনভিডি

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 উচ্চতার কারণে ব্যাকড্রপটিকে ক্লিক করা থেকে বাধা দেয়। এটি "ব্যাকড্রপ: 'স্ট্যাটিক'" সেটিংসের জন্য দুর্দান্ত।
ranstigator

এই কারণ অ্যানিমেশন ইস্যু বিবর্ণ
বিশ্বনাথ লেকশমানান

23

আমি একটি খাঁটি সিএসএস সমাধান নিয়ে এসেছি! এটি সিএস 3 যদিও, যার অর্থ IE8 বা নিম্নটি ​​সমর্থিত নয়, তবে এর বাইরে এটি আইওএস, অ্যান্ড্রয়েড, আই 9 +, ক্রোম, ফায়ারফক্স, ডেস্কটপ সাফারি পরীক্ষিত এবং কাজ করছে ...

আমি নিম্নলিখিত সিএসএস ব্যবহার করছি:

.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%, যা আপনার নিজের প্রশ্নের উত্তর দেয় না: "আপনি যখন মডেলের সঠিক উচ্চতা জানেন না তখন আপনি কেন কেন্দ্রটিতে উল্লম্বভাবে অবস্থান করতে পারেন ?"
dimbslmh

... উচ্চতার মাত্রা পর্দার উচ্চতার তুলনায় MAXIMUM মডেল উচ্চতা সীমিত করতে সেট করা হয়েছে। যাইহোক, অনুবাদটির শতাংশটি CONTENT উচ্চতা অনুসারে সেট করা হয়েছে।
স্কুটারলর্ড

3
আপনি যদি এমন কোনও সমাধান পেতে চান যা মডেল
klickagent.ch

খুব সুন্দর। যাইহোক, আমি বর্ণনা করছি তার থেকে আলাদা পদ্ধতির রয়েছে। আপনার ক্ষেত্রে পুরো মডেলটি উপরে এবং নীচে চলে আসে, যখন আমার ক্ষেত্রে একটি ওভারফ্লাউন উপাদান তৈরি হয়। খুব সুন্দর যদিও! আমি এটা পছন্দ করি!
স্কুটারলর্ড

এটির জন্য উচ্চতা নির্ধারণ করা দরকার .. যা ব্যবহারকারীর অনুরোধের ঠিক তেমন নয়।
বিদ্রোহ

21

আপনি যদি ফ্লেক্সবক্স ব্যবহার করে ঠিক থাকেন তবে এটি সমাধান করতে সহায়তা করা উচিত।

.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%}পুরো কলামটি উপরে এবং কোনও মডেল এবং অক্ষম ব্যবহারকারীদের নীচে on অঞ্চলে ব্যাকড্রপ ক্লিক করতে কভার করে।
23:55

@ChingTingWu থেকে পরামর্শের, সবচেয়ে কার্যকর সঙ্গে মিলিত
strider

এবং @ ছিংটিংওয়ু পরামর্শটি কোথায়?
জিওভান্নিপস

1
চিংটিংউউ-এর @wct
xiaolin

1
@ গিওভানিপিডস ওফস, আমি আমার ব্যবহারকারীর নামটির নামকরণ করেছি, কারণ এটি ট্যাগ করা ছোট এবং সহজ। বিভ্রান্তির জন্য দুঃখিত :)
uct

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

@ ড্যানিয়েল্রিকিকোডস আমি একটি শট নেব এবং ধরে নিচ্ছি এটি ভিউপোর্ট ইউনিটগুলির সাথে সম্পর্কিত সমস্যার কারণে । স্কুটারলর্ডের প্রস্তাবিত উত্তরটি আইই 9 এবং আইও-র সাথেও সামঞ্জস্যের প্রস্তাব করেছিল, যা আমার কাছে পরামর্শ দেয় concern আপনি যদি ক্যানআইজের সমস্যাগুলির পৃষ্ঠাটি পরীক্ষা করেন, আপনি দেখতে পাবেন যে আইও এবং আইই 10 এবং এর চেয়েও পুরনো সমস্যা রয়েছে। আমি একমত নই বা এটি সঠিক উত্তর নয় Not আমি শুধু কেন ইশারা করছি হয়তো এই উত্তর হিসেবে নির্বাচিত করা হয় নি।
মালাভোস

1
এই পদ্ধতির সাথে একটি সমস্যা আছে যখন মডেলে স্ক্রোলযোগ্য সামগ্রী থাকে (উইন্ডোতে ফিট করার চেয়ে বেশি সামগ্রী)
স্টিভেন প্রবিলিনস্কি

এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। এখনও পর্যন্ত এটিই আমার জন্য একমাত্র সমাধান কাজ করে। এর জন্য ধন্যবাদ.
shifu

আপনার মোডাল সামগ্রী যদি স্ক্রিনের উচ্চতার চেয়ে বেশি হয় তবে এটি কাজ করবে না (যদি আপনার মডেলটি স্ক্রোল করতে হয়)
ব্রেট গ্রেগসন

18

আমি আমার ক্ষেত্রে যা করেছি তা হ'ল মডেলের উচ্চতা জেনে আমার সিএসএসে শীর্ষস্থান নির্ধারণ করা

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

আমার সিএসএসে আমি সেট করেছি

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

1
সিএসএসের নুবি হিসাবে, এই উত্তরটি সবচেয়ে কম ভয়ঙ্কর বলে মনে হয়েছিল এবং কাজটি সম্পন্ন করেছে
ওদেড বেন ডভ

2
এটি প্রশ্নের প্রথম অংশটির উত্তর দেয় না: ".. আপনি যখন মডেলের সঠিক উচ্চতা জানেন না?"
নাটেক

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 ধারক ডিভিতে ।

ডেমো: https://jsfiddle.net/darioferrer/0ueu4dmy/


7
নির্দিষ্ট প্রস্থ এবং উচ্চতার কারণে মোবাইলে প্রতিক্রিয়াশীল নয়।
ranstigator

আপনার উত্তরটি ধরে নিয়েছে যে প্রতিটি ডিভাইসের একই স্ক্রিন রেজোলিউশন রয়েছে
প্যাট্রিসিও রসি

নোমান. আমি ধরে নিলাম আপনি এই উদাহরণটি বুঝতে পেরেছেন এবং আপনি প্রতিটি ক্ষেত্রে এটি খাপ খাইয়ে নিতে সক্ষম।
দারিও ফেরার

বুটস্ট্র্যাপে 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

আমি লিখেছি সবচেয়ে সার্বজনীন সমাধান। ডায়নামিকালি সংলাপের উচ্চতার সাথে গণনা করে। (পরবর্তী পদক্ষেপটি উইন্ডো পুনরায় আকারে সংলাপগুলির উচ্চতার পুনরায় গণনা করা যেতে পারে))

জেএসফিডাল: 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
ধন্যবাদ. এক পরিবর্তনের সাথে আমার জন্য পারফেক্ট: ডায়ালগ। / 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()
জুলিয়ানগনজালেজ

4

এখানে আরও একটি সিএসএস পদ্ধতি রয়েছে যা বেশ ভালভাবে কাজ করে এবং এর উপর ভিত্তি করে: http://zerosixthree.se/vertical-align-anything-with-just-3-lines-of-css/

Sass:

.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

আমি বেলস্ট লিংক থেকে বুটস্ট্রা ৩-ডায়ালগ ডাউনলোড করেছি এবং বুটস্ট্র্যাপ-ডায়ালগ.জেজে খোলা ফাংশনটি সংশোধন করেছি

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;
        }

CSS

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

মূল BSDialog উত্সটি পরিবর্তন না করেই আপনার নিজের কোডে প্রয়োগ করা যেতে পারে এমন একটি পরিবর্তন এখানে দেওয়া হয়েছে: gist.github.com/mahemoff/8ff6d3782d2da6f9cbb3 (জেএস-তে কিছু পরিবর্তন রয়েছে, এটি কফিতেও লেখা আছে তবে আপনি ধারণাটি পাবেন)।
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
এই ক্লাসগুলির বুটস্ট্র্যাপ / বুটস্ট্র্যাপ মডেলগুলির সাথে কী করতে হবে?
lofihelsinki

1

আপনি একটি ডিভিকে কেন্দ্র করে নিখুঁত করার জন্য পদ্ধতিগুলির এই সংগ্রহটি চেক করতে চাইতে পারেন: http://codepen.io/shshaw/full/gEiDt


1
এইচএম, এটি ক্যাফিটগুলিতে বলে যে আপনাকে উচ্চতা ঘোষণা করতে হবে, যা আমি খুঁজছি তা নয়
স্কুটারলর্ড

1

একটি সহজ উপায়। আমার জন্য কাজ। থিংস রেনডেনোবেল :) 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

আমি জানি কিছুটা দেরি হয়ে গেছে, তবে আমি একটি নতুন উত্তর যুক্ত করছি যাতে এটি ভিড়ের মধ্যে না পড়ে lost এটি একটি ক্রস ডেস্কটপ-মোবাইল-ব্রাউজার সমাধান যা সর্বত্র যথাসম্ভব যথাযথভাবে কাজ করে।

এটি কেবল 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));
        }
    });
});

আমি দূরবর্তীভাবে সামগ্রী লোড করছি বলে আমি লোড.বিএস.মোডাল ইভেন্টটি ব্যবহার করেছি এবং দেখানো.বা.মডাল ইভেন্টটি ব্যবহার করার কারণে উচ্চতার গণনাটি ভুল হতে পারে। উইন্ডোটি পুনরায় আকার দেওয়ার জন্য অবশ্যই কোনও ইভেন্টে যুক্ত করতে পারেন যদি আপনার যদি এটির প্রতিক্রিয়াশীল হতে হয়।


যদি
মডেলটি

0

এই ধারণাটি অর্জনের খুব সহজ উপায় এবং আপনি আপনার স্ক্রিনের মডেলটিতে সর্বদা মডেল হয়ে উঠবেন সিএসএস দ্বারা ফেলো হিসাবে: http://jsfiddle.net/jy0zc2jc/1/

modalসিএসএস অনুসরণ করে আপনাকে কেবল টেবিল হিসাবে ক্লাস প্রদর্শন করতে হবে :

display:table

এবং modal-dialogহিসাবেdisplay:table-cell

প্রদত্ত ফিডলে সম্পূর্ণ কাজের উদাহরণ দেখুন



আমি দেখতে পাচ্ছি (গুগল ক্রোমে) একটি রেড ক্রস আইকন এবং পটভূমি
থাডাফিন্সার

স্ক্রোলবেল নয় যখন
মোডালটির

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-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>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.