How to create: shrink navigation menu on scroll

Learn how to adjust the size of the navigation bar using CSS and JavaScript on scroll.

Try it yourself

How to shrink navigation bar on scroll

Step 1 - Add HTML:

Create navigation bar:

<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:

Set navigation bar style:

/* Create a sticky/fixed navigation bar */
#navbar {
  overflow: hidden;
  background-color: #f1f1f1;
  padding: 90px 10px; /* Larger padding, which will shrink on scroll (using JS) */
  transition: 0.4s; /* Add transition effect when padding is reduced */
  position: fixed; /* Sticky/fixed navigation bar */
  width: 100%;
  top: 0; /* At the top */
  z-index: 99;
}
/* Set the style of navigation bar links */
#navbar a {
  float: left;
  color: black;
  text-align: center;
  padding: 12px;
  text-decoration: none;
  font-size: 18px;
  line-height: 25px;
  border-radius: 4px;
}
/* Set the style of the logo */
#navbar #logo {
  font-size: 35px;
  font-weight: bold;
  transition: 0.4s;
}
/* Set the style for the link when the mouse hovers over it */
#navbar a:hover {
  background-color: #ddd;
  color: black;
}
/* Set the style for the active/current link */
#navbar a.active {
  background-color: dodgerblue;
  color: white;
}
/* Display some links on the right */
#navbar-right {
  float: right;
}
/* Add responsiveness - on screens narrower than 580 pixels wide, display the navigation bar vertically instead of horizontally */
@media screen and (max-width: 580px) {
  #navbar {
    padding: 20px 10px !important; /* Use !important to ensure that JavaScript does not override the padding on small screens */
  }
  #navbar a {
    float: none;
    display: block;
    text-align: left;
  }
  #navbar-right {
    float: none;
  }
}

// When the user scrolls down 80 pixels from the top of the document, adjust the navigation bar'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