bootstrap modal удаляет полосу прокрутки

когда я запускаю модальное представление на своей странице, он запускает полосу прокрутки, чтобы исчезнуть. Это раздражающий эффект, потому что фоновая страница начинает двигаться, когда модальный перемещается / исчезает. Есть ли лекарство от этого эффект?

9 ответов


это особенность, класс modal-open добавляется в HTML body когда вы показываете модальный, и удаляется, когда вы его скрываете.

это заставляет полосу прокрутки исчезнуть, так как css bootstrap говорит

.modal-open {
    overflow: hidden;
}

вы можете переопределить это, указав

.modal-open {
    overflow: scroll;
}

на свой css.


Я

.modal-open {
  overflow-y: scroll;
}

в этом случае вы избегаете отображать горизонтальную полосу прокрутки


думаю, что наследование лучше, чем свиток потому что, когда вы открываете модальный, он всегда будет открываться со прокруткой, но когда у вас нет свитков, вы получите ту же проблему. Поэтому я просто делаю так:

.modal-open {
  overflow: inherit;
}

слава богу, я пришел на этот пост! Я вытаскивал волосы, пытаясь понять, как вернуть полосы прокрутки, закрывая окно с помощью моей собственной тесной ссылки. Я пробовал предложения для CSS, но он просто не работал должным образом. После прочтения

class modal-open добавляется в тело HTML, когда вы показываете модальный, и снимается, когда его прячешь. -- @flup

Я придумал решение с помощью jquery, поэтому, если у кого-то еще есть такая же проблема и вышеуказанные предложения не работают --

<script>
            jQuery(document).ready(function () {
jQuery('.closeit').click(function () {
 jQuery('body').removeClass('modal-open');
                });
            });
        </script>

лучше использовать overflow-y: прокрутка и удаление отступов из тела, модальное дополнение bootstrap к телу страницы.

.modal-open {
  overflow:hidden;
  overflow-y:scroll;
  padding-right:0 !important;
}

IE браузер совместим, IE браузер делает то же самое по умолчанию.


Я просто играл с этой "особенностью" Модалов Bootstrap. Кажется .modal класс overflow-y:auto; таким образом, модальная обертка получает свою собственную полосу прокрутки, когда сама модальная становится высокой.

если вы всегда хотите полосу прокрутки (дизайнеры часто делают) Сначала установите тело

body {
    overflow-y:scroll;
}

затем ручка .modal-open

.modal-open .modal {
    overflow-y:scroll; /* Force a navbar on .modal */
}

.modal-open .topnavbar-wrapper {
    padding-right:17px; /* Noticed that right aligned navbar content got overlapped by the .modal scrollbar */
}

оставьте полосу прокрутки отключенной на теле нетронутой в этом случае

все остальные ответы на этой странице продолжал делать мой скачок контента.

головы!

хотя это решение работало для меня все время, вчера у меня была проблема с использованием этого исправления, когда модальный перетаскивается и большой, чтобы соответствовать экрану (вертикально). Возможно, это как-то связано с position:sticky элементы, которые я добавил?


лучше, если вы создадите свой собственный CSS файл для настройки определенной части bootsrap.

не изменяйте файл css bootstrap, потому что он изменит все в вашем bootstrap, как только вы используете его в других частях своей страницы.

Если ваша страница несколько длинная, она автоматически предоставит полосу прокрутки. И когда модальный открыт, он скроет полосу прокрутки, потому что это то, что bootstrap делает по умолчанию.

чтобы избежать его скрытия при модальном открывается, просто переопределите его, поместив код css (ниже) в свой собственный файл css.

.modal-open {
    overflow: scroll;
}

только наоборот...

.modal-open {
    overflow: hidden;
}

bootstrap modal добавляет дополнение после его открытия, чтобы вы могли попробовать этот код в своем css

.modal-open {
    padding: 0 !important;
}

кроме того, если модальное всплывающее окно должно прокручиваться с содержимым внутри, а родитель должен оставаться неподвижным, добавьте следующее К своему обычаю.css (переопределение css)

.modal-body {
    max-height: calc(100vh - 210px);
    overflow-y: auto;
}
.modal-open {
    overflow: hidden;
    overflow-y: scroll;
    padding-right: 0 !important;
}