Close Menu

    Subscribe to Updates

    Get the latest creative news from FooBar about art, design and business.

    What's Hot

    How to make Happy birthday cake Animation using HTML & CSS

    29 May 2025

    How to create Toast Catcher Game using HTML CSS and JS

    26 May 2025

    How to create Animated No Chill Login form using HTML CSS and JS

    22 May 2025
    Facebook X (Twitter) Instagram YouTube Telegram Threads
    Coding StellaCoding Stella
    • Home
    • Blog
    • HTML & CSS
      • Login Form
    • JavaScript
    • Hire us!
    Coding StellaCoding Stella
    Home - JavaScript - How to make Responsive Navigation Menu Bar using HTML CSS & JS
    JavaScript

    How to make Responsive Navigation Menu Bar using HTML CSS & JS

    Coding StellaBy Coding Stella18 August 2024No Comments6 Mins Read
    Share Facebook Twitter Pinterest LinkedIn Tumblr Reddit Email WhatsApp Copy Link

    Let’s create a Responsive Navigation Menu Bar using HTML, CSS, and JavaScript. This project will feature a navigation menu that adapts to different screen sizes, providing a seamless experience across devices.

    We’ll use HTML to structure the menu, CSS to style it and make it responsive, and JavaScript to add interactivity, such as toggling the menu on smaller screens.

    Let’s get started on building the Responsive Navigation Menu Bar. Whether you’re a beginner or an experienced developer, this project offers a practical way to enhance your web development skills and create a user-friendly navigation system. Let’s ensure smooth navigation across all devices!

    HTML :

    This HTML code creates a responsive navigation menu for a website called “Coding Stella.” It includes links for Home, About, Portfolio, Services, and Contact sections. The menu is mobile-friendly, featuring a collapsible sidebar that can be opened with a menu icon and closed with a close icon. It also has a dark/light mode toggle and a search box. External stylesheets and icon libraries from Boxicons are used to style the navigation elements, while JavaScript (referenced in the script.js file) likely handles the interactive behavior of the menu, dark/light mode, and search functionality.

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link rel="stylesheet" href="./style.css">
             
        <!-- ===== Boxicons CSS ===== -->
        <link href='https://unpkg.com/boxicons@2.1.1/css/boxicons.min.css' rel='stylesheet'>
    
        <title>Responsive navigation menu bar</title>
    </head>
    <body>
      <nav>
        <div class="nav-bar">
          <i class="bx bx-menu sidebarOpen"></i>
          <span class="logo navLogo"><a href="#">Coding Stella</a></span>
    
          <div class="menu">
            <div class="logo-toggle">
              <span class="logo"><a href="#">Coding Stella</a></span>
              <i class="bx bx-x siderbarClose"></i>
            </div>
    
            <ul class="nav-links">
              <li><a href="#">Home</a></li>
              <li><a href="#">About</a></li>
              <li><a href="#">Portfolio</a></li>
              <li><a href="#">Services</a></li>
              <li><a href="#">Contact</a></li>
            </ul>
          </div>
    
          <div class="darkLight-searchBox">
            <div class="dark-light">
              <i class="bx bx-moon moon"></i>
              <i class="bx bx-sun sun"></i>
            </div>
    
            <div class="searchBox">
              <div class="searchToggle">
                <i class="bx bx-x cancel"></i>
                <i class="bx bx-search search"></i>
              </div>
    
              <div class="search-field">
                <input type="text" placeholder="Search..." />
                <i class="bx bx-search"></i>
              </div>
            </div>
          </div>
        </div>
      </nav>
    
      <script src="script.js"></script>
    </body>
    </html>

    CSS :

    This CSS code styles a responsive navigation bar for a website, with a focus on dark and light modes, and mobile adaptability. It imports the “Poppins” font from Google Fonts and applies a consistent box model and smooth transitions to all elements. The code defines custom color variables (e.g., --body-color, --nav-color) for easy theme management, and switches to a darker color scheme when the .dark class is applied to the body. The navigation bar is fixed at the top and includes styling for menu icons, links, and interactive elements like a dark/light mode toggle and a search box. On smaller screens (below 790px width), the navigation transforms into a sidebar menu that slides in from the left, with responsive adjustments for link display and menu icons.

    @import url("https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap");
    
    * {
      margin: 0;
      padding: 0;
      box-sizing: border-box;
      font-family: "Poppins", sans-serif;
      transition: all 0.4s ease;
    }
    
    /*  Colours  */
    :root {
      --body-color: #e4e9f7;
      --nav-color: #4070f4;
      --side-nav: #010718;
      --text-color: #fff;
      --search-bar: #f2f2f2;
      --search-text: #010718;
    }
    
    body {
      height: 100vh;
      background-color: var(--body-color);
    }
    
    body.dark {
      --body-color: #18191a;
      --nav-color: #242526;
      --side-nav: #242526;
      --text-color: #ccc;
      --search-bar: #242526;
    }
    
    nav {
      position: fixed;
      top: 0;
      left: 0;
      height: 70px;
      width: 100%;
      background-color: var(--nav-color);
      z-index: 100;
    }
    
    body.dark nav {
      border: 1px solid #393838;
    }
    
    nav .nav-bar {
      position: relative;
      height: 100%;
      max-width: 1000px;
      width: 100%;
      background-color: var(--nav-color);
      margin: 0 auto;
      padding: 0 30px;
      display: flex;
      align-items: center;
      justify-content: space-between;
    }
    
    nav .nav-bar .sidebarOpen {
      color: var(--text-color);
      font-size: 25px;
      padding: 5px;
      cursor: pointer;
      display: none;
    }
    
    nav .nav-bar .logo a {
      font-size: 25px;
      font-weight: 500;
      color: var(--text-color);
      text-decoration: none;
    }
    
    .menu .logo-toggle {
      display: none;
    }
    
    .nav-bar .nav-links {
      display: flex;
      align-items: center;
    }
    
    .nav-bar .nav-links li {
      margin: 0 5px;
      list-style: none;
    }
    
    .nav-links li a {
      position: relative;
      font-size: 17px;
      font-weight: 400;
      color: var(--text-color);
      text-decoration: none;
      padding: 10px;
    }
    
    .nav-links li a::before {
      content: "";
      position: absolute;
      left: 50%;
      bottom: 0;
      transform: translateX(-50%);
      height: 6px;
      width: 6px;
      border-radius: 50%;
      background-color: var(--text-color);
      opacity: 0;
      transition: all 0.3s ease;
    }
    
    .nav-links li:hover a::before {
      opacity: 1;
    }
    
    .nav-bar .darkLight-searchBox {
      display: flex;
      align-items: center;
    }
    
    .darkLight-searchBox .dark-light,
    .darkLight-searchBox .searchToggle {
      height: 40px;
      width: 40px;
      display: flex;
      align-items: center;
      justify-content: center;
      margin: 0 5px;
    }
    
    .dark-light i,
    .searchToggle i {
      position: absolute;
      color: var(--text-color);
      font-size: 22px;
      cursor: pointer;
      transition: all 0.3s ease;
    }
    
    .dark-light i.sun {
      opacity: 0;
      pointer-events: none;
    }
    
    .dark-light.active i.sun {
      opacity: 1;
      pointer-events: auto;
    }
    
    .dark-light.active i.moon {
      opacity: 0;
      pointer-events: none;
    }
    
    .searchToggle i.cancel {
      opacity: 0;
      pointer-events: none;
    }
    
    .searchToggle.active i.cancel {
      opacity: 1;
      pointer-events: auto;
    }
    
    .searchToggle.active i.search {
      opacity: 0;
      pointer-events: none;
    }
    
    .searchBox {
      position: relative;
    }
    
    .searchBox .search-field {
      position: absolute;
      bottom: -85px;
      right: 5px;
      height: 50px;
      width: 300px;
      display: flex;
      align-items: center;
      background-color: var(--nav-color);
      padding: 3px;
      border-radius: 6px;
      box-shadow: 0 5px 5px rgba(0, 0, 0, 0.1);
      opacity: 0;
      pointer-events: none;
      transition: all 0.3s ease;
    }
    
    .searchToggle.active ~ .search-field {
      bottom: -74px;
      opacity: 1;
      pointer-events: auto;
    }
    
    .search-field::before {
      content: "";
      position: absolute;
      right: 14px;
      top: -4px;
      height: 12px;
      width: 12px;
      background-color: var(--nav-color);
      transform: rotate(-45deg);
      z-index: -1;
    }
    
    .search-field input {
      height: 100%;
      width: 100%;
      padding: 0 45px 0 15px;
      outline: none;
      border: none;
      border-radius: 4px;
      font-size: 14px;
      font-weight: 400;
      color: var(--search-text);
      background-color: var(--search-bar);
    }
    
    body.dark .search-field input {
      color: var(--text-color);
    }
    
    .search-field i {
      position: absolute;
      color: var(--nav-color);
      right: 15px;
      font-size: 22px;
      cursor: pointer;
    }
    
    body.dark .search-field i {
      color: var(--text-color);
    }
    
    @media (max-width: 790px) {
      nav .nav-bar .sidebarOpen {
        display: block;
      }
    
      .menu {
        position: fixed;
        height: 100%;
        width: 320px;
        left: -100%;
        top: 0;
        padding: 20px;
        background-color: var(--side-nav);
        z-index: 100;
        transition: all 0.4s ease;
      }
    
      nav.active .menu {
        left: -0%;
      }
    
      nav.active .nav-bar .navLogo a {
        opacity: 0;
        transition: all 0.3s ease;
      }
    
      .menu .logo-toggle {
        display: block;
        width: 100%;
        display: flex;
        align-items: center;
        justify-content: space-between;
      }
    
      .logo-toggle .siderbarClose {
        color: var(--text-color);
        font-size: 24px;
        cursor: pointer;
      }
    
      .nav-bar .nav-links {
        flex-direction: column;
        padding-top: 30px;
      }
    
      .nav-links li a {
        display: block;
        margin-top: 20px;
      }
    }

    JavaScript :

    This JavaScript code toggles dark/light mode, shows/hides the search box, and manages the sidebar menu. It saves the user’s theme preference in localStorage to persist after page reloads. The sidebar is opened with a button click and closed by clicking outside the menu area.

    const body = document.querySelector("body"),
          nav = document.querySelector("nav"),
          modeToggle = document.querySelector(".dark-light"),
          searchToggle = document.querySelector(".searchToggle"),
          sidebarOpen = document.querySelector(".sidebarOpen"),
          siderbarClose = document.querySelector(".siderbarClose");
    
    let getMode = localStorage.getItem("mode");
    
    if (getMode && getMode === "dark-mode") {
      body.classList.add("dark");
    }
    
    // JS code to toggle dark and light mode
    modeToggle.addEventListener("click", () => {
      modeToggle.classList.toggle("active");
      body.classList.toggle("dark");
    
      // JS code to keep user selected mode even after page refresh or file reopen
      if (!body.classList.contains("dark")) {
        localStorage.setItem("mode", "light-mode");
      } else {
        localStorage.setItem("mode", "dark-mode");
      }
    });
    
    // JS code to toggle search box
    searchToggle.addEventListener("click", () => {
      searchToggle.classList.toggle("active");
    });
    
    // JS code to toggle sidebar
    sidebarOpen.addEventListener("click", () => {
      nav.classList.add("active");
    });
    
    body.addEventListener("click", (e) => {
      let clickedElm = e.target;
      if (!clickedElm.classList.contains("sidebarOpen") && !clickedElm.classList.contains("menu")) {
        nav.classList.remove("active");
      }
    });

    In conclusion, creating a Responsive Navigation Menu Bar using HTML, CSS, and JavaScript has been a valuable and educational project. By combining these technologies, we’ve built a navigation system that adapts to various screen sizes, enhancing user experience across devices.

    If your project has problems, don’t worry. Just click to download the source code and face your coding challenges with excitement. Have fun coding!

    Share. Copy Link Twitter Facebook LinkedIn Email WhatsApp
    Previous ArticleHow to make Dynamic Glassmorphism Login Form using HTML & CSS
    Next Article How to make Parallax depth cards using HTML CSS & JS
    Coding Stella
    • Website

    Related Posts

    HTML & CSS

    How to make Happy birthday cake Animation using HTML & CSS

    29 May 2025
    JavaScript

    How to create Toast Catcher Game using HTML CSS and JS

    26 May 2025
    JavaScript

    How to create Animated No Chill Login form using HTML CSS and JS

    22 May 2025
    Add A Comment
    Leave A Reply Cancel Reply

    Trending Post

    Master Frontend in 100 Days Ebook

    2 March 202419K Views

    How to make Modern Login Form using HTML & CSS | Glassmorphism

    11 January 202416K Views

    How to make I love you Animation in HTML CSS & JavaScript

    14 February 202414K Views

    How to make Valentine’s Day Card using HTML & CSS

    13 February 202412K Views
    Follow Us
    • Instagram
    • Facebook
    • YouTube
    • Twitter
    ads
    Featured Post

    How to make Hourglass Preloader using HTML & CSS

    9 April 2025

    How to make Glassmorphism Login Form with Various Theme in HTML CSS & JavaScript

    12 January 2024

    How to make Music Player with Slider | Swiper JS using HTML CSS & JavaScript

    21 May 2024

    HTML Cheat Sheet | Mastering HTML : Your Go-To Cheat Sheet

    31 January 2024
    Latest Post

    How to make Happy birthday cake Animation using HTML & CSS

    29 May 2025

    How to create Toast Catcher Game using HTML CSS and JS

    26 May 2025

    How to create Animated No Chill Login form using HTML CSS and JS

    22 May 2025

    How to make Social media icons hover effect using HTML & CSS

    14 May 2025
    Facebook X (Twitter) Instagram YouTube
    • About Us
    • Privacy Policy
    • Return and Refund Policy
    • Terms and Conditions
    • Contact Us
    • Buy me a coffee
    © 2025 Coding Stella. Made with 💙 by @coding.stella

    Type above and press Enter to search. Press Esc to cancel.

    Ad Blocker Enabled!
    Ad Blocker Enabled!
    Looks like you're using an ad blocker. We rely on advertising to help fund our site.
    Okay! I understood