简体   繁体   English

Bootstrap 模态 z-index

[英]Bootstrap modal z-index

The issue is: I'm using parrallx scrolling, so I have z-index in the page now when I try to popup a box-modal by Bootstrap I get him to look like this https://www.dropbox.com/s/42tzvfppj4vh4vx/Screenshot%202013-11-11%2020.38.36.png问题是:我正在使用 parrallx 滚动,所以当我尝试通过 Bootstrap 弹出框模式时,我现在在页面中有 z-index 我让他看起来像这样https://www.dropbox.com/s /42tzvfppj4vh4vx/截图%202013-11-11%2020.38.36.png

As you can see, the box-modal isn't on top and any mouse click disables it.如您所见,框模式不在顶部,任何鼠标单击都会禁用它。 if I disable this css code:如果我禁用此 css 代码:

#content {
    color: #003bb3;
    position: relative;
    margin: 0 auto;
    width: 960px;
    z-index: 300;
    background: url('../images/parallax-philosophy-ltl.png') top center;
}

the box modal works.框模态有效。 just to notice, Bootstrap default.modal is z-index:1050, so I can't understand why it's not on top of all other context.请注意,Bootstrap default.modal 是 z-index:1050,所以我不明白为什么它不在所有其他上下文之上。

that's the box-modal:那是盒子模态:

   <section id="launch" class="modal hide fade">
    <header class="modal-header">
        <button type="button" class="close" data-dismiss="modal">&times;</button>
        <h3>אשר הגעה לחתונה  </h3>
    </header>
    <div class="modal-body">
        <form method="post" action="/update" id="myForm2">
            <input type="radio"  id="yes_arrive" name="arrive" checked="checked" value="yes">מגיע<br>
            <p><input type="text" required name="fsname" value="" placeholder="הכנס שם פרטי ומשפחה "></p>
            <p>כמה אנשים מגיעים?   </p>
            <select name="number" id="number">
                <option value="0">0</option>
                <option value="1">1</option>
                <option value="2">2</option>

            </select>
            <hr/>
            <input type="hidden" name="title" id="title" value="{{title}}">
            <input type="radio" name="arrive" id ="no_arrive" value="no">לא מגיע
            <p>סיבה לאי הגעה</p>
            <input type="text" name="no_arrive_reason" placeholder="קצר ולעניין, לא שדה חובה">
            <hr/>
            <p class="submit"><input type="submit" name="submit" value="שלח"></p>

        </form>
    </div>
    <footer class="modal-footer">
        <button class="btn btn-primary" data-dismiss="modal">Close</button>
    </footer>
</section>

and I trigger him from top menu:我从顶部菜单触发他:

  <li><a class="launch" data-toggle="modal" href="#launch">Approve</a></li>

thanks ahead.提前谢谢。

EDIT编辑

Solution found if anyone falls to the same problem.如果有人遇到同样的问题,则找到解决方案。 this is the way: add data-backdrop="false" to section or div that you contain the modal with eg: <section id="launch" class="modal hide fade in" data-backdrop="false"> notice that it doesn't get the gray background that way, so it's kinda a dirty solution, will be happy to hear of a better one.这是方法:将 data-backdrop="false" 添加到包含模态的部分或 div,例如: <section id="launch" class="modal hide fade in" data-backdrop="false">注意它不会以这种方式获得灰色背景,所以它有点肮脏的解决方案,很高兴听到更好的解决方案。

The problem almost always has something to do with "nested" z-indexes.该问题几乎总是与“嵌套”z-index 相关。 As an Example:举个例子:

<div style="z-index:1">
  some content A
  <div style="z-index:1000000000">
    some content B
  </div>
</div>
<div style="z-index:10">
  Some content C
</div>

if you look at the z-index only you would expect B,C,A, but because B is nested in a div that is expressly set to 1, it will show up as C,B,A.如果仅查看 z-index,您会期望 B、C、A,但由于 B 嵌套在明确设置为 1 的 div 中,因此它将显示为 C、B、A。

Setting position:fixed locks the z-index for that element and all its children, which is why changing that can solve the problem.设置 position:fixed 会锁定该元素及其所有子元素的 z-index,这就是更改它可以解决问题的原因。

The solution is to find the parent element that has the z-index set and either adjust the setting or move the content so the layers and their parent containers stack up the way you want.解决方案是找到设置了 z-index 的父元素,然后调整设置或移动内容,使图层及其父容器按照您想要的方式堆叠。 Firebug in Firefox has a tab in the far right named "Layout" and you can quickly go up the parent elements and see where the z-index is set. Firefox 中的 Firebug 在最右侧有一个名为“Layout”的选项卡,您可以快速上移父元素并查看 z-index 设置的位置。

I found this question as I had a similar problem.我发现了这个问题,因为我有一个类似的问题。 While data-backdrop does "solve" the issue;虽然data-backdrop确实“解决”了这个问题; I found another problem in my markup.我在我的标记中发现了另一个问题。

I had the button which launched this modal and the modal dialog itself was in the footer.我有它推出这个模式模态对话框本身是在页脚的按钮。 The problem is that the footer was defined as navbar_fixed_bottom , and that contained position:fixed .问题是页脚被定义为navbar_fixed_bottom ,并且包含position:fixed

After I moved the dialog outside of the fixed section, everything worked as expected.在我将对话框移到固定部分之外后,一切都按预期进行。

The modal dialog can be positioned on top by overriding its z-index property:模态对话框可以通过覆盖其 z-index 属性来定位在顶部:

.modal.fade {
  z-index: 10000000 !important;
}

Well, despite of this entry being very old.好吧,尽管这个条目很旧。 I was using bootstrap's modal this week and came along this "issue".本周我正在使用引导程序的模态并遇到了这个“问题”。 My solution was somehow a mix of everything, just posting it as it may help someone :)我的解决方案以某种方式混合了一切,只是发布它,因为它可能对某人有所帮助:)

First check the Z-index war to get a fix there!首先检查 Z-index 战争以在那里得到修复!

The first thing you can do is deactivate the modal backdrop, I had the Stackoverflow post before but I lost it, so I wont take the credit for it, keep that in mind;您可以做的第一件事是停用模态背景,我之前有过 Stackoverflow 帖子,但我丢失了它,所以我不会为此归功于它,请记住这一点; but it goes like this in the HTML code:但它在 HTML 代码中是这样的:

 <!-- from the bootstrap's docs --> <div class="modal fade" tabindex="-1" role="dialog" data-backdrop="false"> <!-- mind the data-backdrop="false" --> <div class="modal-dialog" role="document"> <!-- ... modal content --> </div> </div>

The second approach was to have an event listener attached to the bootstrap's shown modal event.第二种方法是将事件侦听器附加到引导程序显示的模态事件。 This is somehow not so pretty as you may think but maybe with some tricks by your own may somehow work.这在某种程度上并不像您想象的那么漂亮,但也许您自己的一些技巧可能会奏效。 The advantage of this is that the element attaches the event listener and you can completely forget about it as long as you have the event listener attached :)这样做的好处是元素附加了事件侦听器,只要附加了事件侦听器,就可以完全忘记它:)

 var element = $('selector-to-your-modal'); // also taken from bootstrap 3 docs $(element).on('shown.bs.modal', function(e) { // keep in mind this only works as long as Bootstrap only supports 1 modal at a time, which is the case in Bootstrap 3 so far... var backDrop = $('.modal-backdrop'); $(element).append($(backDrop)); });

The second.1 approach is basically the same than the previous but without the event listener. second.1方法与前一种方法基本相同,但没有事件侦听器。

Hope it helps someone!希望它可以帮助某人!

I had this problem too.我也有这个问题。 Problem is comming from html, created by bootstrap js:问题来自 html,由 bootstrap js 创建:

<div class="modal-backdrop fade in"></div>

This line is created directly before end of <body> element.该行直接在<body>元素结束之前创建。 This cause "z-index stacked element problem."这会导致“z-index 堆叠元素问题”。 I believe that bootstrap .js do creation of this element wrong.我相信 bootstrap .js 创建这个元素是错误的。 If you have in mvc layout page, this script will cause still the same problem.如果您在 mvc 布局页面中,此脚本仍会导致相同的问题。 Beter js idea cut be to get target modal id and inject this line to html before...更好的 js 想法是获取目标模态 id 并将此行注入 html 之前...

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

SO SOLUTION IS repair bootstrap.js - part of modal:解决方案是修复 bootstrap.js - 模态的一部分:

.appendTo(this.$body)  
//REPLACE TO THIS:
 .insertBefore(this.$element) 

ok, so if you are using bootstrap-rtl.css, what you can do is go to the following class .modal-backdrop and remove the z-index attribute.好的,所以如果您使用的是 bootstrap-rtl.css,您可以做的是转到以下类.modal-backdrop并删除z-index属性。 after that all should be fine之后一切都应该没问题

I fell into this this with using the JQLayout plugin, especially when using nested layouts and modals with Bootstrap 4.我在使用 JQLayout 插件时陷入了这一困境,尤其是在 Bootstrap 4 中使用嵌套布局和模式时。

An overriding css needs to be added to correct the behaviour,需要添加一个覆盖的 css 来纠正行为,

.pane-center{
    z-index:inherit !important;
}

Try this Script:试试这个脚本:

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);

} }

Resolved this issue for vue, by adding to the options an id: 'alertBox' so now every modal container has its parent set to something like alertBox__id0whatver which can easily be changed with css:通过向选项添加id: 'alertBox'为 vue 解决了这个问题,因此现在每个模态容器都将其父级设置为类似于alertBox__id0whatver ,可以使用 css 轻松更改:

div[id*="alertBox"] { background: red; }

(meaning if id name contains ( *= ) 'alertBox' it will be applied. (意味着如果 id 名称包含 ( *= ) 'alertBox' 它将被应用。

 function ShowGroupModal() { $('#dvGroupInfoPopup').removeClass("fade"); return false; } function GroupModelReset() { $('#txtGroupName').val(""); $('#dvGroupInfoPopup').addClass("fade"); return false; } function SaveClientDetails() { if($('#txtName').val() == "") { alert("Please enter Client Name"); $('#txtName').focus(); return false; } else { alert("Client information successfully saved."); return false; } } function SaveGroup() { if($('#txtGroupName').val() == "") { alert("Please enter Group Name"); $('#txtGroupName').focus(); return false; } else { alert("Group information successfully saved."); return false; } }
 .fade {display:none;}.show {display:block;}.modalParentBox { z-index: 10040;important.}:modalChildBox { z-index; 10042 !important;}
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <:--Parent Modal--> <div class="modal show modalParentBox" id="idModalAddClient" data-bs-backdrop="static" tabindex="1" aria-labelledby="ModalAddClientLabel" aria-modal="true" role="dialog"> <div class="modal-dialog modal-dialog-centered modal-lg"> <div class="modal-content border-top border-0 border-4 border-primary"> <div class="modal-header"> <h5 class="modal-title" id="ModalAddClientLabel"></h5> <div> <i class="bx bxs-user me-1 font-22 text-primary"></i> </div> <h5 id="idH5AddUpdateClientHeader" class="mb-0 text-primary">Add Client</h5> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> </div> <div class="modal-body"> <div class="row"> <div class="col-xl-12 mx-auto"> <div class="border p-3 rounded"> <div class="row mb-3"> <label for="ddlGroupToAddClient" class="col-lg-4 col-form-label"><span class="text-danger">* </span>Group <b>:</b></label> <div class="col-lg-8"> <div class="input-group"> <select class="form-select" id="ddlGroupToAddClient"> <option selected="selected" value="-1">-- Select Group --</option> </select> <button class="btn btn-primary" type="button" data-bs-toggle="modal" data-bs-target="#dvGroupInfoPopup" onclick="ShowGroupModal()">Add Group</button> </div> <span id="idSpnClientTypeError" name="nameSpnForClearAddClientError" class="text-danger small fw-bold"></span> </div> </div> <div class="row mb-3"> <label for="txtName" class="col-lg-4 col-form-label"><span class="text-danger invisible">* </span>Client Name <b>:</b></label> <div class="col-lg-8"> <input type="text" class="form-control" id="txtName" maxlength="150"> <span id="idSpnCompanyNameError" name="nameSpnForClearAddClientError" class="text-danger small fw-bold"></span> </div> </div> </div> </div> </div> </div> <div class="modal-footer"> <button id="idBtnSaveClient" type="button" class="btn btn-sm btn-primary" onclick="SaveClientDetails()">Save</button> <button type="button" class="btn btn-sm btn-danger" data-bs-dismiss="modal">Cancel</button> </div> </div> </div> </div> <!--Child Popup Modal--> <div id="dvGroupInfoPopup" class="modal fade modalChildBox" tabindex="2" data-bs-backdrop="static" data-bs-keyboard="false" aria-hidden="true"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title" id="dvGroupInfoPopupLabel">Add Group</h5> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close" onclick="GroupModelReset()"></button> </div> <div class="modal-body"> <div class="row mb-2"> <div class="col-lg-5"> <label for="txtGroupName" class="form-label">Group Name:<span class="text-danger">*</span></label> </div> <div class="col-lg-7"> <input id="txtGroupName" type="text" maxlength="150" class="form-control" autocomplete="off" required /> </div> </div> </div> <div class="modal-footer"> <button type="button" class="btn btn-success btn-sm" onclick="SaveGroup()">Save Group</button> <button type="button" class="btn btn-danger btn-sm" data-bs-dismiss="modal" aria-label="Close" onclick="GroupModelReset()">Cancel</button> </div> </div> </div>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM