我已经阅读了尽可能多的关于css中位置粘性的内容,但它的行为并不像我期望的那样。有人能解释一下吗
以下是我到目前为止的情况:
#upper {
width: 200px;
height: 200px;
background-color: blue;
}
#middle {
width: 200px;
height: 200px;
background-color: yellow;
position: sticky;
left: 100px;
top: 100px;
}
#lower {
width: 200px;
height: 200px;
background-color: red;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>sticky position</title>
<link rel="stylesheet" href="sticky.css">
</head>
<body>
<div id="upper"></div>
<div id="middle"></div>
<div id="lower"></div>
</body>
</html>
我所期待的
左上角的蓝色盒子。一个重叠的黄色框(黄色框的左上角重叠蓝色框的右下角)。一个红色的盒子在蓝色的盒子下面,有一个盒子大小的空隙。
发生了什么
蓝色和红色的盒子是我期望的地方。黄色框按预期向右移动,但不垂直移动,也不与蓝色框重叠。
我所发现的
如果我换顶:100;最高:300;在中间的CSS中,黄色框向下移动并与红色框重叠,正如我所期望的那样。
5条答案
按热度按时间pcrecxhr1#
我想
position: absoulte
就是你要找的:whhtz7ly2#
你不应该使用位置来粘滞,而应该使用绝对值来解决这个问题。下面是代码:
我还添加了一个200px的顶部边距到红色框,这样有一个空白框,你想要的。
当你滚动网页的时候,你想让一些元素粘在一个位置上,就可以使用位置粘滞。您可能已经注意到,即使您向下滚动,某些网站的导航栏仍然位于页面的顶部,在这种情况下,使用位置粘滞。
pbpqsu0x3#
也许您真正想要的是将黄色从包含元素中的自然“流动”位置相对于其他元素定位?这里我使用了
-100px
的相对位置来实现这一点。我添加了一个带有背景色的容器,这样你就可以看到三个元素位于那个块中。
另一个选择是使用
display: grid
,如下所示:我做了以下的事情:qkf9rpyu4#
您所期望的可以通过将“middle”元素的位置设置为“relative”并更改“top”属性值来完成,如下所示:
和“位置:“粘性”在此不适用。
vom3gejh5#
我没有发现任何人这样说,但我认为我的问题的答案是:sticky; left、right、top和bottom属性指定元素与指定边缘的 * 最小 * 距离。所以在我的例子中,黄色框的正常位置已经距离视口的顶部边缘超过100个像素,所以它不会垂直移动。但是,正常位置是接触左边缘的,所以它需要向右移动100个像素。这也解释了为什么top:300 px;和我预想的一样