UIkit Sticky导航栏滚动到顶部时突然消失怎么办?
我在用UIkit的Sticky组件做固定导航栏,滚动到页面顶部时导航栏突然消失了,但往下拉又会出现,这是怎么回事?
代码结构是这样的:
<nav class="uk-navbar-container" uk-sticky>
<ul class="uk-navbar-nav">
<li><a href="#" rel="external nofollow" rel="external nofollow" >首页</a></li>
<li><a href="#" rel="external nofollow" rel="external nofollow" >关于</a></li>
</ul>
</nav>
已经确认引入了UIkit的JS和CSS文件,其他页面元素都能正常滚动,只有这个导航栏在顶部位置会消失。试过给nav加!important的position:fixed也不行,求大神指条明路…
uk-sticky-active类,但如果你页面里其他地方(比如父容器)有overflow: hidden或transform、perspective之类的属性,就会导致 sticky 元素被裁剪掉,看起来就像「突然消失」。先检查下你的
<nav>的所有祖先元素,尤其是<body>、<html>、或者你用的布局容器(比如<div class="container">)有没有这些样式:-
overflow: hidden-
overflow: auto-
transform: ...-
perspective: ...-
filter: ...这些都会触发新的包含块(containing block),让
position: fixed失效——UIkit 的 sticky 底层就是靠position: fixed实现的。我上次踩坑就是父级加了个
transform: translateZ(0)想做硬件加速,结果 sticky 直接凉了。解决办法很简单:要么删掉这些样式,要么把 sticky 元素提到更高层级(比如直接放
<body>下),或者用 JS 手动控制 sticky 的 behavior(效率更高):另外确认下你的
uk-sticky是加在<nav>上的,不是包在别的容器里——很多人是这么写的:<div uk-sticky><nav>...</nav></div>
这种结构也会出问题,因为 sticky 容器本身会被重新定位,导致内部 nav 定位错乱。
直接给 nav 加
uk-sticky就行,别套壳。uk-sticky-reset,这个类会让导航栏隐藏。这是它的默认行为,但很多时候我们并不需要这种效果。解决方法很简单,你可以通过CSS覆盖掉这个类的行为。比如加一段样式:
另外,如果你希望导航栏一直固定在顶部不消失,建议给
uk-sticky加个属性show-on-up,像这样:这个属性的意思是禁用“向上滚动时才显示”的效果,导航栏会始终保持可见。
最后提醒一下,别忘了检查你的UIkit版本。如果是v2版本,那它用的是
data-uk-sticky属性,跟v3的写法不一样,别走弯路了。