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>
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>
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;
}
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');
}
}
And, lastly update style.css file
.darkNavBar {
background-color: #000000;
}
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)
Thank you! Really appreciate the shared JS! Works great!
Awesome, you're welcome.