【问题标题】:sticky navbar snaps abruptly, causes glitch粘性导航栏突然卡住,导致故障
【发布时间】:2018-10-05 00:57:54
【问题描述】:

这几天我一直在努力解决这个问题。我认为当我在 iPhone 上打开我的网站时,粘性导航栏卡在错误的位置这一事实甚至会导致故障。我会附上图片和代码和网址。

网址:www.developmt.com 如果您向下滚动到导航栏应位于页面顶部的位置,它会快速向下跳转。我试过在内容上添加填充+粘性,但它没有修复它。

另外,当我在移动设备中打开导航栏时,导航栏会停留在错误的高度,并且不会等到我到达它.. here is the bug in mobile

      window.onscroll = function() {myFunction()};

        var navbar = document.getElementById("navbar");
        var sticky = navbar.offsetTop;

        function myFunction() {
          if (window.pageYOffset >= sticky) {
            navbar.classList.add("sticky")
          } else {
            navbar.classList.remove("sticky");
          }
        }
html, body{
    overflow-x:hidden;
}

.banner{
    position:relative;
    background: url('bannerimage.png') no-repeat center;
    width:100%;
    height:auto;
    /* object-fit: fit;
    background-size: fit; */


}


.bannerlogo{  
    width:350px;
    display:block;
    margin-left:auto;
    margin-right:auto;
    padding-top:155px;
    margin-bottom:153px;


}
#navbar{
    z-index: 1000;

}
.nav{
    height:70px;
    overflow:hidden;
    animation: slideFromRight 2s;

}


.sticky {
    position: fixed;
    top: 0;
    width: 100%;
    background:rgba(0, 0, 0, .7);
}
/* .sticky nav{
    margin-top:0;
} */


.sticky + #content {
    padding-top: 70px;
}
<div class="header">
    <section class="banner mx-0">
        <img class="bannerlogo" data-aos="fade-down" src="developmtlogo.png" alt="Develop MT logo: Design, Develop, Exceed. Develop M|T">
             <div id="navbar">
                   <ul class="nav justify-content-center">
                       <li class="nav-item">
                            <a class="nav-link home" href="#"><i class="fas fa-home fa-lg"></i></a>
                       </li>
                       <li class="nav-item">
                            <a class="nav-link services hori-nav" href="#">Services</a>
                       </li>
                       <li class="nav-item">
                            <a class="nav-link pricing hori-nav" href="#">Pricing</a>
                       </li>

                       <li class="nav-item">
                            <a class="nav-link portfolio hori-nav" href="#">Portfolio</a>
                       </li>
                            <a><i id="hori-button" class="fas fa-ellipsis-h text-center"></i></a>

                       <li class="nav-item">
                            <a class="nav-link about hori-nav" href="#">About</a>
                       </li>

                       <li class="nav-item">
                            <a class="nav-link contact hori-nav" href="#">Contact</a>
                       </li>  
                   </ul>                                        
              </div>
        </section>
    </div>

    <section id="content">
        <div class="container">
            <div class="row">
                <div class="col-12">
                    <h1 class="servicestitle text-center">Services</h1>
                    <hr class="divider">
                </div>
            </div>


            <div class="row justify-content-center first" >
                <img class="boxelement" data-aos="flip-right" data-aos-duration="500"
                data-aos-easing="ease-in-out" src="webdesign.png" alt="">
                <img class="boxelement"data-aos="flip-right" data-aos-duration="500"
                data-aos-easing="ease-in-out" src="webdev.png" alt="">
                <img class="boxelement boxelement3" data-aos="flip-right" data-aos-duration="500"
                data-aos-easing="ease-in-out"src="graphicdesign.png" alt="">
            </div>
        </div>
  </section>

我删除了大部分 html,以便在 SO 上更容易查看

如果我遗漏了什么,请告诉我。任何帮助将是一个很大的帮助!谢谢你。

【问题讨论】:

    标签: javascript html css navbar


    【解决方案1】:

    由于您使用position:fixed,因此其他元素不会考虑导航栏高度,并且为其设置边距也不会影响其他元素。

    当您的导航栏切换到粘性模式时,您还应该在包含服务标题的列中添加margin-top:70px(导航栏高度)。

           <div class="row">
                <div class="col-12" id="service-wrapper">
                    <h1 class="servicestitle text-center">Services</h1>
                    <hr class="divider">
                </div>
            </div>
    

    js代码:

        window.onscroll = function() {myFunction()};
        var navbar = document.getElementById("navbar");
        var serviceWrapper = document.getElementById("service-wrapper")
        var sticky = navbar.offsetTop;
    
        function myFunction() {
          if (window.pageYOffset >= sticky) {
            navbar.classList.add("sticky");
            serviceWrapper.classList.add("service-stick-mode");
          } else {
            navbar.classList.remove("sticky");
            serviceWrapper.classList.remove("service-stick-mode");
          }
        }
    

    css 类:

    .service-stick-mode{
      margin-top:70px;
     }
    

    【讨论】:

    • 所以我不应该使用 position:fixed; 吗?
    • 不用了。但也要注意,它的高度将不再影响它的下方元素。这就是为什么会发生 70px 故障的原因。只需按照说明将 margin-top 添加到导航栏下方的列。
    猜你喜欢
    • 1970-01-01
    • 2018-12-08
    • 1970-01-01
    • 2021-06-17
    • 1970-01-01
    • 1970-01-01
    • 2018-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多