Bootstrap模态框的z-index
Bootstrap模态框的z-index
问题是:我正在使用滚动视差,所以页面中有z-index
现在当我尝试通过Bootstrap弹出一个模态框时,它看起来像这样https://www.dropbox.com/s/42tzvfppj4vh4vx/Screenshot%202013-11-11%2020.38.36.png
如您所见,模态框不在最上层,任何鼠标点击都会禁用它。
如果我禁用这段CSS代码:
#content { color: #003bb3; position: relative; margin: 0 auto; width: 960px; z-index: 300; background: url('../images/parallax-philosophy-ltl.png') top center; }
模态框就可以正常工作。
请注意,Bootstrap默认的.modal是z-index:1050,所以我不明白为什么它不在所有其他内容的最上层。
这是模态框的代码:
我从顶部菜单触发它:
提前感谢。
编辑
如果有人遇到同样的问题,找到了解决办法。
方法如下:在包含模态框的section或div中添加data-backdrop="false"
例如:
问题出现的原因是在一个页面中使用了jQuery Impromptu和Bootstrap modal,而Bootstrap modal的z-index属性较低,导致弹出框无法覆盖住Impromptu的提示框。
解决方法是通过覆盖Bootstrap modal的z-index属性来调整弹出框的显示顺序。可以将以下代码添加到样式表中:
.modal.fade { z-index: 10000000 !important; }
这样就可以将Bootstrap modal的z-index属性设置为一个较高的值,确保弹出框能够覆盖住其他元素。这个解决方法不需要使用JavaScript,只需将代码添加到样式表中即可。
通过设置z-index属性,可以解决Bootstrap modal在页面中与其他元素的重叠问题,确保弹出框能够正确显示在最上层。
Bootstrap模态框的z-index问题通常与“嵌套”z-index有关。例如,如果我们有以下代码:
<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>
根据z-index的值,我们期望的显示顺序应该是B,C,A。但是由于B是嵌套在z-index设为1的div内部,实际显示顺序是C,B,A。
解决这个问题的方法是找到设置了z-index的父元素,要么调整其设置,要么移动内容,使层和其父容器按照期望的顺序堆叠起来。在Firefox的Firebug中,通过“Layout”选项卡可以快速查看父元素,找到设置了z-index的位置。
对于Bootstrap 3模态框,其z-index为1040,即使将元素设置为1041或1042,仍然无法按照期望的顺序显示。模态框内部的所有元素的z-index都设置为auto,没有其他祖先元素设置了z-index。虽然将position:fixed设置为元素确实会产生效果,但模态框中的布局可能会出现问题。
作者建议通过在Firefox的Firebug中使用Layout选项卡查看元素,并逐个查看每个父元素是否设置了z-index。如果z-index的行为不符合预期,可能是与父元素有关,而不是所期望的元素。
作者遇到的问题是元素没有设置position,因此z-index没有应用。而modal-body设置了position: relative,重置了作者的z-index基础,因此不需要担心像1040这样高的z-index值。作者通过给input添加position:relative,给input设置z-index:1,并给遮罩层设置z-index:0来解决了这个问题。在非模态页面中,作者的遮罩层的z-index是-1,但在模态情况下,它被放置在模态框下方。作者认为这是一个浏览器的bug,但可以很容易地通过这种方法解决。