Bootstrap modal
автоматически добавляет класс modal-open
к телу, когда отображается модальное диалоговое окно, и удаляет его, когда диалог скрыт. Поэтому вы можете добавить следующее в свой CSS:
body.modal-open {
overflow: hidden;
}
Вы можете утверждать, что приведенный выше код принадлежит базе кода Bootstrap CSS, но это легко исправить, добавив его на свой сайт.
Обновление 8 февраля 2013 г.
Теперь это перестало работать в Twitter Bootstrap v. 2.3.0 - они больше не добавляют modal-open
класс в тело.
Обходной путь должен был бы добавить класс к телу, когда модал должен быть показан, и удалить его, когда модал закрыт:
$("#myModal").on("show", function () {
$("body").addClass("modal-open");
}).on("hidden", function () {
$("body").removeClass("modal-open")
});
Обновление 11 марта 2013 г.
Похоже, modal-open
класс вернется в Bootstrap 3.0 явно для предотвращения прокрутки:
Повторно вводит .modal-open на теле (чтобы мы могли убрать свиток там)
Смотрите это: https://github.com/twitter/bootstrap/pull/6342 - посмотрите модальный раздел.
modal-open
вернется в Bootstrap 3, поэтому при запуске следует безопасно удалить приведенный выше код.Принятый ответ не работает на мобильных устройствах (iOS 7, по крайней мере, Safari 7), и я не хочу, чтобы на моем сайте запускался MOAR JavaScript, когда CSS подойдет.
Этот CSS предотвратит прокрутку фоновой страницы под модой:
Тем не менее, он также имеет небольшой побочный эффект по существу прокрутки к вершине.
position:absolute
решает эту проблему, но вновь вводит возможность прокрутки на мобильном телефоне.Если вы знаете свой видовой экран ( мой плагин для добавления видового экрана к
<body>
), вы можете просто добавить переключатель css дляposition
.Я также добавляю это, чтобы предотвратить переход основной страницы влево / вправо при показе / скрытии модалов.
этот ответ - кс-пост.
источник
position: fixed
тела.Просто скрыть переполнение тела, и это делает тело не прокручивать. Когда вы скрываете модал, верните его в автоматический режим.
Вот код:
источник
Вы можете попробовать установить размер тела на размер окна с переполнением: скрыто, когда модальное окно открыто.
источник
Вам нужно выйти за рамки ответа @ charlietfl и учетной записи для полос прокрутки, в противном случае вы можете увидеть перекомпоновку документа.
Открытие модального:
body
ширинуbody
переполнение наhidden
Явно установите ширину тела, равную ширине шага 1.
Закрытие модального:
body
переполнение наauto
Установите
body
ширинуauto
Вдохновлено: http://jdsharp.us/jQuery/minute/calculate-scrollbar-width.php
источник
$body.css("overflow", "auto");
на последнем этапе :)Предупреждение: Опция ниже не относится к Bootstrap v3.0.x, поскольку прокрутка в этих версиях была явно ограничена самим модалом. Если вы отключите события колеса, вы можете непреднамеренно запретить некоторым пользователям просматривать контент в модальных моделях, высота которых превышает высоту области просмотра.
Еще один вариант: колесные события
Прокрутки событие не отменяемое. Однако можно отменить события колесика мыши и колеса . Большая оговорка в том, что не все устаревшие браузеры поддерживают их, Mozilla только недавно добавила поддержку последних в Gecko 17.0. Я не знаю полного распространения, но IE6 + и Chrome поддерживают их.
Вот как их использовать:
JSFiddle
источник
overflow:hidden
пока лучше.источник
Не удалось заставить его работать в Chrome, просто изменив CSS, потому что я не хотел, чтобы страница прокручивалась до самого верха. Это работало нормально:
источник
Попробуй это:
это сработало для меня. (поддерживает IE8)
источник
position: fixed
.Надеюсь это поможет...
источник
Добавление класса 'is-modal-open' или изменение стиля тега body с помощью javascript - это нормально, и все будет работать так, как должно. Но проблема, с которой мы столкнемся, заключается в том, что тело становится переполненным: скрытое, оно будет прыгать наверх (scrollTop станет 0). Это станет проблемой юзабилити позже.
Как решение этой проблемы, вместо того, чтобы менять переполнение тега body: hidden, измените его на html tag
источник
Я не уверен насчет этого кода, но он того стоит.
В jQuery:
Как я уже говорил, я не уверен на 100%, но все равно попробую.
источник
По состоянию на ноябрь 2017 года Chrome представил новую собственность CSS
overscroll-behavior: contain;
которая решает эту проблему, хотя на момент написания этой статьи ограничена кросс-браузерная поддержка.
см. ссылки ниже для получения полной информации и поддержки браузера
источник
Лучшее решение - это решение css-only,
body{overflow:hidden}
используемое большинством из этих ответов. Некоторые ответы содержат исправление, которое также предотвращает «скачок», вызванный исчезающей полосой прокрутки; однако, ни один не был слишком изящен. Итак, я написал эти две функции, и они, кажется, работают довольно хорошо.Проверьте этот jsFiddle, чтобы увидеть его в использовании.
источник
open modal
ширине кнопок. Chrome 8Многие предлагают «переполнение: скрытый» на теле, которое не будет работать (по крайней мере, в моем случае), так как это заставит сайт прокручиваться вверх.
Это решение, которое работает для меня (как на мобильных телефонах, так и на компьютерах), используя jQuery:
Это заставит работать модальную прокрутку и предотвратит одновременную прокрутку сайта.
источник
Вы можете использовать следующую логику, я протестировал ее, и она работает (даже в IE)
источник
Я не уверен на 100%, что это будет работать с Bootstrap, но стоит попробовать - он работал с Remodal.js, который можно найти на github: http://vodkabears.github.io/remodal/, и это будет иметь смысл для методов быть очень похожим.
Чтобы остановить переход страницы наверх, а также предотвратить смещение содержимого по правому краю, добавьте класс,
body
когда запускается модал, и установите следующие правила CSS:Это
position:static
и то,height:auto
что объединяет, чтобы остановить скачок контента вправо.overflow-y:hidden;
Останавливает страницу от того , прокручивать за модальным.источник
На основании этой скрипки: http://jsfiddle.net/dh834zgw/1/
следующий фрагмент (с использованием jquery) отключит прокрутку окна:
И в вашем css:
Теперь, когда вы удаляете модал, не забудьте удалить класс noscroll в теге html:
источник
overflow
быть установленоhidden
? +1 хотя как это у меня сработало (используюhidden
).У меня была боковая панель, которая была сгенерирована путем взлома флажков. Но основная идея - сохранить документ scrollTop и не изменять его при прокрутке окна.
Мне просто не понравилось, что страница прыгает, когда тело становится «переполненным: скрытым».
источник
К сожалению, ни один из ответов выше не устранил мои проблемы.
В моей ситуации веб-страница изначально имеет полосу прокрутки. Всякий раз, когда я нажимаю на модал, полоса прокрутки не исчезает, а заголовок немного смещается вправо.
Затем я попытался добавить
.modal-open{overflow:auto;}
(что большинство людей рекомендовало). Это действительно исправило проблемы: полоса прокрутки появляется после того, как я открываю модальное окно. Тем не менее, появляется еще один побочный эффект, который заключается в том, что «фон под заголовком немного сместится влево вместе с еще одним длинным баром позади модального»К счастью, после того, как я добавил
{padding-right: 0 !important;}
, все исправлено отлично. И заголовок, и фон тела не двигались, а модал все еще сохраняет полосу прокрутки.Надеюсь, что это может помочь тем, кто все еще застрял в этой проблеме. Удачи!
источник
Большинство частей здесь, но я не вижу ответа, который бы все это соединил.
Проблема тройная.
(1) предотвратить прокрутку базовой страницы
(2) и удалите полосу прокрутки
(3) очистить, когда модал уволен
Если модальный режим не полноэкранный, примените привязки .modal к полноэкранному наложению.
источник
Мое решение для Bootstrap 3:
потому что для меня единственный
overflow: hidden
вbody.modal-open
классе не помешал смещению страницы влево из-за оригиналаmargin-right: 15px
.источник
Я просто сделал это так ...
Но когда исчез скроллер, он переместил все правильно на 20 пикселей, поэтому я добавил
сразу после этого.
Работает для меня.
источник
Если модальное значение - 100% высота / ширина, «мышиный указатель / уход» будет работать, чтобы легко включить / отключить прокрутку. Это действительно сработало для меня:
источник
работал на меня
источник
Почему бы не сделать это, как Булма? Когда модальный активен, тогда добавьте в html их класс .is-clipped, который переполнен: hidden! Важный; И это все.
Редактировать: Окей, Булма имеет эту ошибку, поэтому вы должны добавить также другие вещи, как
источник
Поскольку для меня эта проблема представлена в основном на iOS, я предоставляю код, который можно исправить только на iOS:
источник
Ни один из приведенных выше ответов не работал идеально для меня. Поэтому я нашел другой способ, который хорошо работает.
Просто добавьте
scroll.(namespace)
слушателя и установитеscrollTop
самыйdocument
последний из его значений ...а также удалите слушателя в вашем близком сценарии.
Обновить
Кажется, это плохо работает на Chrome. Любое предложение, чтобы исправить это?
источник
Это сработало для меня:
источник
Для тех, кто интересуется, как получить событие прокрутки для модала начальной загрузки 3:
источник