How TO - Shrink Navigation Menu on Scroll
Learn how to resize a navigation bar on scroll with CSS and JavaScript.
How To Shrink Navbar on Scroll
Step 1) Add HTML:
Create a navigation bar:
Example
  <div id="navbar">
  <a href="#default" id="logo">CompanyLogo</a>
  
  <div id="navbar-right">
    <a class="active" href="#home">Home</a>
    
  <a href="#contact">Contact</a>
    <a href="#about">About</a>
  
  </div>
</div>
Step 2) Add CSS:
Style the navigation bar:
Example
  /* Create a sticky/fixed navbar */
#navbar {
  overflow: hidden;
  
  background-color: #f1f1f1;
  padding: 90px 10px; /* Large padding 
  which will shrink on scroll (using JS) */
  transition: 0.4s; /* Adds 
  a transition effect when the padding is decreased */
  position: 
  fixed; /* Sticky/fixed navbar */
  width: 100%;
  top: 0; /* 
  At the top */
  z-index: 99; 
}
/* Style the navbar links */
  #navbar a {
  
  float: left;
  color: black;
  text-align: center;
  
  padding: 12px;
  text-decoration: none;
  font-size: 18px; 
  
  line-height: 25px;
  border-radius: 4px;
}
/* Style the logo 
  */
#navbar 
  #logo {
  font-size: 35px;
  font-weight: bold;
  
  transition: 0.4s;
}
/* Links on mouse-over */
#navbar a:hover {
  
  background-color: #ddd;
  color: black;
}
/* Style the 
  active/current link */
#navbar 
  a.active {
  background-color: dodgerblue;
  color: white;
  }
/* Display some links to the right */
#navbar-right {
  float: right;
}
/* Add 
  responsiveness - on screens less than 580px wide, display the navbar 
  vertically instead of horizontally */
@media screen and (max-width: 580px) 
  {
  #navbar {
    padding: 20px 10px !important; /* Use 
  !important to make sure that JavaScript doesn't override the padding on small 
  screens */
  }
  #navbar a {
    float: 
  none;
    display: block;
    text-align: 
  left;
  }
  #navbar-right {
    float: none;
  
  }
}
Step 3) Add JavaScript:
Example
  // When the user scrolls down 80px from the top of the document, resize the 
  navbar's padding and the logo's font size
window.onscroll = function() {scrollFunction()};
  
function scrollFunction() {
  if (document.body.scrollTop > 80 || 
  document.documentElement.scrollTop > 80) {
    
  document.getElementById("navbar").style.padding = "30px 10px";
    
  document.getElementById("logo").style.fontSize = "25px";
  } else {
    
  document.getElementById("navbar").style.padding = "80px 10px";
    
  document.getElementById("logo").style.fontSize = "35px";
  }
}
Try it Yourself »

