所以我有这个小提琴:
https://jsfiddle.net/ionescho/t0qo6z5u/。 使用html:
<div id="overlay">
</div>
<div id="top_menu">
<span>
fasdfsfafasdfas
</span>
</div>
和css:
#overlay{
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 1100;
background-color: #000;
opacity: 0.8;
}
#top_menu{
position:fixed;
top:0;
left:0;
right:0;
height:200px;
background-color:red;
padding-top:40px;
padding-left:40px;
}
#top_menu > span{
font-weight:bold;
color:white;
font-size:30px;
z-index:1101;
position:relative;
}
如您所见,白色文字仍位于半透明叠加层后面。如果我将span的父级(#top_menu)从“position:fixed”修改为“position:relative”,我会得到我正在寻找的z-index行为。
然而,我不能失去那个“位置:固定”的财产。 有谁知道为什么会这样,我怎么能解决这个问题呢?
感谢。
答案 0 :(得分:1)
您当前的行为是标准行为,适用于Firefox。
然而,根据this answer,
对于具有
position: fixed
的元素,此行为将被更改,以便它们始终建立堆叠上下文 无论他们的z-index
价值如何。一些浏览器已经开始采用 但是这种行为并没有反映出来 还是CSS2.1或新的CSS Positioned Layout Module,所以它可能没有 现在明智地依靠这种行为。
然后,如果#top_menu
建立了堆叠上下文,则z-index
的{{1}}会将其z位置设置在该堆叠上下文中。但是,#top_menu > span
低于#top_menu
。
要解决此问题,您可以将#overlay
设置为z-index
(从而在所有浏览器上生成堆叠上下文),其值高于#top_menu
的值。但是,#overlay
的背景将位于#top_menu
前面。
#overlay
#top_menu {
z-index: 1101;
}
&#13;
#overlay {
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 1100;
background-color: #000;
opacity: 0.8;
}
#top_menu {
position: fixed;
z-index: 1101;
top: 0;
left: 0;
right: 0;
height: 200px;
background-color: red;
padding-top: 40px;
padding-left: 40px;
}
#top_menu > span {
font-weight: bold;
color: white;
font-size: 30px;
z-index: 1101;
position: relative;
}
&#13;
答案 1 :(得分:0)
我不确定你想要达到什么目标。 跨度 - 作为#top_menu的子节点从其父节点继承z-index。您希望菜单位于叠加层的顶部吗?在这种情况下,#top_menu需要z-index属性。 如果您只希望跨度位于顶部,则必须将其移出父容器并为文本本身定位一个位置。