【问题标题】:Z-index not working with multiple absolute positioned elementsZ-index 不适用于多个绝对定位元素
【发布时间】:2019-09-27 16:45:35
【问题描述】:

我有一个相当简单的交互式地图,上面有一堆“图钉”,悬停在上面时会显示相应的“标签”。

CSS(无关属性省略):

#map { position: relative; }
.map-pin { display: block; position: absolute; }
.map-tag { float: left; left: 20px; opacity: 0; pointer-events: none; position: absolute; }
.map-pin:hover .map-tag { opacity: 1; pointer-events: all; }

HTML(出于显而易见的原因只包含一个 pin div):

<div id="map">

    <div id="map-pin-1" class="map-pin">
        <div class="map-tag"></div>
    </div>

</div>

问题是标签,尽管给了它们足够高的 z-index 值,但不会出现在所有其他引脚之上。似乎它们只会出现在 DOM 中特定标签上方的引脚上方。例如,#map-pin-3 .map-tag 将出现在 #map-pin-1#map-pin-2 上方,但 #map-pin-4 将出现在标签上方。

有什么建议吗?

【问题讨论】:

  • 我意识到其他pin出现在标签上方的原因是.map-pin div的高度和宽度设置为20px。这样做是为了防止大 div 阻止其他引脚悬停。我直接在.map-pin 内插入了一个锚点,作为.map-tag 的兄弟,并将其设置为20x20(.map-pin 设置为自动),因此当.map-pin a 悬停时,标签出现,而不是整个div。如果我增加 div 大小,它会覆盖其他引脚,但会阻止它们悬停。如果我减少它,它允许引脚悬停,但引脚出现在 div 上方。

标签: css css-position z-index


【解决方案1】:

首先,在您的代码示例中,我没有看到在 map-tag 元素上定义的任何 z-index。其次,您似乎有堆叠上下文的问题。看看css spec 并仔细阅读,因为 z-index,IMO,过于复杂。

在使用 z-index 时对我有帮助的一件事是 Firefox 中的“检查元素”选项。如果您选择要检查的元素,您将在右下角看到一个“3-D”选项。单击它,您可以更好地可视化堆栈顺序。

【讨论】:

  • CSS 中没有 z-index,因为我认为我不需要它。然后,我通过检查 Chrome 中的元素来试验各种值。这就是为什么我在描述中提到问题仍然存在,“尽管给了他们足够高的 z-index 值”。你能解释一下为什么将标签的 z-index 设置为 100 甚至 10 亿,不会让它们出现在页面上的所有其他内容之上吗?
猜你喜欢
  • 2014-04-06
  • 1970-01-01
  • 2013-01-07
  • 1970-01-01
  • 1970-01-01
  • 2016-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多