【发布时间】:2015-12-18 03:28:38
【问题描述】:
我正在尝试了解定位和关于absolute 我有一个问题。
据我了解,绝对定位的元素已从正常文档流中完全删除。就它们周围的元素而言,绝对定位的元素并不存在。
然后,它们相对于它所具有的第一个不具有position: static; 的父元素进行定位。如果没有这样的元素,则 position: absolute 的元素将相对于<html> 定位。
所以我在这里创建了一个带有 3 个不同 div 的小提琴,每个 div 都有一种颜色。这三个的不透明度都是 0.5。 --> https://jsfiddle.net/uwqoy4zh/
当我将第二个 div 设置为 position: absolute 时,他从流程中移除,因此我看到粉红色的那个在它的位置 --> https://jsfiddle.net/401ykurg/
但是,当我做同样的事情但不改变不透明度时,从流程中移除的就是粉红色的! --> https://jsfiddle.net/qnou6Lya/
我没有理解什么?
此外,我可以看到在确实有效的示例中(它从流中删除了黄色的),其中实际位置在粉红色的后面,而不是蓝色的后面。
当把黄色加宽一点时我可以看到这一点 --> https://jsfiddle.net/tszm65cu/
如果绝对定位是相对于它拥有的第一个没有position: static 的父元素定位的,当没有这样的元素时,position: absolute 的元素相对于文档窗口定位,为什么不它将黄色 div 置于蓝色 div 下方?
黄色没有顶部或任何东西,并且由于没有应用绝对、相对或固定定位的父元素,它应该将其放置在相对于窗口的位置。
为什么会在那里?
谢谢!
【问题讨论】:
-
不透明度确实会影响 z-index 值....可能就是这样。
-
查看 MDN 中的堆叠上下文:developer.mozilla.org/en-US/docs/Web/CSS/CSS_Positioning/…
-
css-tricks也有一篇不错的文章:css-tricks.com/almanac/properties/z/z-index
-
在第二个小提琴中,您实际上看到了第二个和第三个 div 重叠。黄色在顶部,但由于不透明,它看起来更接近粉红色,但不完全一样。去除不透明度,黄色会遮住粉红色。