Твиттер с начальной загрузкой

87

Я использую twitter bootstrap для проекта, над которым я работаю.

У меня есть модальное окно с несколько более длинной формой, и мне это не понравилось, когда окно стало слишком маленьким, модальное не прокручивало (если просто исчезло с моей страницы, которая не прокручивается).

Чтобы исправить это, я использовал следующий css

.modal {
    overflow-y:auto;
    max-height:90%;
    margin-top:-45%;
}

Это работает именно так, как я хочу, в Chrome (т.е. форма имеет полный размер, когда окно достаточно велико, но по мере того, как окно сжимается, модальные сжимаются и становятся прокручиваемыми). Проблема в том, что в IE модальная версия отключена. У кого-нибудь есть лучшее решение этой проблемы?

Мой пример можно найти на tinyhousemap.com(нажмите "Добавить запись на карту" в окне навигации для отображения модального текста)

Спасибо

  • 0
    Я нашел и использовал это решение. Это очень удобно, поскольку позволяет прокручивать только модал при загрузке, а не фоновое содержимое. github.com/aroc/Bootstrap-Scroll-Modal

10 ответов

141

Как насчет решения ниже? Это сработало для меня. Попробуйте следующее:

.modal .modal-body {
    max-height: 420px;
    overflow-y: auto;
}

Подробнее:

  • удалить overflow-y: auto; или overflow: auto; из класса .modal(важно)
  • удалить max-height: 400px; из .modal класса (важно)
  • Добавить max-height: 400px; в .modal.modal-body (или что бы то ни было, может быть 420px или меньше, но не больше 450px)
  • Добавить overflow-y: auto; в .modal .modal-body

Готово, прокручивается только тело.

  • 0
    Просто и элегантно, спасибо.
  • 5
    Я получил это далеко самостоятельно, но действительно хотел, чтобы он был настолько высоким, насколько позволяет окно, а не наименьшим общим знаменателем. Но указание max-height: 80%; не работает, расширяется вместо прокрутки. Нужно ли использовать события изменения размера для настройки $(".modal")[0].style.maxHeight ?
Показать ещё 1 комментарий
18

Я сделал небольшое решение, используя только jQuery.

Сначала вам нужно добавить дополнительный класс к <div class="modal-body">, который я назвал "ativa-scroll", поэтому он будет выглядеть примерно так:

<div class="modal-body ativa-scroll">

Итак, теперь просто поместите этот фрагмент кода на свою страницу, рядом с загрузкой JS:

<script type="text/javascript">
  $(document).ready(ajustamodal);
  $(window).resize(ajustamodal);
  function ajustamodal() {
    var altura = $(window).height() - 155; //value corresponding to the modal heading + footer
    $(".ativa-scroll").css({"height":altura,"overflow-y":"auto"});
  }
</script>

Я отлично работаю для меня, также отзывчивым способом!:)

  • 1
    Отличное решение, но я бы изменил высоту на максимальную высоту
  • 1
    Также вы можете использовать $ ('. Modal'). On ('show.bs.modal', function (e) {}); запустить функцию определения размера. Это будет рассчитывать высоту только по мере необходимости, а не на каждый размер и нагрузку. Вам просто нужно проверить в функции события, использует ли текущий модал собственную высоту прокрутки, прежде чем вычислять / применять CSS. то есть var scrollModal = $ ('. modal-body.modal-scroll', this); if (scrollModal.length) ...
Показать ещё 1 комментарий
14
/* Important part */
.modal-dialog{
    overflow-y: initial !important
}
.modal-body{
    max-height: calc(100vh - 200px);
    overflow-y: auto;
}

Это работает для Bootstrap 3 без JS-кода и реагирует.

Источник

  • 0
    это бутстрап 2 или 3? Скорее всего, вопрос был отправлен для начальной загрузки 2
  • 0
    @ Spy это для начальной загрузки 3
7

Попробуйте перезагрузить загрузочный файл:

 .modal {
position: fixed;

С

.modal {
position: absolute;

Это сработало для меня.

  • 1
    Это вызывает проблему выравнивания на IPad
3

Я также добавил

.modal { position: absolute; }

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

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

$('.modal').css('top', $(document).scrollTop() + 50);

Кажется, что вы довольны FireFox, Chrome, IE10 8 и 7 (браузеры, которые мне пришлось сдать)

1

Мне удалось преодолеть это, используя метрику "vh" с max-height на элементе .modal-body. 70vh посмотрел на меня правильно. Затем установите overflow-y в auto, чтобы он прокручивался только при необходимости.

.modal-body {
   overflow-y: auto;
   max-height: 70vh;
}
1

Проблема с решением @grenoult CSS (в основном это работает) заключается в том, что она полностью отзывчива и мобильна, когда клавиатура всплывает (т.е. когда они нажимают на вход в модальном диалоговом окне) размер экрана изменяется и модальный размер диалогового окна изменяется, и он может скрывать введенные им данные, поэтому они не могут видеть, что они набирают.

Лучшим решением для меня было использование jquery следующим образом:

$(".modal-body").css({ "max-height" : $(window).height() - 212, "overflow-y" : "auto" });

Он не реагирует на изменение размера окна, но этого не происходит в любом случае.

1

Ваш модал скрыт в firefox, и это связано с объявлением отрицательного поля, которое у вас есть в вашей общей таблице стилей:

.modal {
    margin-top: -45%; /* remove this */
    max-height: 90%;
    overflow-y: auto;
}

Удалите отрицательный запас, и все работает отлично.

  • 0
    Удаление поля сверху улучшило модальность, так что теперь оно не так далеко от экрана в IE, но теперь оно центрировано (вертикально) на экране с определенным размером окна. Все остальные размеры модальные переливаются за верхнюю или нижнюю часть экрана.
  • 1
    @ Dandotnet модал автоматически позиционирует себя на 50% от верхней части окна, вы можете перезаписать его на что-то меньшее, например, на 10%, но если вы добавите отрицательное значение, оно просто исчезнет с экрана, как в IE. Кстати, то же самое происходит в Firefox.
0

В случае использования .modal {overflow-y: auto;} будет создана дополнительная полоса прокрутки справа от страницы, когда тело уже переполнено.

Работа для этого заключается в том, чтобы временно удалить переполнение из тега body и установить autoal overflow-y в auto.

Пример:

$('.myModalSelector').on('show.bs.modal', function () {

        // Store initial body overflow value
        _initial_body_overflow = $('body').css('overflow');

        // Let modal be scrollable
        $(this).css('overflow-y', 'auto');
        $('body').css('overflow', 'hidden');


    }).on('hide.bs.modal', function () {

        // Reverse previous initialization
        $(this).css('overflow-y', 'hidden');
        $('body').css('overflow', _initial_body_overflow);
});
0

Ничто из этого не будет работать, как ожидалось. Правильный способ - изменить положение: зафиксировано в позиции: абсолютное для .modal class

  • 2
    на чем вы основываете свое заключение?
  • 0
    что сработало для меня, основываясь на попытках того, что уже упоминалось.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню