我在一个相对定位的元素中有一个固定的位置元素,只要我担心position: relative
元素不应该对position: fixed
产生任何影响(固定元素相对于窗口,对吗?)。
然而,固定元素z-index似乎是由它的父级继承的,它的z-index不能高于其父级的z-index。
我希望我有意义吗?下面是我正在谈论的HTML示例:
.outer {
position: relative;
z-index: 2;
}
.inner {
background: #fff;
left: 50px;
position: fixed;
top: 40px;
z-index: 1000000;
}
.fade {
background: #555;
bottom: 0;
left: 0;
opacity: 0.5;
position: fixed;
right: 0;
top: 0;
z-index: 3;
}
<div class="outer">
<div class="inner">testing testing</div>
</div>
<div class="fade"></div>
如果您更改以下内容:
.outer { position: relative; z-index: 4; }
然后.inner
元素出现在淡入淡出元素的前面。
我发现这种行为非常奇怪......有没有办法在不移动.inner
div或更改.outer
div的CSS的情况下解决这个问题?
以上代码示例的小提琴:
答案 0 :(得分:23)
简而言之,是的,position:fixed
的元素受其父级的z-index的限制,因为父级的z-index
已定义。
遗憾地通知你,但你想要的是目前还不可能。您可以获得所需效果的唯一方法是更改您的HTML 或从outer
删除z-index 。
更改HTML选项
第一个选项是将inner
移到outer
之外,看起来like this。
HTML修复的第二个选项是将fade
移到outer
内(甚至使用相同的CSS) - demo of that here。
第三个选项是将fade
放在outer
内,然后将inner
放在fade
内,但这需要您使用rgba颜色和不透明度 - that demo is found here
更改CSS选项
使用当前相同的HTML,您可以获得的最接近的内容是删除outer
- Demo here的z-index。您可能会认为您可以简单地将每个元素的z-index递增2,但这不起作用,因为子元素不能具有比其父元素更高的z-index(如果设置了父元素的z-index)。
如果您考虑一下,fade
和outer
处于同一级别。您要做的是让fade
保持在同一级别,但也将其置于上一级,这是不可能的。就像试图同时在建筑物的两个楼层上一样,它无法完成。
虽然您需要的内容与本文没有直接关系,但Philip Walton在z-indexes and the effect opacity has on them上创建了一篇很棒的帖子,这对于看到这个问题的其他人可能会有用。