DEV Community

Cover image for How to Change Bootstrap 5 navigation bar styling on scroll without using jQuery
Sampurna Chapagain
Sampurna Chapagain

Posted on • Edited on

How to Change Bootstrap 5 navigation bar styling on scroll without using jQuery

Suppose you want to change the background color of your bootstrap 5 navigation bar on scroll and you do not want to use jQuery for this behaviour . As the official documentation of Bootstrap says

Bootstrap 5 is designed to be used without jQuery, but it’s still possible to use our components with jQuery.

In this blog post, we will have a look about how can we achieve this behavior without the use of jQuery .

First, let us add a bootstrap 5 CDN in index.html file . Also let us import style.css file which is located inside stylesheets folder .

HTML Code

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>Navigation bar Scroll</title>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel="stylesheet" href="stylesheets/style.css">
        <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet">
        <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>
    </head>
</html>
Enter fullscreen mode Exit fullscreen mode

Then, inside the body tag add a navigation menu and three different div for home, about and services .

HTML Code


<body>
  <nav class="navbar navbar-expand-sm fixed-top">
    <div class="container">
      <div class="collapse navbar-collapse" id="collapsibleNavbar">
        <ul class="navbar-nav ms-auto">
          <li class="nav-item">
            <a class="nav-link active" href="#">Home</a>
          </li>
          <li class="nav-item">
            <a class="nav-link" href="#about">About</a>
          </li>
          <li class="nav-item">
            <a class="nav-link" href="#services">Services</a>
          </li>
        </ul>
      </div>
    </div>
  </nav>

  <div id="home">
  </div>

  <div id="about">
  </div>

  <div id="services">
  </div>
 </body>
<script src="script.js"></script>

Enter fullscreen mode Exit fullscreen mode

Also, we have added a script tag to call script.js file after loading the HTML content . We will add logic to script.js file later .

Now, let us go to style.css file and add some styling in order to differentiate three sections: home, about and services .

CSS

#home {
    background-color: #00ffff;
}

#about {
    background-color: #0000ff;
}

#services {
    background-color: #a52a2a;
}
#home, #about, #services {
    height: 100vh;
}
Enter fullscreen mode Exit fullscreen mode

Here you can see three sections occupying their respective heights with different background colors.

Now comes the interesting part !

We will now add logic to script.js file in order to change our nav bar styling on scroll .

JavaScript

const header = document.querySelector('.navbar');

window.onscroll = function() {
    var top = window.scrollY;
    console.log(top);
    if(top >= 100) {
        header.classList.add('darkNavBar');
    }
    else {
        header.classList.remove('darkNavBar');
    }
}
Enter fullscreen mode Exit fullscreen mode

And, lastly update style.css file

.darkNavBar {
  background-color: #000000;
}
Enter fullscreen mode Exit fullscreen mode

This is how our navbar looks !

Let us understand what the above javascript code does .

  • First, we have used document.querySelector to return the first Element within the document that matches the specified selector, in this case it's .navbar .

  • Then we have added a window.onScrollY function which basically checks if the number of pixels that the document is currently scrolled vertically is greater than or equal to 100 .

  • It it's true it adds a new class called darkNavBar to the querySelector i.e. .navbar .

Conclusion

This is how you can change the styling of navigation bar on scroll using JavaScript . I hope you enjoyed this blog post . Feel free to share your thoughts on this . You can find me on Twitter for daily contents on Web development .

Top comments (2)

Collapse
 
tdvr profile image
tdvr

Thank you! Really appreciate the shared JS! Works great!

Collapse
 
sampurna profile image
Sampurna Chapagain

Awesome, you're welcome.