Bootstrap модальный: фон переходит на верх при переключении

90

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

Я сделал все, что мог, чтобы найти решение/и т.д., но я действительно потерял.

EDIT:

Я также пробовал: $('#myModal').modal('show');, но он имеет тот же самый эффект.

  • 0
    Привет Бенни. Да, я вызывающе Я также пробовал с: $ ('# myModal'). Modal ('show'); но это имеет точно такой же эффект.
  • 1
    может ли это помочь вам, та же проблема: stackoverflow.com/questions/12894570/…
Показать ещё 3 комментария
Теги:
twitter-bootstrap-3

27 ответов

144
Лучший ответ

Когда модальный открывает класс modal-open, устанавливается тег <body>. Этот класс устанавливает overflow: hidden; в тело. Добавьте это правило в таблицу стилей, чтобы переопределить стиль bootstrap.css:

body.modal-open {
    overflow: visible;
}

Теперь свиток должен оставаться на месте.

  • 0
    @pstenstrm, у меня есть сомнения. Вы сказали переопределить CSS для класса .modal-open. Но что, если есть дополнительные закрывающие div, и в моем ответе я не переопределил ни одного класса в своем разрешении? Работает нормально после удаления 2 лишних делений. bs модальное добавление .modal-background div, которое запутается там, где его нужно закрыть из-за дополнительных закрывающих тегов.
  • 4
    У меня не работает, у меня есть модал внутри iframe и он прокручивается вверх ... есть идеи?
Показать ещё 10 комментариев
22

Если вы вызываете modal с тегом. Попробуйте удалить '#' из атрибута href. И вызвать модальный атрибут данных.

<button class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModal">
  Launch demo modal
</button>
  • 0
    Я открываю его точно так же, как вы опубликовали там. Проверьте ссылку
  • 5
    если вы используете не «<button>», а <a>, как в моем случае, вы теряете значок «кнопка пальца», когда перемещаете курсор мыши на объект. Чтобы преодолеть это, я сделал так: ... href = "# mai_modal_id" data-toggle = "modal" ... и я не использовал data-target
Показать ещё 2 комментария
9
$('the thing you click on').click(function ($e) {
            $e.preventDefault();
});

Это поможет вам остановить полосу прокрутки вверху. Она работала для меня

5

если вы используете тег привязки, поскольку <a href"#"..>... </a> и href="#" создает проблему, удалите ее. Вы можете прочитать больше здесь

4

Возможно, работает с модалами, вложенными где-то в код:

body.modal-open {
    overflow: visible;
    position: absolute;
    width: 100%;
    height:100%;
}

Для меня это была комбинация положения, высоты и переполнения.

3

Я не вижу конкретной ошибки, но я бы посоветовал вам проверить ваш синтаксис html.

Крошечный тест с вашим источником дает мне такие ошибки, как

Строка 127, Столбец 34: Разблокированный элемент div.

              <div class="inner onlySides">

Это может быть проблемой.

  • 0
    Спасибо - я посмотрю на это - даже если мне трудно поверить, что это может вызвать проблему, с которой я сталкиваюсь. Похоже, вы используете плагин для отслеживания этого - если так; который?
  • 0
    я не использую плагин кроме firebug. Всегда полезно проверить правильность вашей страницы на validator.w3.org . Это было бы проблемой, потому что если у вас есть открытый div, у вас будет странное поведение :)
2
body.modal-open {
overflow: visible !important;
}

Мне нужен важный атрибут для его исправления.

  • 0
    Это сработало для меня, и у меня возникла проблема @ MandM (в комментариях) из ответа pstenstrm: «Не работает для меня. У меня есть ванильный модал, который я открываю с помощью .modal ('show'), и он все еще прокручивается в начало страницы. Bootstrap v3.2.0 ". Единственный странный эффект, который он имеет, заключается в том, что теперь фон прокручивается, если вы продолжаете прокручивать модальное окно, которое выше окна, но для меня это незначительная проблема. Благодарю.
2

В bootstrap 3.1.1 я решил с помощью этого решения:

body.modal-open {
    position: absolute !important;
}
  • 2
    Вы спасли мой день @Filo Большое спасибо
  • 0
    Не работает для меня
2

Я попытался установить .modal top в центре экрана.

.modal {
    position: absolute;
    top: 50%;
}

Просто мои мысли.

  • 0
    Достаточно близко. Я не буду понижать голос, потому что моя проблема может быть где-то еще, но это привело к затемнению нижней половины экрана, но модал был расположен к центру.
2

Я попытался воспроизвести эту проблему на моем локальном хосте и, как ни странно, как бы это ни казалось, существует конфликт с файлом Bootstrap JS, который вы используете.

Попробуйте комментировать код:

<script src="/min/?f=bootstrap.min.js,modernizr.js,bootstrap-datetimepicker.js,nprogress.js,feedback.js,select2.min.js,jquery.unveil.js,equalheights.jquery.js,hogan-v2.0.0.min.edu-custom.js,jquery.visible.min.js,handlebars-v1.2.0.js,typeahead.bundle.min.js,jquery.gridster.js,cookie.jquery.js,jquery.autosize.min.js,application.js&ver=1392814384"></script>    

И вместо этого используйте Bootstrap 2.3.2:

<script src="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script>

Это заставило его работать на меня.

Я попробовал его с Bootstrap версии 3, но это не сработало. Я все еще не в состоянии определить проблему, но где-то рядом с Firebug мне пришла ошибка e.preventDefault() is not a function - я предполагаю, что это должно быть основной причиной, но мне еще предстоит сравнить ее с другими JS файлами.

1

Попробуйте использовать это, чтобы открыть modal и посмотреть, что произойдет:

<a href="#generalModal" class="btn btn-primary btn-lg" data-toggle="modal">
  Launch demo modal 
</a>
1

у вас есть 2 дополнительных закрывающих тега div непосредственно перед <div id="footer"> или после <div id="mainFrame" class="group"> div. Я использую visual studio 2012 express, чтобы проверить это.

Удалите эти два дополнительных div и сообщите нам, как это работает. Я удалил дополнительные div и удалил все пользовательские скрипты. на нижнем колонтитуле сохраняется только ядро ​​jquery и бутстрап. вот скриншот окончательного вывода. здесь - игровая площадка jsbin для вас, которая отлично работает.

Я предлагаю вам использовать headjs, чтобы загрузить все скрипты и файлы css. Кроме того, это не является хорошей практикой при загрузке любых скриптов в два раза.

Изображение 2403

  • 4
    Для ответов с отрицательным ответом нужны правильные комментарии с указанием причин.
0

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

Я обнаружил, что страница прокручивается до вершины только один раз, и после этого следующие открытые модалы работают как положено. Тогда я обнаружил, что скрытие любого элемента в DOM инициирует ту же странную прокрутку. Так что я просто создал фиктивный div после загрузки страницы, а затем скрыл и удалил его, и это решило проблему.

var $temp = $("<div>");
$(".container").append($temp);
$temp.hide().remove();
0

Для Bootstrap v4 решение было,

body.modal-open {
  overflow: hidden;
  padding-right: 0 !important;
  height: auto;
}
0

высота: 100% это решить проблему, но вы должны добавить правильный "div"

0

Я перепробовал все приведенные выше примеры - это единственное, что сработало для меня:

.modal-open {

            padding-right: 0 !important;

        }

Снятие обивки с правой стороны модели - предотвращает прыжок.

0

Я потратил часы на это, пробуя все здесь и в других местах. Оказалось, что для использования angularjs-материала мне пришлось отключить анимацию в объекте конфигурации uibModal.open arg.

Например:

  $uibModal.open(
    {
      animation: false,
      component: 'myDialogComponent',
      size: 'lg',
      resolve: {
        details: function() {
          return detailsCollection;
        }
      }
    }
  );

Надеюсь, это поможет кому-то еще.

0

body.modal-open { position: inherit; }

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

0

Для меня работает, когда я изменил версию от 3.1.1 до 3.3.7

Если вам не нужно использовать версию 3.3.1, попробуйте заменить.

После изменения хорошо проверить, что остальная часть функции работает правильно.

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> 

<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
0

После чтения десятков ответов в течение нескольких часов я снова скопировал исходный код из файла начальной загрузки и отлаживал шаг за шагом, чтобы узнать, что вызвало то, что я всегда прыгаю вверх. Поскольку фактическая последняя версия Bootstrap 3 показывает модальность в позиции, на которой вы сейчас находитесь. Я обнаружил, что -webkit-transform: translate3d(0,0,0); и height: 100% в моем теге body body теги вызвали это поведение. Возможно, это помогает кому-то.

0

Это сделало это для меня

body.modal-open {
    overflow: inherit;
    padding-right: 0 !important;
}
  • 0
    У меня была похожая проблема с навигацией по панели навигации и контейнером, когда модал был открыт. Это то, что я искал.
  • 0
    Рад, что это помогло!
0
Наконец, выдумал это. НЕ завершайте кнопку, нацеленную на модальный в теге привязки.

Bad

<a href"#">
    <button type="button" class="btn"
data-toggle="modal" data-target="#myModal">See Detail</button>
</a>

Хорошо

<button type="button" class="btn"
    data-toggle="modal" data-target="#myModal">See Detail</button>
0

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

Пример:

<body>
    <!-- All your other HTML code -->
    <div>
        <!-- Button trigger modal -->
        <button class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModal">
            Launch demo modal
        </button>
    </div>

    <!-- Modal -->
    <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
      <div class="modal-dialog">
        <div class="modal-content">
          <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
            <h4 class="modal-title" id="myModalLabel">Modal title</h4>
          </div>
          <div class="modal-body">
            ...
          </div>
          <div class="modal-footer">
            <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
            <button type="button" class="btn btn-primary">Save changes</button>
          </div>
        </div>
      </div>
    </div>
</body>
  • 1
    У меня не сработало
0

У меня была такая же проблема с использованием Bootstrap 2.3.2

Это была проблема при нажатии на ссылку:

Уловкой было: return false;

<a href="#" class="btn" onclick="openPositionPopup(${positionReport[0]}); return false;">
     <i class="icon-map-marker"></i>
</a>

и js:

function openModal() {
    $('#myModal').modal('show');
}
-1

это хорошая идея, чтобы исправить это, это похоже на Джок!

достаточно, добавил один из двух CSS-кодов в вашем стиле

.body.modal-open { overflow:visible;padding-right:0px !important;}
.body.modal-open { height:auto;padding-right:0px !important;}

https://github.com/jschr/bootstrap-modal/issues/131#issuecomment-153405449

-1

Если ответ pstenstrm не работает для вас, попробуйте комбинировать его с этой кнопкой замены HTML:

<a class="btn btn-primary btn-lg" data-toggle="modal" data-target="#generalModal" id="launchbutton" href="#launchbutton"> Launch demo modal </a>

Это должно содержать кнопку на экране.

-2

Попробуйте это отлично работает

/* fix body.modal-open overflow:hidden */
body.modal-open {
    height: auto;
}

Ещё вопросы

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