Ответ 1
просто используйте
.modal-body {
max-height: calc(100vh - 210px);
overflow-y: auto;
}
он устроит ваш модальный, а затем даст ему вертикальный свиток
У меня есть модальный диалог в моем приложении, который может быть довольно длинным в направлении y. Это создает проблему, при которой часть содержимого диалога скрывается в нижней части страницы.
Я хотел бы, чтобы полоса прокрутки окна прокручивала диалог, когда он отображается, и слишком длинный, чтобы поместиться на экране, но оставив основной корпус на месте позади модального. Если вы используете Trello, то вы знаете, для чего я собираюсь.
Это возможно без использования JavaScript для управления полосой прокрутки?
Вот CSS, который я применил к моему модальному и диалоговому окнам:
body.blocked {
overflow: hidden;
}
.modal-screen {
background: #717174;
position: fixed;
overflow: hidden;
width: 100%;
height: 100%;
top: 0;
left: 0;
opacity: 0.9;
z-index: 50;
}
.dialog {
background: #fff;
position: fixed;
padding: 12px;
top: 20%;
left: 50%;
z-index: 10000;
border-radius: 5px;
box-shadow: 0, 0, 8px, #111;
}
просто используйте
.modal-body {
max-height: calc(100vh - 210px);
overflow-y: auto;
}
он устроит ваш модальный, а затем даст ему вертикальный свиток
Это то, что исправило это для меня:
max-height: 100%;
overflow-y: auto;
EDIT: теперь я использую тот же метод, который в настоящее время используется в Twitter, где модальные действия похожи на отдельную страницу поверх текущего содержимого, а контент, стоящий за модальным, не перемещается по мере прокрутки.
В сущности это:
var scrollBarWidth = window.innerWidth - document.body.offsetWidth;
$('body').css({
marginRight: scrollBarWidth,
overflow: 'hidden'
});
$modal.show();
С этим CSS на модальном:
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
overflow: auto;
JSFiddle: https://jsfiddle.net/0x0049/koodkcng/
Pure JS-версия (IE9 +): https://jsfiddle.net/0x0049/koodkcng/1/
Это работает независимо от высоты или ширины страницы или модального диалога, позволяет прокручивать независимо от того, где находится ваша мышь/палец, не имеет прыгающего прыжка. В некоторых решениях есть возможность отключить прокрутку основного содержимого и отлично выглядит тоже.
Измените position
position:fixed;
overflow: hidden;
к
position:absolute;
overflow:scroll;
Вот моя демонстрация модального окна, которое автоматически изменяет размер его содержимого и запускает прокрутку, когда оно не подходит к окну.
Модальное демонстрационное окно (см. комментарии в исходном коде HTML)
Все сделано только с HTML и CSS - не требуется JS для отображения и изменения размера модального окна (но вам все равно нужно отображать окно курса) в новом вам вообще не нужен JS).
Обновление (более демо):
Цель состоит в том, чтобы иметь внешние и внутренние DIV, где внешний определяет фиксированное положение, а внутреннее создает прокрутку. (В демо на самом деле больше DIV, чтобы они выглядели как реальное модальное окно.)
#modal {
position: fixed;
transform: translate(0,0);
width: auto; left: 0; right: 0;
height: auto; top: 0; bottom: 0;
z-index: 990; /* display above everything else */
padding: 20px; /* create padding for inner window - page under modal window will be still visible */
}
#modal .outer {
box-sizing: border-box; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; -o-box-sizing: border-box;
width: 100%;
height: 100%;
position: relative;
z-index: 999;
}
#modal .inner {
box-sizing: border-box; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; -o-box-sizing: border-box;
width: 100%;
height: auto; /* allow to fit content (if smaller)... */
max-height: 100%; /* ... but make sure it does not overflow browser window */
/* allow vertical scrolling if required */
overflow-x: hidden;
overflow-y: auto;
/* definition of modal window layout */
background: #ffffff;
border: 2px solid #222222;
border-radius: 16px; /* some nice (modern) round corners */
padding: 16px; /* make sure inner elements does not overflow round corners */
}
position:fixed
означает, что модальное окно останется неподвижным относительно точки обзора. Я согласен с вашей оценкой в том, что это соответствует этому сценарию, имея в виду, почему вы не добавляете полосу прокрутки к самому модальному окну?
Если да, то правильные свойства max-height
и overflow
должны делать трюк.
фиксированное позиционирование должно было устранить эту проблему, но еще одним хорошим способом избежать этой проблемы является размещение ваших модальных div или элементов в нижней части страницы, не в вашем макете сайтов. Большинство модальных плагинов обеспечивают абсолютное их модульное позиционирование, чтобы пользователь мог прокручивать главную страницу.
<html>
<body>
<!-- Put all your page layouts and elements
<!-- Let the last element be the modal elemment -->
<div id="myModals">
...
</div>
</body>
</html>
Окно страницы прокрутки экрана можно щелкнуть, когда модальная функция открыта
Этот работает для меня. Чистый CSS.
<style type="text/css">
body.modal-open {
padding-right: 17px !important;
}
.modal-backdrop.in {
margin-right: 16px;
</style>
Попробуйте и дайте мне знать
Здесь.. Отлично работает для меня
.modal-body {
max-height:500px;
overflow-y:auto;
}
В конце концов мне пришлось внести изменения в содержимое страницы за модальным экраном, чтобы гарантировать, что он никогда не будет достаточно длинным для прокрутки страницы.
Как только я это сделал, проблемы, с которыми я столкнулся при применении position: absolute
к диалогу, были устранены, поскольку пользователь больше не мог прокручивать страницу вниз.