如何根据高度在较小的屏幕上滚动粘性菜单

时间:2016-07-23 22:30:37

标签: javascript jquery css3

我做了一个menu,在滚动时变得粘稠。 问题是在屏幕上有一个很小的高度(例如移动设备),菜单无法完全看到,因为它在某种程度上比高度长得多,如下图所示。
enter image description here

但是在较长的移动屏幕上,可以完全看到菜单 enter image description here

这是用于制作菜单并使其在滚动时粘滞的代码

的CSS

/* Remove margins and padding from the list, and add a black background color */
ul.topnav {
    list-style-type: none;
    margin:0 auto; /* pour centrer le menu */
    padding: 0;
    overflow:hidden;

    background-color: #FFF;
     text-align: center;
     width:1400px; /* pour centrer le menu */
     max-width:100%;
     max-width:100%;  
}

/* Float the list items side by side */
ul.topnav li {float: left;    }

/* Style the links inside the list items */
ul.topnav li a {
    display: inline-block;
    color: #0071a6;
    text-align: center;

    padding: 14px 16px;
    text-decoration: none;
    transition: 0.3s;
     font-family: 'Open Sans', sans-serif;
    font-size: 20px;
    transition: all .2s ease-in-out;
    width:185px; /* Pour centrer le menu */
}

/* Change background color of links on hover */
ul.topnav li a:hover {
    background-color: #0071a6; 
    color:#FFF;
    transform: scale(1.1);
    }

/* Hide the list item that contains the link that should open and close the topnav on small screens */
ul.topnav li.icon {display: none;}


/*
##############################################################################
Add media query
*/


@media screen and (max-width:768px) {
  ul.topnav li:not(:first-child) {display: none;}
  ul.topnav li.icon {
    float: right;
    display: inline-block;
  }

  ul.topnav li a {
      width:auto;  
  }

  ul.topnav {
      width:auto;
  }
}

/* The "responsive" class is added to the topnav with JavaScript when the user clicks on the icon. This class makes the topnav look good on small screens 

Normalement @media screen and (max-width:768px) 

*/
@media screen and (max-width:768px) {
  ul.topnav.responsive {position: relative;}
  ul.topnav.responsive li.icon {
    position: absolute;
    right: 0;
    top: 0;
  }
  ul.topnav.responsive li {
    float: none;
    display: inline;
  }
  ul.topnav.responsive li a {
    display: block;
    text-align: left;
  }

  ul.topnav li a {
      width:auto;  
  }


  ul.topnav {
      width:auto;
  }

}


/*

Pour le menu sticky
*/


.menu {

 }

.menu-padding {

    padding-top:0px;
}

.sticky {
    position:fixed;
    top:0;
    z-index:1;
    overflow:hidden;


}

.sticky ul.topnav {
    background-color:#0071a6;
    border-bottom: 1px solid #666;

    /*
    border: 1px solid #FFFFFF;
    */

}

.sticky ul.topnav li a {
    color:#FFF;
}

Javascript和Jquery

/* Toggle between adding and removing the "responsive" class to topnav when the user clicks on the icon */
function myFunction() {
    document.getElementsByClassName("topnav")[0].classList.toggle("responsive");
}

/*
Jquery to make the menu sticky on scroll
*/

$(document).ready(function () {

    var menu = $('.menu');
    var origOffsetY = menu.offset().top;

    function scroll() {
        if ($(window).scrollTop() >= origOffsetY) {
            $('.menu').addClass('sticky');
            $('.content').addClass('menu-padding');
        } else {
            $('.menu').removeClass('sticky');
            $('.content').removeClass('menu-padding');
        }


    }

    document.onscroll = scroll;

});

HTML

<div class="menu">

    <ul class="topnav">
  <li><a href="#home">HOME</a></li>
  <li><a href="#news">WHO WE ARE </a></li>
  <li><a href="#contact">WHAT WE DO</a></li>
  <li><a href="#about">BLOGS</a></li>
  <li><a href="#about">GET INVOLVED</a></li>
  <li><a href="#about">JOBS</a></li>
  <li><a href="#about">CONTACT US</a></li>
  <li class="icon">
    <a href="javascript:void(0);" onclick="myFunction()">&#9776;</a>
  </li>
</ul>

    </div>

问题: 如何使粘性菜单在屏幕上滚动,高度较小但是当它到达正常位置时,它将不再粘滞并被修复?

1 个答案:

答案 0 :(得分:1)

听起来您希望菜单本身在小屏幕上显示时可以滚动。

试试这个:

.menu {
  max-height:100vh;
  overflow-y:auto;
}

除非菜单大于屏幕,否则它不会做任何事情。或者,使用媒体查询来重新设计菜单的移动版本,该版本不会在一开始就被切断(在这种情况下,减少链接上的填充可能会这样做。)