gpt4 book ai didi

css - position fixed div in absolute positioned div works - 但为什么呢?

转载 作者:太空宇宙 更新时间:2023-11-04 06:42:23 24 4
gpt4 key购买 nike

我需要给一个元素固定位置,但我不能相对于视口(viewport)定位它,我需要它相对于容器定位。

我设法做到了,但我想知道它是如何工作的以及为什么工作,因为实际上我认为固定位置总是相对于视口(viewport)而不是父元素定位。

这是我的(工作)代码:

<!DOCTYPE html>
<html>
<head>
<style type="text/css">

body {
height: 2000px;
}

.container {
position: relative;
}

.sidebar {
width: 200px;
background-color: red;
height: 200px;
position: absolute;
left: 100px;
top: 100px;
}

.fixed {
width: 100px;
height: 100px;
background-color: green;
position: fixed;
/* top: 0;
left: 0; */
margin-left: 10px;
margin-top: 10px;
}

</style>
</head>

<body>

<div class="container">
<div class="sidebar">
<div class="fixed"></div>
</div>
</div>

</body>
</html>

fiddle :https://jsfiddle.net/tnwLycao/

“固定”元素可以很容易地用边距定位(例如 margin-left/margin-top)。但是,当我停用边距并尝试使用顶部/左侧定位“固定”时,它再次相对于视口(viewport)定位,而不是相对于父容器/元素定位。

谁能告诉我这是如何以及为什么有效的?

最佳答案

position: fixed 的元素确实相对于视口(viewport)(或浏览器)定位。但是,因为它是一个绝对定位的元素,所以它是“相对于视口(viewport)建立的初始 containing block 定位的”。

这是在 position 中列出的文档:

An absolutely positioned element is an element whose computed position value is absolute or fixed. The top, right, bottom, and left properties specify offsets from the edges of the element's containing block. (The containing block is the ancestor relative to which the element is positioned.) If the element has margins, they are added to the offset.

也就是说,当你指定margin-topmargin-left时,这些值是相对于parent的。并且因为该元素是相对于父元素定位的,所以默认的 topleft 是从父元素继承的。在您的示例中,.fixed 元素的 top 值为 100px,因为它继承 top 来自 .sidebar(父级)的 100px 的值。当您在 .fixed 上设置 top: 0 时,您将覆盖此值(从 top: 108px顶部:0):

Fixed

因此,该元素似乎“脱离了流程”。但是,它仍然始终相对于视口(viewport)定位;它只有一个初始偏移量(它从其父级继承)。

关于css - position fixed div in absolute positioned div works - 但为什么呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53620976/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com