Если я правильно помню, настройка переполнения: скрытый на теле не работала во всех браузерах, которые я тестировал для модальной библиотеки, которую я создал для мобильного сайта. В частности, у меня были проблемы с предотвращением прокрутки тела в дополнение к модальной прокрутке, даже если я поместил переполнение: скрытое на теле.
Для моего текущего сайта я закончил делать что-то вроде этого. Он просто сохраняет текущую позицию прокрутки в дополнение к установке «переполнение» на «скрытый» в теле страницы, а затем восстанавливает позицию прокрутки после закрытия модального окна. Там есть условие, когда открывается другой мод загрузки, когда он уже активен. В противном случае остальная часть кода должна быть понятной. Обратите внимание, что если переполнение: скрытое на теле не предотвращает прокрутку окна для данного браузера, это по крайней мере устанавливает исходное положение прокрутки обратно при выходе.
function bindBootstrapModalEvents() {
var $body = $('body'),
curPos = 0,
isOpened = false,
isOpenedTwice = false;
$body.off('shown.bs.modal hidden.bs.modal', '.modal');
$body.on('shown.bs.modal', '.modal', function () {
if (isOpened) {
isOpenedTwice = true;
} else {
isOpened = true;
curPos = $(window).scrollTop();
$body.css('overflow', 'hidden');
}
});
$body.on('hidden.bs.modal', '.modal', function () {
if (!isOpenedTwice) {
$(window).scrollTop(curPos);
$body.css('overflow', 'visible');
isOpened = false;
}
isOpenedTwice = false;
});
}
Если вам это не нравится, другой вариант - назначить максимальную высоту и переполнение: auto для .modal-body следующим образом:
.modal-body {
max-height:300px;
overflow:auto;
}
В этом случае вы можете настроить максимальную высоту для разных размеров экрана и оставить переполнение: авто для разных размеров экрана. Однако вам нужно убедиться, что модальный колонтитул, нижний колонтитул и тело не составляют больше размера экрана, поэтому я бы включил эту часть в ваши расчеты.