所以我遇到与@Jamescoo几乎完全相同的问题,但我认为我的问题来自于我已经定位了几个DIV以创建滑动导航面板。
这是我复制的确切设置:http://jsfiddle.net/ZBQ8U/2/
奖励:如果您愿意,可以随意获取滑动面板的代码:)
z-index不应该冲突,它们的值会显示它们正确堆叠,但在视觉上它们不是。
点击“打开模态”按钮后,<div class="modal-backdrop fade in"></div>
涵盖了所有内容! (你必须重新运行代码才能重置它)
我不知道如何补救这个...有什么想法吗?
答案 0 :(得分:107)
将整个模式移到代码的其余部分之外,直到最底部。除了正文之外,它不需要嵌套在任何其他元素中。
<body>
<!-- All other HTML -->
<div>
...
</div>
<!-- Modal -->
<div class="modal fade" id="myModal">
...
</div>
</body>
他们在文档中暗示了这个解决方案。
模态标记位置
始终尝试将模式的HTML代码放在文档的顶级位置,以避免使用其他组件 影响模态的外观和/或功能。
答案 1 :(得分:26)
虽然.modal
的z-index高于.modal-backdrop
的z-index,但.modal
位于具有较低z-index的父div #content-wrap
中比.modal-backdrop
(z-index:1002 vs z-index:1030)。
因为父级的z索引低于.modal-backdrop
,所以其中的所有内容都将位于模态之后,而不考虑给予孩子的任何z索引。
如果您删除z-index
以及body div#fullContainer #content-wrap
上设置的#ctrlNavPanel
,则一切似乎都正常。
body div#fullContainer #content-wrap {
background: #ffffff;
bottom: 0;
box-shadow: -5px 0px 8px #000000;
position: absolute;
top: 0;
width: 100%;
}
#ctrlNavPanel {
background: #333333;
bottom: 0;
box-sizing: content-box;
height: 100%;
overflow-y: auto;
position: absolute;
top: 0;
width: 250px;
}
注意:我认为您最初可能在#content-wrap和#ctrlNavPanel上使用z-index来确保导航器位于后面,但这不是必需的,因为nav元素位于HTML中的内容包装之前,所以你只需要定位它们,而不是明确设置堆叠顺序。
修改强> 随着Schmalzy的加入,链接不再可点击。这是因为整个容器是100%宽,因此涵盖了导航。解决此问题的最快方法是将导航放在div中:
<div id="fullContainer">
<aside id="ctrlNavPanel">
<ul class="nav-link-list">
<li><label>Menu</label></li>
<li><a href="/"><span class="fa fa-lg fa-home"></span> Home</a></li>
<li><a><span class="fa fa-lg fa-group"></span>About Us</a></li>
<li><a><span class="fa fa-lg fa-book"></span> Contacts</a></li>
</ul>
</aside>
<div id="content-wrap">
...
</div>
</div>
答案 2 :(得分:19)
就我而言,我可以通过为.modal-backdrop
.modal-backdrop {
z-index: -1;
}
虽然这样可行,但表单控件似乎仍然出现在背景上方,单击任意位置会解除模式,但它看起来并不好。
对我来说更好的解决方法是绑定到显示的事件(加载页面后)并更正z-index属性。
$('.modal').on('shown.bs.modal', function() {
$(this).css("z-index", parseInt($('.modal-backdrop').css('z-index')) + 1);
});
在这种情况下,如果你可以在显示的模态上更改DOM:
$('.modal').on('shown.bs.modal', function() {
//Make sure the modal and backdrop are siblings (changes the DOM)
$(this).before($('.modal-backdrop'));
//Make sure the z-index is higher than the backdrop
$(this).css("z-index", parseInt($('.modal-backdrop').css('z-index')) + 1);
});
答案 3 :(得分:12)
这些答案对我来说都不是很好。 问题似乎在于模态窗口需要在身体外部。这不是最好的
所以这段代码完全完成了这项工作:
$('.modal ').insertAfter($('body'));
&#13;
$('#product_' + product_id + ' .modal ').insertAfter($('body'));
答案 4 :(得分:5)
在我的情况下,我的一个模态的父母是动画的,并且有这个
.animated {
-webkit-animation-duration: 1s;
animation-duration: 1s;
-webkit-animation-fill-mode: both;
animation-fill-mode: both;
z-index: 100;
}
此处的拦截器为animation-fill-mode: both;
。我不能只将modal移到外面,所以解决办法是将'animation-fill-mode'覆盖到animation-fill-mode: none;
。动画仍然很好。
答案 5 :(得分:4)
我有几天在同一个问题上打架......我找到了三个可行的解决方案,但我不知道,哪个是最优的,如果有人告诉我,我将不胜感激。
修改将在bootstrap.css
中选项1:
.modal-backdrop {
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 1040; <- DELETE THIS LINE
background-color: #000000;
}
选项2:
.modal-backdrop {
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: -1; <- MODIFY THIS VALUE BY -1
background-color: #000000;
}
选项3:
/*ADD THIS*/
.modal-backdrop.fade.in {
z-index: -1;
}
我使用了选项2。
答案 6 :(得分:3)
尝试删除背景,如果你真的不需要它(data-backdrop =&#34; false&#34;):
<div class="modal fade" data-backdrop="false" role="dialog" id="my-modal" aria-labelledby="modal-title">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h3 class="modal-title" id="modal-title">No Backdrop</h3>
</div>
<div class="modal-body">
<p>
Look! No backdrop here!
</p>
</div>
<div class="modal-footer">
<button class="btn btn-default" data-dismiss="modal">Cancel</button>
<button class="btn btn-primary">Ok</button> </div>
</div>
</div>
</div>
答案 7 :(得分:1)
此问题的另一个解决方案是,如果您不想修改bootstrap.css,请在bootstrap-dialog.css文件中将z-index: 0;
添加到.modal-backdrop类。
答案 8 :(得分:1)
我知道已经晚了,我遇到了同样的问题,但我不得不如下破解它;
.modal-backdrop {
/* bug fix - no overlay */
display: none;
}
.modal{
/* bug fix - custom overlay */
background-color: rgba(10,10,10,0.45);
}
答案 9 :(得分:1)
我很谨慎地将模式内容移到其原始上下文之外:其他JS或样式可能取决于该上下文。
但是,我怀疑是否有任何脚本或样式需要背景的特定上下文。
所以我的解决方案是将背景移到模态内容附近,并强制其进入相同的堆叠上下文:
$(document).on('shown.bs.modal', '.modal', function () {
$('.modal-backdrop').before($(this));
});
与jacoswarts'solution仅有一点偏差,因此感谢您的启发!
答案 10 :(得分:1)
如果我们不能删除背景和/或我们有组件框架这样的角度或vue我们不能将模态移动到根。我做了这个把戏:把我的自定义模态背景容器(带有aditional类)作为模态对话框容器的兄弟,并添加了一些css
<div bsModal #moneyModal="bs-modal" class="modal fade" tabindex="-1" role="dialog">
<!-- magic container-->
<div class="modal-holder modal-backdrop" (click)="moneyModal.hide()"></div>
<div class="modal-dialog modal-sm" role="document">
<div class="modal-content">
<div class="modal-body">
....
</div>
</div>
</div>
</div>
和css
.modal-backdrop{z-index: -1}// or you can disable modal-backdrop
.modal-holder.modal-backdrop{z-index: 100}
.modal-holder + .modal-dialog {z-index: 1000}
答案 11 :(得分:1)
对于那些使用 ASP.NET MVC ,
的人需要在</body>
标记之前移动模式div,但由于您使用的是布局页面而无法执行此操作
在正文标记之前的_Layout.cshtml
文件中定义一个部分,例如:
... some html in layout page ...
@RenderSection("bottomHTML", required: false)
</body>
</html>
然后在你看来
@section bottomHTML
{
<div class="modal fade" id="myModalID" role="dialog" tabindex="-1" aria-labelledby="demo-default-modal" aria-hidden="true">
... rest of the modal div HTML ...
}
这样,模态HTML将在body标签之前呈现,现在模式应该正确显示..
答案 12 :(得分:0)
如果您嵌套了模态,这就是线索:
$('body').on('shown.bs.modal', '.modal', function (e) {
e.stopPropagation();
$(this).css("z-index", parseInt($('.modal-backdrop').css('z-index')) + 1);
});
答案 13 :(得分:0)
对于不允许您只移动 html/css 的框架的情况。
将模态附加到正文的末尾
$("#EditModal").modal("show");
$("#EditModal").appendTo("body");
并用
销毁$("#EditModal").remove();
更多信息:https://weblog.west-wind.com/posts/2016/sep/14/bootstrap-modal-dialog-showing-under-modal-background
答案 14 :(得分:0)
只需删除背景,然后将此代码插入您的css文件
.modal-backdrop {
/* bug fix - no overlay */
display: none;
}
答案 15 :(得分:0)
我想了解这个问题,在调查了我的css之后,主要的容器(身体的直接孩子)有了:
position: relative
z-index: 1
我删除了这两个属性后,背景效果很好。如果主包装器具有position: fixed
答案 16 :(得分:0)
这适合我。
<div class="modal fade" id="modalDecision" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" data-backdrop="false">
<div class="modal-dialog modal-sm">
<div class="modal-content">
<div class="modal-body text-center">
<asp:Label runat="server" Height="30px">Please select recovery delivery option</asp:Label>
<asp:LinkButton ID="btnEmail" CssClass="submit btn btn-primary" Width="100px" runat="server"
OnClick="ModalRecovery">Email</asp:LinkButton>
<asp:LinkButton ID="btnText" CssClass="submit btn btn-primary" Width="100px" runat="server"
OnClick="ModalRecovery">Text</asp:LinkButton>
</div>
</div>
</div>
var element = $('#modalDecision');
// 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 = $("<div class='modal-backdrop' style='z-index:-1;opacity:.5'></div>");
$(element).append($(backDrop));
});
答案 17 :(得分:0)
如果你使用JQuery,你可以使用appendTo()将模态附加到特定元素,在这种情况下,在大多数情况下,简单的一行可以将你的模态移动到背景的顶部,无论你在哪里模态div的位置
$("#myModal").appendTo("body");
这里是JQuery appendTo函数的引用: http://api.jquery.com/appendto/
我把它更新到你的小提琴 http://jsfiddle.net/ZBQ8U/240/
答案 18 :(得分:0)
除了这里的所有答案,我发现,bootstrap4&#34;动画fadeIn&#34;也导致了这个错误(背景后面没有可点击的模态):
检查你的模态是否在以下父标签中(引导动画)
<div class="animated fadeIn"></div>
我删除了这个标签 - 为我解决了这个问题。
答案 19 :(得分:0)
首先确保模态不在任何父div中。 然后加 $( '#myModal')。appendTo( “正文”)
它对我来说很好。
答案 20 :(得分:0)
我遇到了一个类似的问题,即淡入淡出功能不起作用,并且覆盖层停留在页面上。 我将动态内容添加回页面(仅在模态操作上刷新某些内容)。 我也有这个$('#rejectModal - '+ itemId).modal('hide')(itemId是单个页面中多个模态的动态id,用于拒绝某些信息)但问题仍然没有消失。
叠加层停留是因为我的布局在局部视图中未设置为null 设置完成后,问题就消失了:
can0 02001600 [2] 00 00 can0 07001600 [2] 00 00 can0 11001600 [2] 5C A7
答案 21 :(得分:0)
只需将你的模态移到所有div内容之外,大部分在关闭身体之前放置。
答案 22 :(得分:0)
很多时候,你无法将模态移到外面,因为这会影响你的设计结构。
背景高于你的模态的原因是父母有任何位置设置的id。
一个非常简单的方法来解决问题,然后移动你的模态外面是移动背景内部结构你有你的模态。在你的情况下,它可能是
$(".modal-backdrop").appendTo("main");
请注意,如果您的应用程序具有明确的结构,并且您无法将模式移到外部,因为它将违背设计结构,则此解决方案适用
答案 23 :(得分:0)
将此代码放在任何您想要的地方
AsyncTask
答案 24 :(得分:0)
如果您不能将模态放到根目录中(例如,如果使用角度和模态在控制器中),修改引导程序或使用 js 是显然是糟糕解决方案。
所以说你有自己的网站结构:
//not working
<div>
<div>
<div>
<modal></modal>
</div>
</div>
</div>
打开代码检查器并将模式移动到根目录,它应该正常工作(但没有你想要的地方):
//should be working
<div>
<div>
<div>
</div>
</div>
</div>
<modal></modal>
现在把它放在第一个div中并检查它是否正常工作:如果是,请检查下一个孩子,直到它不能正常工作并找到问题所在的div;
//should be working
<div>
<div>
<div>
</div>
</div>
<modal></modal>
</div>
一旦你知道哪个div是问题,你可以使用css显示和位置来使它工作。
每个人都有不同的结构,但在我的情况下,设置父display: table;
是解决方案
答案 25 :(得分:0)
我发现在bootstrap之后应用离子框架(ionic.min.cs)来解决这个问题。
答案 26 :(得分:0)
由于我没有机会移动模态标记,因为我将其添加到条件中的部分模板中,对我有用的是添加CSS bellow
.modal.fade {
display: none;
}
然后,当boostrap通过js添加类“in”时,应用display:block,一切正常。
答案 27 :(得分:0)
我错过了关注html
<div class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
添加它并且没有问题地工作
答案 28 :(得分:0)
删除z-index: 1040
;
来自此文件bootstrap.css
类.modal-backdrop