skip to Main Content

I have been trying to make this navigation bar usable for mobile devices, I have tried multiple method by watching youtube using @media or hamburger method, but none of them seem to work for this, Unless I rewrite the html to match how they use it.

This is my original code

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Waverly Farm: Home</title>
        <link href="style.css" rel="stylesheet"/>
    </head>
    <body>
        <header class = "header">
            <div class = "logo">Waverely Farm</div>
            <nav class = "navbar">
                <a href ="index.html">Home</a>
                <a href ="about_us.html">About Us</a>
                <a href ="services.html">Services</a>
                <a href ="shop.html">Shop</a>
                <a href ="contactus.html">Contact Us</a>
            </nav>
        </header>
    </body>
</html>

I have tried adding @media but I am not sure how to use it for this type of navigation bar


* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
    font-family: "Poppins", sans-serif;
}

.header{
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    padding: 20px 100px;
    background-color: aquamarine;
    display:flex;
    justify-content: space-between;
    align-items: center;
    z-index: 100;
}
.logo{
    font-size: 32px;
    color: #fff;
    text-decoration: none;
    font-weight: 700;
}
.navbar a{
    position: relative;
    font-size: 18px;
    color: #fff;
    font-weight: 400;
    text-decoration: none;
    margin-left: 40px;
}

.navbar a::before{
    content:'';
    position: absolute;
    top: 100%;
    left: 0;
    width: 0;
    height: 2px;
    background: #fff;
    transition: .3s;
}

.navbar a:hover::before{
    width: 100%;
}```

2

Answers


  1. document.querySelector(".mobile-menu-icon").addEventListener("click", function () {
        var navbar = document.querySelector(".navbar");
        var header = document.querySelector(".header");
    
        if (navbar.style.display === "flex") {
            navbar.style.display = "none";
            header.classList.remove("mobile-menu-open");
        } else {
            navbar.style.display = "flex";
            header.classList.add("mobile-menu-open");
        }
    });
    * {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
        font-family: "Poppins", sans-serif;
    }
    
    .header {
        position: fixed;
        top: 0;
        left: 0;
        width: 100%;
        padding: 20px 100px;
        background-color: aquamarine;
        display: flex;
        justify-content: space-between;
        align-items: center;
        z-index: 100;
    }
    
    .logo {
        font-size: 32px;
        color: #fff;
        text-decoration: none;
        font-weight: 700;
    }
    
    .navbar {
        display: flex;
    }
    
    .navbar a {
        font-size: 18px;
        color: #fff;
        font-weight: 400;
        text-decoration: none;
        margin-left: 40px;
    }
    
    .mobile-menu-icon {
        display: none;
        flex-direction: column;
        cursor: pointer;
    }
    
    .bar {
        width: 25px;
        height: 3px;
        background: #fff;
        margin: 4px 0;
    }
    
    @media (max-width: 768px) {
        .navbar {
            display: none;
            flex-direction: column;
            position: absolute;
            top: 60px;
            left: 0;
            background: aquamarine;
            width: 100%;
            text-align: center;
        }
    
        .navbar a {
            margin: 10px 0;
        }
    
        .mobile-menu-icon {
            display: flex;
        }
    }
    
    .header.mobile-menu-open .navbar {
        display: flex;
    }
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Waverly Farm: Home</title>
    </head>
    <body>
        <header class="header">
            <div class="logo">Waverely Farm</div>
            <nav class="navbar">
                <a href="index.html">Home</a>
                <a href="about_us.html">About Us</a>
                <a href="services.html">Services</a>
                <a href="shop.html">Shop</a>
                <a href="contactus.html">Contact Us</a>
            </nav>
            <div class="mobile-menu-icon">
                <div class="bar"></div>
                <div class="bar"></div>
                <div class="bar"></div>
            </div>
        </header>
    </body>
    </html>
    Login or Signup to reply.
  2. I would consider using a CSS framework like Bootstrap:

    Add this to your page head

    <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>

    then do something like this:

    <nav class="navbar navbar-expand-sm bg-light">
      <div class="container-fluid">
        <ul class="navbar-nav">
          <li class="nav-item">
            <a class="nav-link" href="#">Link 1</a>
          </li>
          <li class="nav-item">
            <a class="nav-link" href="#">Link 2</a>
          </li>
          <li class="nav-item">
            <a class="nav-link" href="#">Link 3</a>
          </li>
        </ul>
      </div>
    </nav>
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search