位置:粘不工作

问题描述:

我有这样的HTML代码:位置:粘不工作

<div class="header"> 
<div class="desc">Description</div> 
<div class="logo"><img src=""/></div> 
<div class="navbar"></div></div> 

.header具有150像素的高度。 .navbar的高度为20px。当用户滚动时,我想让.navbar粘在顶部。所以我去了CSS并设置了位置:sticky和top:0。但是这不起作用。我最初认为firefox不支持位置:粘性,但事实并非如此,因为我能够看到它的工作演示。我搜索了一下,但没有发现任何帮助。任何人都知道为什么这不起作用?

+2

既然你不显示你的CSS ...只有当包含div(标题)没有隐藏或自动溢出时,粘滞只能工作。可能是要检查的东西。 – pinkfloydx33

+0

对于正在研究这个问题的其他人来说,如果直接父母是'display:flex','position:sticky'也往往不起作用。 – user568458

,如果您将导航栏的标题外,它工作正常。见下文。至于原因,根据MDN

该元件是根据文档的正常流动定位,然后相对于其流量根和包含基于顶部的值块,右偏移,底部和左侧。

对于包含块的

含块是祖先到所述元件相对定位

所以,当我不要误会,导航栏是定位的只要它在视口外滚动(这显然意味着,你不能再看到它),在标题的偏移量0处。

.navbar { 
 
    background: hotpink; 
 
    width: 100%; 
 
    height: 50px; 
 
    position: -webkit-sticky; 
 
    position: sticky; 
 
    top: 0; 
 
} 
 

 
.header { 
 
    height: 150px; 
 
    background: grey; 
 
} 
 

 
body { 
 
    height: 800px; 
 
    position: relative; 
 
}
<div class="header"> 
 
<div class="desc">Description</div> 
 
<div class="logo"><img src=""/></div> 
 
</div> 
 

 
<div class="navbar"></div>

+0

感谢您的回答! – Wolfuryo

+1

将navbar作为问题中的标题元素,它也很粘稠。但直到它的容器结束。最初它在“说明”下面可见,并且在向下滚动时它将通过灰色标题移动。在灰色区域结束时,它将在容器(=标题)结束时停止。在这个答案中,导航栏容器是正文,所以这就是为什么它最初将在灰色页眉之后开始并一直向下滚动。 – Neepsnikeep

你的HTML代码,因为它是

<div class="header"> 
<div class="desc">Description</div> 
<div class="logo"><img src=""/></div> 
<div class="navbar"></div></div> 

读写导航栏

.header { 
height: 150px; 
background-color: #d1d1d1; 
} 

.navbar { 
    background: #999; 
    border-bottom: 1px solid #333; 
    border-top: 1px solid #333; 
    color: #FFF; 
    margin: 0; 
    padding: 2px 0 0 12px; 
    position: -webkit-sticky; 
    position: sticky; 
    top: -1px; 
} 

希望CSS类,这将有助于

+0

我已经试过了,没有任何成功。我试图添加position:sticky和top:0到.header元素,它可以工作,但这不是我想要的。 – Wolfuryo

+0

我试图从标题容器中移出导航栏,它正在工作 –

不知怎的,你的代码时,.navbar元素不是像头另一容器内才有效。我把它移出来,然后它工作正常。 I created a codepen snippet for that, check it out

<header> 
    <div class="logo">Logo</div> 
    <div class="description"><div>Lorem ipsum dolor sit amet consectetur adipisicing elit. Quo, veritatis.</div></div> 
</header> 
<div class="navbar"> 
    <ul> 
     <li><a href="#">navitem1</a></li> 
     <li><a href="#">navitem2</a></li> 
     <li><a href="#">navitem3</a></li> 
     <li><a href="#">navitem4</a></li> 
    </ul> 
</div> 

眼下position:sticky支持相当好,因为你可以看到canIuse。当然,IE目前没有支持,但新的Edge版本将为此提供全面支持!我发现有关此主题的一些有趣的文章:

但在地平线上有好消息。我认为下一次会有更好的浏览器支持。

+0

感谢您的回答! – Wolfuryo

对于其他任何碰到此问题的人,由于设置了overflow-x: hidden;body元素,位置粘滞不适用于我。

+0

你刚刚为我节省了很多时间。正在做一些重新塑造,无法弄清楚为什么位置sticky停止工作的生活。结果发现第三方在html和body上添加了溢出样式。啊! – mysticflute

+0

这也帮了我很多。谢谢! – Popmatik