Bootstrap модальный, появляющийся под фоном

477

Я использовал код для моего модального прямо из примера Bootstrap и включил только bootstrap.js(а не bootstrap-modal.js). Тем не менее, мой модальный появляется под серым затуханием (фон) и не редактируется.

Вот как это выглядит:

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

См. эту скрипту для одного способа воспроизвести эту проблему. Основная структура этого кода такова:

<body>
    <p>Lorem ipsum dolor sit amet.</p>    

    <div class="my-module">
        This container contains the modal code.
        <div class="modal fade">
            <div class="modal-dialog">
                <div class="modal-content">
                    <div class="modal-body">Modal</div>
                </div>
            </div>
        </div>
    </div>
</body>
body {
    padding-top: 50px;
}

.my-module {
    position: fixed;
    top: 0;
    left: 0;
}

Любые идеи, почему это или что я могу сделать, чтобы исправить это?

  • 0
    В случае, если кто-то еще какое-то время ищет открытые теги и т. Д., Пытаясь выяснить, почему это происходит, для меня именно расширение Chrome Feedly нарушило мои модальные возможности. Отключение расширения вернуло поведение в нормальное состояние.
  • 0
    В некоторых случаях проблема возникла на iOS и была вызвана overflow-x: hidden примененным к контейнеру мода.
Показать ещё 4 комментария
Теги:
modal-dialog

46 ответов

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

Если модальный контейнер имеет фиксированное или относительное положение или находится внутри элемента с фиксированным или относительным положением, это будет происходить.

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

Вот несколько способов сделать это:

  • Самый простой способ - просто переместить модальный div, чтобы он находился вне любых элементов со специальным позиционированием. Одно хорошее место может быть непосредственно перед тегом закрывающего тега </body>.
  • В качестве альтернативы вы можете удалить свойства position: CSS от модальных и предков до тех пор, пока проблема не исчезнет. Это может изменить способ отображения страницы и функций.
  • 21
    Хороший улов. К вашему сведению, не только «исправлено», положение родителя «родственник» также вызывает эту проблему
  • 1
    Использование боковой панели с фиксированным положением. Вытащить его из этого div сделал свое дело. Благодарю.
Показать ещё 16 комментариев
338

Проблема связана с позиционированием родительских контейнеров. Вы можете легко "переместить" свой модальный из этих контейнеров, прежде чем отображать его. Здесь, как это сделать, если вы использовали show свой модальный код с помощью js:

$('#myModal').appendTo("body").modal('show');

Или, если вы запустили модальные кнопки, отпустите .modal('show'); и просто выполните:

$('#myModal').appendTo("body") 

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

  • 6
    Спасибо, у меня это работает :)
  • 3
    Лучшее решение ткс
Показать ещё 12 комментариев
154

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

Что работало:, установив z-index.modal-backdrop на -1.

.modal-backdrop {
  z-index: -1;
}
  • 8
    Это сработало отлично и на сегодняшний день является самым простым решением. Я использовал z-index: 0;
  • 0
    Также могу подтвердить, что работает только эта опция! Спасибо!
Показать ещё 14 комментариев
152

Также убедитесь, что версии BootStrap css и js совпадают. Различные версии также могут сделать модальный вид под фоном:

Например:

Плохой:

<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.0/js/bootstrap.min.js"></script>

Хорошо:

<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css" rel="stylesheet">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js"></script>
  • 14
    Хороший улов! Решил это для меня, даже не подумал бы об этом ...
  • 0
    да, я потратил несколько часов, пока понял это.
Показать ещё 15 комментариев
89

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

<div class="modal fade" id="createModal" data-backdrop="false">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <h4>Create Project</h4>
            </div>
            <div class="modal-body">Not yet made</div>
            <div class="modal-footer">
                <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
            </div>
        </div>
    </div>
</div>

Примечание. Атрибут data-backdrop должен иметь значение false (другие параметры: static или true).

  • 1
    Безусловно самое простое решение, и работает как шарм!
  • 0
    Brilliant! Мне также нужно было требовать начальной загрузки - не уверен, почему все остальные функции Bootstrap работают нормально, но мне нужно было, чтобы модальная работа работала.
Показать ещё 7 комментариев
57

Я получил его для работы, указав высокое значение z-индекса в модальное окно ПОСЛЕ, открыв его. Например:.

$("#myModal").modal("show");
$("#myModal").css("z-index", "1500");
  • 0
    Это работает (мужчина говорит, что это так), почему вы отказываетесь голосовать? Пока я смотрю, кажется, что так и будет.
  • 0
    Да, кто-нибудь может объяснить, почему это плохой ответ? Это просто что-то вроде хакерства?
Показать ещё 8 комментариев
28

Решение, предоставляемое @Muhd, - лучший способ сделать это. Но если вы застряли в ситуации, когда изменение структуры страницы не является опцией, используйте этот трюк:

<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" data-backdrop="false" style="background-color: rgba(0, 0, 0, 0.5);">
<div class="modal-dialog" role="document">
    <div class="modal-content">
        <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal"
                aria-label="Close">
                <span aria-hidden="true">&times;</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>

Трюк здесь data-backdrop="false" style="background-color: rgba(0, 0, 0, 0.5);", удалив фоновый рисунок по умолчанию и создав фиктивный цвет, установив цвет фона самого диалога с некоторой альфой.

Обновление 1: Как отметил @Gustyn, нажатие на фон не закрывает диалоговое окно, как ожидается. Поэтому для этого вам нужно добавить код java script. Вот пример того, как вы можете это достичь.

$('.modal').click(function(event){
    $(event.target).modal('hide');
});
  • 0
    Это отлично сработало для меня.
  • 0
    Да, лучшее решение, так как форматирование сохраняется.
Показать ещё 6 комментариев
14

A, но поздно, но вот общее решение -

    var checkeventcount = 1,prevTarget;
    $('.modal').on('show.bs.modal', function (e) {
        if(typeof prevTarget == 'undefined' || (checkeventcount==1 && e.target!=prevTarget))
        {  
          prevTarget = e.target;
          checkeventcount++;
          e.preventDefault();
          $(e.target).appendTo('body').modal('show');
        }
        else if(e.target==prevTarget && checkeventcount==2)
        {
          checkeventcount--;
        }
     });

Перейдите по этой ссылке - Bootstrap 3 - модальный, исчезающий под фоном при использовании фиксированной боковой панели для деталей.

  • 0
    Это было идеальное решение для плагина Wordpress, который я создавал, когда я не мог контролировать родительские элементы на темы других людей.
  • 0
    Лучшее решение на сегодняшний день!
Показать ещё 1 комментарий
10

Просто добавьте две строки CSS:

.modal-backdrop{z-index: 1050;}
.modal{z-index: 1060;}

Значение .modal-backdrop должно иметь значение 1050, чтобы установить его поверх навигационной панели.

  • 0
    Спасибо :) это работает для меня
  • 0
    Хорошо, но если контейнер модалов имеет position: fixed это не сработает.
10

Другой способ приблизиться к этому - удалить z-индекс из .modal-backdrop в bootstrap.css. Это приведет к тому, что фон будет на том же уровне, что и остальная часть вашего тела (он все равно исчезнет), а ваш модальный будет на вершине.

.modal-backdrop выглядит следующим образом

.modal-backdrop {
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  background-color: #000000;
}
8

Я просто установил:

#myModal {
    z-index: 1500;
}

и он работает...

По оригинальному вопросу:

.my-module {
    z-index: 1500;
}
  • 0
    Моей проблемой был также z-index.
  • 0
    Это работает для моей проблемы, которая затронула только IE7.
7

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

К сожалению, изменение или переопределение ядра Bootstrap CSS нежелательно и может привести к нежелательным побочным эффектам. Наименее интрузивный подход заключается в добавлении data-backdrop="false", но вы можете заметить, что эффект затухания больше не работает должным образом.

После последующих выпусков Bootstrap версия 3.3.5, похоже, разрешает эту проблему без нежелательных побочных эффектов.

Загрузить: https://github.com/twbs/bootstrap/releases/download/v3.3.5/bootstrap-3.3.5-dist.zip

Обязательно укажите файлы CSS и файлы JavaScript из раздела 3.3.5.

6

У меня была эта проблема, и самый простой способ ее исправить: addind z-index больше 1040 в модальном диалоге div:

<div class="modal-dialog" style="z-index: 1100;">

Я считаю, что bootstrap создает затухание div modal-backdrop, в котором у меня есть z-index 1040, поэтому, если вы положили модальный диалог поверх этого, он больше не должен быть серым.

6

Привет, у меня была такая же проблема, но я понимаю, что при использовании bootsrap 3.1 В отличие от старых версий bootsrap (2.3.2) изменена структура html модальности!

вы должны обернуть свой модальный заголовок и нижний колонтитул модальным диалогом и модальным содержанием

<div class="modal hide fade">

  <div class="modal-dialog">
    <div class="modal-content">

    **here goes the modal header body and footer**

    </div>
  </div>

 </div>
  • 0
    +1 убедитесь, что вы используете совместимые версии bootstrap.css и bootstrap.js и что ваша разметка соответствует используемой вами версии.
  • 0
    Да, это был мой вывод, и я написал это здесь, только если у кого-то была эта проблема.
Показать ещё 1 комментарий
5

У меня есть более легкое и лучшее решение.

Это можно легко решить с помощью некоторых дополнительных стилей CSS.

  • скрыть класс .modal-backdrop (автоматически сгенерированный из Bootstrap.js)

    .modal-backdrop
    {
    display:none;
    visibility:hidden; 
    position:relative
    }
    
  • установите фон .modal на полупрозрачный черный фоновый рисунок.

    .modal
    {
    background:url("http://bin.smwcentral.net/u/11361/BlackTransparentBackground.png")
    // translucent image from google images 
    z-index:1100; 
    }
    

Это будет лучше всего работать, если у вас есть требование, чтобы модальная была внутри элемента, а не рядом с тегом </body>.

  • 0
    Вы спасли мой день ... Это хорошая альтернатива!
  • 0
    @xunga, не беспокойся. Пожалуйста, поделитесь этим решением с другими людьми :)
Показать ещё 3 комментария
5

установите z-index.modal в самое высокое значение

Например, .sidebarwrapper имеет z-индекс 1100, поэтому установите z-index от .modal до 1101

.modal {
    z-index: 1101;
}
5

ни одно из предложенных решений выше не работало для меня, но этот метод решил проблему:

$('#myModal').on('shown.bs.modal', function() {
   //To relate the z-index make sure backdrop and modal are siblings
   $(this).before($('.modal-backdrop'));
   //Now set z-index of modal greater than backdrop
   $(this).css("z-index", parseInt($('.modal-backdrop').css('z-index')) + 1);
}); 
  • 0
    Я предпочитаю этот способ, потому что я потерял форматирование CSS с другими методами.
5

Используйте это в своем модальном режиме:

data-backdrop="false" 
4

В моем случае решите его, добавьте это в мою таблицу стилей:

.modal-backdrop{
  z-index:0;
}

с отладчиком google, можно проверить элемент BACKDROP И изменить атрибуты. Удача Goog.

3

Это будет охватывать все модальности, не испортив ни анимацию, ни ожидаемое поведение.

$(document).on('show.bs.modal', '.modal', function () {
  $(this).appendTo('body');
});
  • 1
    глобальное решение. Однако лучше найти проблему.
  • 0
    Я не думаю, что это отличное решение, а как насчет страниц с большим количеством модальных? Может стать грязным.
Показать ещё 2 комментария
3
$('.modal').insertAfter($('body'));
  • 0
    Очень простое решение, спасибо!
3

я нахожу, что:

в bootstrap 3.3.0 это не правильно, но когда в bootstrap 3.3.5 это right.let, см. код. 3.3.0:

this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
    .prependTo(this.$element)

3.3.5

  this.$backdrop = $(document.createElement('div'))
        .addClass('modal-backdrop ' + animate)
        .appendTo(this.$body)
3

Вы также можете удалить z-index из .modal-backdrop. Результат css будет выглядеть следующим образом.

.modal-backdrop {
}
  .modal-backdrop.in {
    opacity: .35;
    filter: alpha(opacity=35); }
3

Я удалил модальный фон.

.modal-backdrop {
    display:none;
}

Это не лучшее решение, но работает для меня.

3

Измените абсолютное положение на относительное.

.modal-backdrop {
    position: relative;
    /* ... */
}
  • 1
    удаляет черный фон
3

в вашем навигаторе navbar-fixed-top требуется z-index = 1041 а также, если u использует bootstarp-combined.min.css, также измените .navbar-fixed-top, .navbar-fixed-bottom z-index to 1041

2

Я был исправлен, добавив стиль ниже в тег DIV

style="background-color: rgba(0, 0, 0, 0.5);"

И добавьте пользовательский css

.modal-backdrop {position: relative;}
2

В моем случае причиной был boostrap.min.css:), как только я исключил его из моего html файла в качестве ссылки, диалог, показанный в forn модального оттенка:)

2

В моем случае у меня была обертка со следующим:

.wrapper { margin: 0 auto; position:relative; z-index:1;overflow:hidden;}

Только удалил z-index: 1 и понятия не имел, почему исправлена ​​проблема. также наверняка удалить относительное положение, но мне это нужно.

1

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

sass: 
  .modal-backdrop
    display: none
  #yourModal.modal.fade.in
    background: rgba(0, 0, 0, 0.5)
1

Добавьте это на свои страницы. Это работает для меня.

<script type="text/javascript">
    $('.modal').parent().on('show.bs.modal', function (e) { $(e.relatedTarget.attributes['data-target'].value).appendTo('body'); })
</script>
1

У меня была такая же проблема, а также проверить ответ Мухда.

Но мои модальные потребности остались, верхний атрибут, поэтому просто измените фиксированную позицию на абсолютную и она сработала.

.modal {
    position: absolute;
}
1

Как и Давиде Лориглиола, я исправил ее, запустив z-индекс:   .modal-backdrop {z-index: -999999; }

К сожалению, С. О. запрещает мне комментировать или голосовать за него, поэтому я вынужден сказать это здесь в еще одном решении.

1

Такое поведение иногда возникает, когда есть незакрытый тег, в особенности незакрытый </div>. Вы можете просмотреть, где находится ваш модальный модуль, и убедиться, что все метки закрыты правильно или лучше, но перемещайте div modal ближе к нижней части страницы, непосредственно перед тегом </body>

1

Попробуйте это https://github.com/nakupanda/bootstrap3-dialog/releases/tag/v1.34.0

Bootstrap Modal 3.3.0 создает модальный фон внутри основного элемента, а ранее он добавляется к элементу body.

Надеюсь, что это поможет.

1

попробуйте перезаписать значение класса .modal-open overflow из скрытого в видимое.

.modal-open {
    overflow: visible;
}
  • 1
    Хороший ответ должен быть объяснен. Сказать «попробуй это» не поможет ОП узнать, что происходит. Это также может работать по причинам, не связанным с первоначальной проблемой, кроме случаев, когда вы объясняете почему.
0

Для меня самым простым решением было поместить мой модал в обертку с абсолютной позицией и z-индексом выше, чем .modal-background. Так как модальный фон (по крайней мере, в моем случае) имеет z-индекс 1050:

.my-modal-wrapper {
  position: absolute;
  z-index: 1060;
}
<div class="my-modal-wrapper"></div>
  • 0
    У меня работал z-index. Большое спасибо.
0

Я просто удалил позицию: фиксированный стиль из файла _modal.scss, и, похоже, он мне подходит. У меня все еще есть фон, и он работает как ожидалось.

// Modal background
.modal-backdrop {
  /* commented out position: fixed - bug fix */
  //position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: $zindex-modal-backdrop;
  background-color: $modal-backdrop-bg;
  // Fade for backdrop
  &.fade {
    opacity: 0;
  }

Престижность Рику Штролу за руководство: https://weblog.west-wind.com/posts/2016/Sep/14/Bootstrap-Modal-Dialog-showing-under-Modal-Background

0

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

в моем случае я включил этот:

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.5/css/bootstrap.min.css"
      integrity="sha384-AysaV+vQoT3kOAXZkl02PThvDr8HYKPZhNT5h/CXfBThSRXQ6jW5DO2ekP5ViFdi" crossorigin="anonymous">

и еще один офлайн, который у меня уже есть на моем ноутбуке.

0
function addclassName(){
    setTimeout(function(){
        var c = document.querySelectorAll(".modal-backdrop");
        for (var i = 0; i < c.length; i++) {
            c[i].style.zIndex =  1040 + i * 20  ;
        }
        var d = document.querySelectorAll(".modal.fade");
        for(var i = 0; i<d.length; i++){
            d[i].style.zIndex = 1050 + i * 20;
        }
    }, 10);
}
0

У меня возникла такая проблема на Iphone и Ipad с использованием Sharepoint 2013 Модальные бутстрапы сохраняют проблемы z-index с фоном.

Я просто использую это на JS:

$('#myModal').on('shown.bs.modal', function() {
   //To relate the z-index make sure backdrop and modal are siblings
   $(this).before($('.modal-backdrop'));
   //Now set z-index of modal greater than backdrop
   $(this).css("z-index", parseInt($('.modal-backdrop').css('z-index')) + 1);
}); 
  • 1
    Какой будет вопрос?
0

ОСТОРОЖНО ПРИ ПРИЛОЖЕНИИ К ТЕЛО!

Это определенно получит этот модал из-за фона:

$('#myModal').appendTo("body").modal('show');

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

Например:

$(document).on('hidden.bs.modal', function () {
        $('.modal').remove();
    });

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

И как уже сказано другими; вы можете просто отключить обратную передачу от модального (data-backdrop = "false" ), или если вы не можете жить без потемнения экрана, вы можете отрегулировать класс .modal-backdrop css (либо увеличить z-индекс).

0

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

 $('.modal-backdrop').removeClass('modal-backdrop');
-1

Удалить фоновый фон заднего плана, который установлен на черный в вашем загрузочном CSS

См. мой:

.modal-backdrop {
    position: fixed; /*---- commented and it shows */
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    z-index: 1030;
    /*background-color: #000000; */
}

а затем добавьте этот цвет фона и непрозрачность o.5. см. мой:

.modal-backdrop {
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 1030; 
  background-color: rgba(0, 0, 0, 0.5);
  opacity: 0.5;

}

ПРИМЕЧАНИЕ. Хотя эти изменения были внесены в boostp css, я использовал angular -strap, и я не загружал или не использовал ng-animate css

  • 1
    Это не решение. ОП хочет знать, почему он не работает, а не как его взломать, изменив CSS.
  • 0
    Согласитесь, это способ получить желаемый результат, но включает в себя изменение загрузочного CSS, который не идеален.
-1

Я обнаружил, что добавив тег встроенного стиля для установки "display: none", эта проблема была предотвращена. Позиция кода не имела никакого эффекта.

  • 1
    Вы не сказали, к чему это было добавлено и почему это было бы работоспособным решением, а не случайным взломом, который срабатывает в вашем случае.
-3

Добавьте это в свою таблицу стилей:

.modal-backdrop {
    background-color: #000;
    bottom: 0;
    left: 0;
    position: fixed;
    right: 0;
    top: 0;
    z-index: 0 !important;
}
  • 0
    Нет объяснения относительно того, что это делает и почему это приемлемое решение. Другие ответы уже объясняют типы фактических причин этого и не требуют взломов.

Ещё вопросы

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