【发布时间】:2022-04-08 00:17:19
【问题描述】:
我目前正在构建一个直接位于页面内容中的粘性导航栏。内容的每一侧都有一点填充。
当我滚动出视口时,我的 jQuery 函数使我的导航栏变得粘滞。由于它的宽度为100%,因此它的大小变化确实不太可能,这让用户感觉有些事情没有经过深思熟虑。
为了让它看起来更好,我尝试使用transition: width .2s,但宽度没有任何成功。我认为这并不容易,因为初始宽度已经是100%...
这个想法是让宽度在两个方向上变化,让它看起来更好一点:
(function($) {
$(document).ready(function() {
let nav = $('#nav');
let navOffsetTop = nav.offset().top;
$(window).scroll(function() {
if ($(this).scrollTop() >= navOffsetTop) {
nav.addClass('sticky');
} else {
nav.removeClass('sticky');
}
});
});
})(jQuery);
#page {
width: 100%;
padding-left: 50px;
padding-right: 50px;
box-sizing: border-box;
}
#container {
background: green;
width: 100%;
height: 1500px;
}
#nav {
height: 60px;
width: 100%;
background-color: red;
margin-bottom: 30px;
z-index: 1;
transition: width .2s ease;
}
#nav.sticky {
position: fixed;
top: 0;
left: 0;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="page">
<h1>Hello</h1>
<div id="nav"></div>
<div id="container">
</div>
</div>
【问题讨论】:
-
如果你不想让你的导航栏全宽,你可以使用 "position:sticky;"在“位置:固定;”以外的“#nav.sticky”元素上
-
这就是我在示例中所做的 ;)