Bootstrap modal получает затемнение из-за расположения navbar

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

Проблема, по-видимому, связана с позиционированием моего навигатора - удаление position: absolute; или position: relative; исправляет его. К сожалению, поскольку мне нужно использовать z-index на навигационной панели, я не могу избавиться от позиционирования.

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

Ответ 1

Это потому, что ваш модал находится внутри вашего #nav_inner <div>, поэтому он наследует некоторый стиль, который вы не хотите.

Он не должен быть там.

Попробуйте переместить его в тело, как показано ниже:

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html"; charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="//netdna.bootstrapcdn.com/twitter-bootstrap/2.2.2/css/bootstrap-combined.min.css" rel="stylesheet">
</head>
<body>
    <div class="gutter" id="left_gutter"></div>
    <div class="gutter" id="right_gutter"></div>
    <div id="container">
        <div class="navbar">
            <div id="nav_inner">
                <div class="page" id="nav_page">
                    <div class="content_wrapper">
                        <div class="content">
                    <a href="#add_topic_modal" role="button" data-toggle="modal" id="teach">Teach</a>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div id="footer">
        <div id="footer_inner">
        </div>
    </div>
                    <div class="modal hide fade" id="add_topic_modal" tabindex="-1" role="dialog" aria-labelledby="add_lesson_label" aria-hidden="true">
                        <div class="modal-header">
                             <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
                             <h3 id="add_lesson_label">Teach</h3>
                        </div>
                        <div class="modal-body">
                        </div>
                        <div class="modal-footer">
                            <button class="btn" data-dismiss="modal" aria-hidden="true">Cancel</button>
                        </div>
                     </div>
</body>
</html>

UPDATE: Это одна из тех проблем, которые я знал, что изменение позиции элемента в DOM исправит ее, но понимание причины - это еще одна проблема.

Удаление position: relative; z-index: 2; из #navbar и #nav_inner также устраняет проблему, поэтому хотя модальный имеет position: fixed; z-index: 1050;, где z-индекс работает только с позицией, а фиксированное положение помещает элемент, расположенный относительно браузера, это все еще не работает из-за того, что родительский элемент имеет относительную позицию и z-index... magic.

Причина, по которой выцветший фон появился выше, заключалась в том, что это добавлено к телу с помощью javascript, поэтому у него не было проблем с применением правильного индекса z 1040 и было помещено над модальным.

Ответ 2

У меня была такая же проблема. Но поскольку мой контент был загружен ajax, мне не удалось создать "модальный" перед закрытием

Итак, я сделал это:

$(function(){
  $("#add_topic_modal").appendTo("body");
});

И теперь "модальный" работает так, как ожидалось.