Kaydırma çubuğunu yalnızca modal gövde için nasıl koyabilirim?


165

Aşağıdaki öğeye sahibim:

<div class="modal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> 
    <div class="modal-dialog" style="overflow-y: scroll; max-height:85%;  margin-top: 50px; margin-bottom:50px;" > 
        <div class="modal-content"> 
            <div class="modal-header"> 
                <h3 class="modal-title"></h3> 
            </div> 
            <div class="modal-body"></div> 
            <div class="modal-footer"></div> 
        </div> 
    </div> 
</div> 

Böyle kalıcı iletişim şey, temelde, tüm etrafında kaydırma çubuğunu koyar gösterir modal-dialogve modal-bodyben ekrana çalışıyorum içeriğe sahip olduğu.

Görüntü şuna benzer:

resim açıklamasını buraya girin

modal-bodyYalnızca kaydırma çubuğunu nasıl alırım ?

Ben atama denedi style="overflow-y: scroll; max-height:85%; margin-top: 50px; margin-bottom:50px;"etmek modal-bodyama işe yaramadı.


1
Size daha iyi yardım vermek için lütfen çalışan bir örnek verin, bunu yapmak için bootply.com/new kullanabilirsiniz .
Carlos Calla

Ardından, yalnızca gövde kaydırmak için modal içinde isteğe bağlı sıvı üstbilgi ve altbilgi bloklarına izin verin: stackoverflow.com/questions/49173969/…
leontalbot

Yanıtlar:


298

Sen ayarlamak zorunda heightarasında .modal-bodyve verin overflow-y: auto. Ayrıca .modal-dialogtaşma değerini sıfırlayın initial.

Çalışma örneğine bakın:

http://www.bootply.com/T0yF2ZNTUd

.modal{
    display: block !important; /* I added this to see the modal, you don't need this */
}

/* Important part */
.modal-dialog{
    overflow-y: initial !important
}
.modal-body{
    height: 250px;
    overflow-y: auto;
}

Bunun için teşekkürler. Harika çalışıyor. Css'de benim için net olmayan bir şey olabilir. Modal gövde maksimum yüksekliği atamayı denedim:% 65 işe yaramıyor. Sağladığınız çözüm yalnızca modal gövdeye sabit yükseklik atarsam çalışır. Kipli diyalog pencerenin% 85'ini alır ve kipli cisim kipli diyalogun% 90'ını işgal etmeli demenin bir yolu yok mu? Ama yine de sağladığınız çözüm şimdilik benim için çalışıyor. Teşekkürler!
Subodh Nijsure

3
@SubodhNijsure Geç cevap verdiğim için üzgünüm. Yüksekliği% olarak ayarlayamazsınız çünkü bu, üst öğesinin% 'si anlamına gelir, bu durumda üst öğe .modal içeriktir ve yüksekliği çocuklarına bağlıdır. Bu yüzden bunlardan birini yükseklik ayarlamazsanız çalışmaz. .Modal içerik yüksekliğini veya .modal gövde yüksekliğini ayarlarsınız. .Modal içerik yüksekliğini ayarlarsanız, o zaman .modal-gövde yüksekliğini% olarak ayarlayabilirsiniz ve üst öğesinin% 'si olur, böylece% 100'den daha az ayarlarsanız, altta, çünkü tüm .modal içerik yüksekliğini doldurmuyorsunuz.
Carlos Calla

initialEdge için çalışmasına rağmen , CSS anahtar kelimesinin Internet Explorer için çalışmadığını unutmayın.
trysis

18
sadece küçük bir işaretçi: yalnızca 230 piksel yüksekliğinde veya daha az yatay gezinme çubuğuna sahip bazı telefonlarda çirkin görünebilecek "yükseklik 250 piksel" yerine: max-height: 80vh;toplam görüntüleme yüksekliğinin% 80'ini kullanın ve yalnızca maksimum yükseklik için kullanın, küçük bir pop-up
Toskan

1
iyi çalışıyor, ancak modal kapatıldıktan sonra, 'üst' penceresindeki bağlantılar artık tıklanabilir değil ... şu kodla çözüldü: .modal .modal-body {max-height: 420px; taşma-y: otomatik; }
cwhisperer

119

Yalnızca IE 9 veya üstünü destekliyorsanız, pencerenin boyutuna sorunsuz bir şekilde ölçeklenecek bu CSS'yi kullanabilirsiniz. Üstbilginizin veya altbilginizin yüksekliğine bağlı olarak, "200 piksel" ayarını yapmanız gerekebilir.

.modal-body{
    max-height: calc(100vh - 200px);
    overflow-y: auto;
}

[1] ve [2] 'ye göre bu, Chrome, Firefox ve Safari tarafından da desteklenmektedir. [1] developer.mozilla.org/en-US/docs/Web/CSS/… [2] developer.mozilla.org/en-US/docs/Web/CSS/…
ctron

Not: Bu çözüm, ya üst veya alt See yaratılan bu keman ben belirlenen seçeneğe bağlı olarak üst bilgi veya alt altında popover görünür kılan: jsfiddle.net/2qeo99k3/4 css olmadan gayet sadece görmek için keman bunu kaldırmak çalışır kesmek çalışıyor
Marc Roussel

Popover için bir çözüm burada bulunabilir: stackoverflow.com/questions/45666828/…
Marc Roussel

37

Problem @carlos calla ve @jonathan marston ile çözüldü.

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

20

Bootstrap sürümleri için> = 4.3

Bootstrap 4.3, modellere yeni dahili kaydırma özelliği ekledi. Bu, içeriğin boyutu aksi takdirde sayfayı kaydırırsa yalnızca kalıcı gövde içeriğinin kaydırılmasını sağlar. Kullanmak için, sadece sınıf eklemek modal-iletişim-kaydırılabilir vardır aynı div modal-dialog sınıfı.

İşte bir örnek:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.bundle.min.js"></script>
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet"/>
<!-- Button trigger modal -->
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModalScrollable">
  Launch demo modal
</button>

<!-- Modal -->
<div class="modal fade" id="exampleModalScrollable" tabindex="-1" role="dialog" aria-labelledby="exampleModalScrollableTitle" aria-hidden="true">
  <div class="modal-dialog modal-dialog-scrollable" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="exampleModalScrollableTitle">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">
        the<br>quick<br>brown<br>fox<br>
        the<br>quick<br>brown<br>fox<br>
        the<br>quick<br>brown<br>fox<br>
        the<br>quick<br>brown<br>fox<br>
        the<br>quick<br>brown<br>fox<br>
        the<br>quick<br>brown<br>fox<br>
        the<br>quick<br>brown<br>fox<br>
        the<br>quick<br>brown<br>fox<br>
        the<br>quick<br>brown<br>fox<br>
        the<br>quick<br>brown<br>fox<br>
      </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>


14

Carlos Calla'ye Ekleme 'nın büyük bir cevap.

.Modal-body yüksekliği ayarlanmalıdır, AMA ekran boyutuna uygun olduğundan emin olmak için medya sorgularını kullanabilirsiniz.

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

@media (min-height: 500px) {
    .modal-body { height: 400px; }
}

@media (min-height: 800px) {
    .modal-body { height: 600px; }
}

Bir mobil cihazda yüksekliğin 400 piksel veya daha fazla olacağı varsayımı hatalı. Yüksekliği belirlemek için genişliğin kullanılması hiç de uygun bir çözüm değildir. Bunun kırılmasına neden olacak çok fazla kullanım durumu var.
Çilek

2
@Çilek aslında min-yüksekliği (min-genişliği değil) kullandı ve verilen yüksekliğin medya sorgusundaki min-yüksekliğinden daha az olduğundan emin oldu. Buna ek olarak, fikrine sadece bir örnek veriyor çünkü medya sorgusu OP'nin neyi başarmak istediğine bağlı olarak çok değişebilir.
Carlos Calla

12

İsteğe bağlı : Kipin pencere yüksekliğini aşmasını ve .modal gövdesinde bir kaydırma çubuğu kullanmasını istemiyorsanız, bu duyarlı çözümü kullanabilirsiniz. Burada çalışan bir demoya bakın: http://codepen.io/dimbslmh/full/mKfCc/

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() > 767 ? 60 : 20;
  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'));
  }
});

5

Bunun eski bir konu olduğunu biliyorum ama bu başka birine yardımcı olabilir.

Kalıcı diyalog elemanı konumunu sabitleyerek gövdeyi kaydırmayı başardım. Ve tarayıcı penceresinin tam yüksekliğini asla bilemeyeceğimden, emin olduğum bilgiyi, üstbilgi ve altbilginin yüksekliğini aldım. Daha sonra modal gövde elemanının üst ve alt kenar boşluklarını bu yüksekliklerle eşleştirdim. Bu daha sonra aradığım sonucu üretti. Çalışmamı göstermek için bir keman attım.

Ayrıca, tam ekran iletişim istiyorsanız genişlik yorumunu kaldırın: auto; .modal-dialog.full-screen bölümünde.

https://jsfiddle.net/lot224/znrktLej/

Ve burada bootstrap iletişim kutusunu değiştirmek için kullandığım css.

.modal-dialog.full-screen {
    position:fixed;
    //width:auto;  // uncomment to make the width based on the left/right attributes.
    margin:auto;                        
    left:0px;
    right:0px;
    top:0px;
    bottom:0px;
}

.modal-dialog.full-screen .modal-content {
      position:absolute;
      left:10px;
      right:10px;
      top:10px;
      bottom:10px;
}

.modal-dialog.full-screen .modal-content .modal-header {
        height:55px;  // adjust as needed.
}

.modal-dialog.full-screen .modal-content .modal-body {
        overflow-y: auto;
          position: absolute;
          top: 0;
          bottom: 0;
        left:0;
        right:0;
          margin-top: 55px; // .modal-header height
          margin-bottom: 80px;  // .modal-footer height
}

.modal-dialog.full-screen .modal-content .modal-footer {
        height:80px;  // adjust as needed.
        position:absolute;
        bottom:0;
        left:0;
        right:0;
}

5

Veya daha basit olarak önce etiketlerinizin arasına, sonra css sınıfına koyabilirsiniz.

<div style="height: 35px;overflow-y: auto;"> Some text o othre div scroll </div>

1
#scroll-wrap {
    max-height: 50vh;
    overflow-y: auto;
}

Kullanımı max-heightile vhilgili birim olarak modal-bodyveya bir sarıcı div iç modal-body. Bu, modal-bodybir kullanıcı pencereyi yeniden boyutlandırdığında bölme yüksekliğinin veya kaydırma div'inin (bu örnekte) otomatik olarak yeniden boyutlandırılmasını sağlar.

vh görünüm yüksekliği için görünüm boyutunun% 1'ini temsil eden uzunluk birimidir.

vhBirim için tarayıcı uyumluluk tablosu .

Örnek: https://jsfiddle.net/q3xwr53f/


1

Benim için işe yarayan, yüksekliği% 100'e ayarlamak, otomatik olarak taşması

   <div style="height: 100%;overflow-y: auto;"> Some text o othre div scroll </div>

0

Modal yüksekliği vücudun yüksekliği ile orantılı olarak ayarlamak için basit bir js çözümü:

$(document).ready(function () {
    $('head').append('<style type="text/css">.modal .modal-body {max-height: ' + ($('body').height() * .8) + 'px;overflow-y: auto;}.modal-open .modal{overflow-y: hidden !important;}</style>');
});

vücudun yüksekliği% 100 olmalıdır:

html, body {
    height: 100%;
    min-height: 100%;
}

Kalıcı vücut yüksekliğini vücudun% 80'ine ayarladım, bu elbette özelleştirilebilir.

Umarım yardımcı olur.


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.