Как поставить полосу прокрутки только для модального тела?
У меня есть следующий элемент:
<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>
Он показывает модальное диалоговое окно примерно так, в основном он помещает полосу прокрутки вокруг всего modal-dialog
а не modal-body
которое содержит контент, который я пытаюсь отобразить.
Изображение выглядит примерно так:
![enter image description here]()
Как получить полосу прокрутки только вокруг modal-body
?
Я попытался присвоить style="overflow-y: scroll; max-height:85%; margin-top: 50px; margin-bottom:50px;"
для modal-body
но это не сработало.
Ответы
Ответ 1
Вы должны установить height
для .modal-body
и дать ему overflow-y: auto
. Также значение reset .modal-dialog
переполнения до initial
.
См. рабочий пример:
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;
}
Ответ 2
Если вы поддерживаете только IE 9 или выше, вы можете использовать этот CSS, который будет плавно масштабироваться до размера окна. Возможно, вам потребуется настроить "200px", хотя, в зависимости от высоты вашего верхнего или нижнего колонтитула.
.modal-body{
max-height: calc(100vh - 200px);
overflow-y: auto;
}
Ответ 3
Проблема решена с помощью комбайнового решения @carlos calla и @jonathan marston.
/* Important part */
.modal-dialog{
overflow-y: initial !important
}
.modal-body{
max-height: calc(100vh - 200px);
overflow-y: auto;
}
Ответ 4
Добавление к Carlos Calla отличный ответ.
Необходимо установить высоту .modal-body, но вы можете использовать медиа-запросы, чтобы убедиться, что это соответствует размеру экрана.
.modal-body{
height: 250px;
overflow-y: auto;
}
@media (min-height: 500px) {
.modal-body { height: 400px; }
}
@media (min-height: 800px) {
.modal-body { height: 600px; }
}
Ответ 5
Необязательно: Если вы не хотите, чтобы модальное окно превышало высоту окна, и использовали полосу прокрутки в .modal-body, вы можете использовать это адаптивное решение. Смотрите рабочую демонстрацию здесь: 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'));
}
});
Ответ 6
Я знаю, что это старая тема, но это может помочь кому-то другому.
Мне удалось сделать прокрутку тела, зафиксировав положение элемента модального диалога. И так как я никогда не узнаю точную высоту окна браузера, я взял информацию, о которой я был уверен, высоту заголовка и нижнего колонтитула. Тогда я смог сделать, чтобы верхние и нижние поля элемента модального тела соответствовали этим высотам. Затем это привело к тому, что я искал. Я бросил вместе скрипку, чтобы показать свою работу.
также, если вы хотите, чтобы в полноэкранном диалоге просто не комментировали ширину: auto; внутри секции .modal-dialog.full-screen.
https://jsfiddle.net/lot224/znrktLej/
И вот 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;
}
Ответ 7
Или проще вы можете сначала установить между вашими тегами, а затем в класс css.
<div style="height: 35px;overflow-y: auto;"> Some text o othre div scroll </div>
Ответ 8
Для версий Bootstrap> = 4.3
Bootstrap 4.3 добавил новую встроенную функцию прокрутки к модалам. Это делает только прокрутку содержимого модального тела, если размер содержимого иначе заставил бы прокрутить страницу. Чтобы использовать его, просто добавьте класс modal-dialog-scrollable к тому же div, который имеет класс modal-dialog.
Вот пример:
<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">×</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>
Ответ 9
#scroll-wrap {
max-height: 50vh;
overflow-y: auto;
}
Используя max-height
с vh
в качестве единицы на modal-body
или обертки div внутри modal-body
. Это позволит автоматически изменить размер modal-body
или оберточного div (в этом примере), когда пользователь изменит размер окна.
vh
- единица длины, представляющая 1% размера области просмотра для высоты окна просмотра.
Таблица совместимости браузера для vh
.
Пример: https://jsfiddle.net/q3xwr53f/
Ответ 10
Простое js-решение для установки модальной высоты, пропорциональной высоте тела:
$(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>');
});
высота тела должна быть 100%:
html, body {
height: 100%;
min-height: 100%;
}
Я установил модальный рост тела до 80% тела, это, конечно, можно настроить.
Надеюсь, что это поможет.
Ответ 11
Что сработало для меня, так это установив высоту на 100% при наличии переполнения на авто надеюсь, это поможет
<div style="height: 100%;overflow-y: auto;"> Some text o othre div scroll </div>