How to make a sticky Navigation Bar | HTML, CSS & JS

Viewed 112

I would like to ask how can I make my existing navbar a sticky one?

I've tried adding in the Javascript..But the alignments seem to be off. i am taking reference from https://codingartistweb.com/2021/12/responsive-navigation-bar-html-css-js/#comment-4063 and also https://codingartistweb.com/2020/10/sticky-navbar-html-css-and-javascript-tutorial/.

document.addEventListener('DOMContentLoaded', function(){
    var nav = document.getElementById("navbar");
    var current_pos = nav.offsetTop;
    window.onscroll = function(){
        var window_pos = document.documentElement.scrollTop;
        if(window_pos>=current_pos){
            nav.classList.add("sticky");
        }
        else{
            nav.classList.remove("sticky");
        }
    }
} )
const navToggler = document.querySelector(".nav-toggler");
const navMenu = document.querySelector(".site-navbar ul");
const navLinks = document.querySelectorAll(".site-navbar a");

allEventListners();

function allEventListners() {

  navToggler.addEventListener("click", togglerClick);
  navLinks.forEach((elem) => elem.addEventListener("click", navLinkClick));
}

// togglerClick function
function togglerClick() {
  navToggler.classList.toggle("toggler-open");
  navMenu.classList.toggle("open");
}

// navLinkClick function
function navLinkClick() {
  if (navMenu.classList.contains("open")) {
    navToggler.click();
  }
}
/* Nav Bar */
.sticky {
  width: 100%;
  max-width: 1440px;
  margin: 0 auto;
  padding: 0 15px;
  background: linear-gradient(30deg, #000000, #69b962);
  position: fixed;
  z-index: 99;
  top: 0;
}
.sticky a {
  color: white;
}
/*Styling Buttons*/
.login-button {
  background-color: transparent;
  margin-left: 2vw;
  font-size: 1rem;
  cursor: pointer;
}
.login-button:hover {
  color: #131418;
  background-color: #063b0a;
  transition: all ease-in-out 350ms;
}
.join-button {
  color: #131418;
  background-color: #1b878f;
  font-size: 1rem;
  cursor: pointer;
}
.join-button:hover {
  color: #f2f5f7;
  background-color: transparent;
}
/* default css start */
.container {
  width: 100%;
  max-width: 1440px;
  margin: 0 auto;
  padding: 0 15px;
  
}

/* navbar regular css start */
.navbar-area {
  background: linear-gradient(30deg, #000000, #69b962);
}
.site-navbar {
  display: flex;
  justify-content: space-between;
  align-items: center;
}
a.site-logo {
  font-size: 26px;
  font-weight: 800;
  text-transform: uppercase;
  color: #fff;
  text-decoration: none;
}
.site-navbar ul {
  margin: 0;
  padding: 0;
  list-style: none;
  display: flex;
}
.site-navbar ul li a {
  color: #fff;
  padding: 20px;
  display: block;
  text-decoration: none;
  text-transform: uppercase;
}
.site-navbar ul li a:hover {
  background: rgba(255, 255, 255, 0.1);
}

/* nav-toggler css start */
.nav-toggler {
  border: 3px solid #fff;
  padding: 5px;
  background-color: transparent;
  cursor: pointer;
  height: 39px;
  display: none;
}
.nav-toggler span,
.nav-toggler span:before,
.nav-toggler span:after {
  width: 28px;
  height: 3px;
  background-color: #fff;
  display: block;
  transition: 0.3s;
  position: relative;
  z-index: 99;
}
.nav-toggler span:before {
  content: "";
  transform: translateY(-9px);
}
.nav-toggler span:after {
  content: "";
  transform: translateY(6px);
}
.nav-toggler.toggler-open span {
  background-color: transparent;
}
.nav-toggler.toggler-open span:before {
  transform: translateY(0px) rotate(45deg);
}
.nav-toggler.toggler-open span:after {
  transform: translateY(-3px) rotate(-45deg);
}

/* intro-area css start */
.intro-area {
  height: calc(100vh - 61px);
  display: flex;
  align-items: center;
  text-align: center;
  color: #fff;
}
.intro-area h2 {
  font-size: 50px;
  font-weight: 300;
  line-height: 50px;
  margin-bottom: 25px;
}
.intro-area p {
  font-size: 18px;
}

/* mobile breakpoint start */
@media screen and (max-width: 767px) {
  .container {
    max-width: 720px;
  }
  /* navbar css for mobile start */
  .nav-toggler {
    display: block;
  }
  .site-navbar {
    min-height: 60px;
  }
  .site-navbar ul {
    position: absolute;
    width: 100%;
    height: calc(100vh - 60px);
    left: 0;
    top: 60px;
    flex-direction: column;
    align-items: center;
    border-top: 1px solid #444;
    background-color: rgba(0, 0, 0, 0.75);
    max-height: 0;
    overflow: hidden;
    transition: 0.3s;
  }
  .site-navbar ul li {
    width: 100%;
    text-align: center;
  }
  .site-navbar ul li a {
    padding: 25px;
  }
  .site-navbar ul li a:hover {
    background-color: rgba(255, 255, 255, 0.1);
  }
  .site-navbar ul.open {
    max-height: 100vh;
    overflow: visible;
  }
  .intro-area h2 {
    font-size: 36px;
    margin-bottom: 15px;
  }
}
<!-- site-navbar start -->
    <div class="navbar-area">
        <div class="container">
            <nav class="site-navbar" id="navbar">
                <!-- site logo -->
                <a href="index.html">
                    <img src="images/org_logo.png" alt="logo" width="50" height="44" />
                </a>
                <!-- site menu/nav -->
                <ul>
                    <li><a href="index.html">Home</a></li>
                    <li><a href="RaceInfo.html">Race Information</a></li>
                    <li><a href="FAQ.html">FAQ</a></li>
                    <li><a href="ContactUs.html">Contact Us</a></li>
                    <li class="login-button "><a href="MyAcct.html">My Account</a></li>
                    <li class="join-button"><a href="register.html">Register</a></li>
                </ul>

                <!-- nav-toggler for mobile version only -->
                <button class="nav-toggler">
                    <span></span>
                </button>
            </nav>
        </div>
    </div>

0 Answers
Related