Announcements
Loading page...

↩ Back to discussion list

Create a dynamic navbar

2 weeks ago ⏱ 2 min read 👁 4 views 📘 Tutorial

CSS HTML JAVASCRIPT Web Development

Dynamic Navbar System in HTML, CSS, and JavaScript

A dynamic navbar changes based on screen size, scroll position, active page section, or user interaction.

In this tutorial, you will build a responsive navbar with:

  • Desktop navigation links
  • Mobile hamburger menu
  • Smooth open/close animation
  • Active link highlighting
  • Scroll-based styling
  • Dropdown menu support

1. Project Structure

project-folder/
│
├── index.html
├── style.css
└── script.js

2. HTML Structure

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>Dynamic Navbar</title>
  <link rel="stylesheet" href="style.css" />
</head>
<body>

<header class="navbar" id="navbar">
  <div class="nav-container">

    <a href="#" class="logo">MySite</a>

    <button class="menu-toggle" id="menuToggle">
      <span></span>
      <span></span>
      <span></span>
    </button>

    <nav class="nav-menu" id="navMenu">
      <a href="#home" class="nav-link active">Home</a>
      <a href="#about" class="nav-link">About</a>
      <a href="#services" class="nav-link">Services</a>
      <a href="#contact" class="nav-link">Contact</a>
    </nav>

  </div>
</header>

<script src="script.js"></script>
</body>
</html>
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

body {
  font-family: Arial;
}

.navbar {
  position: fixed;
  top: 0;
  width: 100%;
  background: white;
  transition: 0.3s;
}

.navbar.scrolled {
  background: black;
}

.nav-container {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 20px;
}

.nav-menu {
  display: flex;
  gap: 20px;
}

.nav-link {
  text-decoration: none;
  color: black;
}

.menu-toggle {
  display: none;
}
const navbar = document.getElementById("navbar");
const menuToggle = document.getElementById("menuToggle");
const navMenu = document.getElementById("navMenu");

menuToggle.addEventListener("click", () => {
  navMenu.classList.toggle("open");
});

window.addEventListener("scroll", () => {
  if (window.scrollY > 50) {
    navbar.classList.add("scrolled");
  } else {
    navbar.classList.remove("scrolled");
  }
});
Loading preview...

5. Responsive Mobile Navbar

@media (max-width: 768px) {

  .menu-toggle {
    display: flex;
    flex-direction: column;
    gap: 5px;
  }

  .menu-toggle span {
    width: 25px;
    height: 3px;
    background: black;
  }

  .nav-menu {
    position: absolute;
    top: 70px;
    right: 20px;
    background: white;
    flex-direction: column;
    padding: 20px;
    display: none;
  }

  .nav-menu.open {
    display: flex;
  }
}

6. Features You Can Add

  • Sticky navbar
  • Auto-hide on scroll down
  • Search bar
  • User profile dropdown
  • Dark mode toggle
  • Animated underline
  • Mega menus
  • Scrollspy system
  • Dynamic API-loaded links

7. Final Notes

You now have a fully dynamic responsive navbar system using:

  • HTML
  • CSS
  • JavaScript

This structure is scalable for:

  • portfolios
  • SaaS websites
  • dashboards
  • blogs
  • admin panels
  • ecommerce stores

Happy coding.

Was this post helpful?

Log in to vote on tutorial helpfulness.

by @codewithstephen
👍 0 ❤️ 0 😊 0 👎 0 ☹️ 0

0 comments

Please log in to comment.