Якщо я правильно згадую, установка overflow: hidden на тілі не спрацювала у всіх браузерах, які я тестував для модальної бібліотеки, яку я створив для мобільного сайту. Зокрема, у мене були проблеми із запобіганням прокрутці тіла на додаток до модальної прокрутки, навіть коли я ставлю overflow: hidden на тілі.
Для мого поточного сайту я закінчив робити щось подібне. В основному він просто зберігає вашу поточну позицію прокрутки на додаток до того, щоб встановити для "переповнення" значення "приховано" на тілі сторінки, а потім відновлює позицію прокрутки після закриття модального режиму. Там є умова, коли відкривається інший модальний завантажувальний файл, коли той уже активний. В іншому випадку решта коду повинна бути зрозумілою для себе. Зверніть увагу, що якщо переповнення: приховане на тілі не заважає прокручувати вікно для певного браузера, це принаймні встановлює початкове місце прокрутки після виходу.
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;
});
}
Якщо вам це не подобається, іншим варіантом буде призначення max-height та overflow: auto для .modal-body приблизно так:
.modal-body {
max-height:300px;
overflow:auto;
}
У цьому випадку ви можете налаштувати максимальну висоту для різних розмірів екрана та залишити переповнення: авто для різних розмірів екрану. Вам доведеться переконатись, що модальний верхній, нижній та нижній колонтитули та тіло не складають більше, ніж розмір екрану, тому я б включив цю частину у ваші розрахунки.
body {overflow-y:scroll}
та замінити наhtml {overflow: scroll;}
. Це вирішило проблему для нас.