Search code examples
htmlcsshamburger-menu

Hamburger for navigation bar in CSS issue


I am working on my own website and currently having an issue with a toggle button. When I click on the hamburger menu, the navigation bar doesn't show up. But the toggle bar is working. I just do the same thing but I just combined the two sources since the concept is the same.

Source codes:

https://www.youtube.com/watch?v=xMTs8tAapnQ

https://www.youtube.com/watch?v=H1eXpp4DAWQ&list=LLU3FO2sJDhxbIBRVc0fA34A&index=2&t=0s

* {
  margin: 0;
  padding: 0;
}

#toggle {
  display: none;
}

.hambuger {
  z-index: 1;
  /*keeps displaying the icon when it clicks*/
  position: fixed;
  width: 25px;
  /*The parents (hamburger) of siblings (span)*/
  top: 20px;
  left: 28px;
  cursor: pointer;
  /*to able to click it*/
}

.line {
  display: block;
  /*to show the three lines*/
  width: 100%;
  /*Maximize the width of the parents (hamburger: 25px width)*/
  height: 3px;
  margin-bottom: 3px;
  /*to separate and see the icons*/
  background-color: black;
  /*color of the icons*/
}

.menu {
  display: none;
  width: 70px;
  line-height: 1.7em;
  margin: 40px;
}

.menu a {
  display: block;
  text-decoration: none;
  color: black;
  border: 1px grey solid;
}

#toggle:checked~.menu {
  display: block;
  /*The toggle became the parents while menu is the sibling here*/
}
<header class="content">
  <label for="toggle" class="hambuger">
    <input type="checkbox" id="toggle">
    <span class="line"></span>
    <span class="line"></span>
    <span class="line"></span>
  </label>

  <nav class="menu">
    <a href="#" class="active">Home</a>
    <a href="#" class="active">About us</a>
    <a href="#" class="active">History</a>
    <a href="#" class="active">Contacts</a>
  </nav>
</header>


Solution

  • In order to select your .menu item from the input using the general sibling selector ~, I moved the input within the same parent (the header element) to make them siblings.

    * {
      margin: 0;
      padding: 0;
    }
    
    #toggle {
      display: none;
    }
    
    .hambuger {
      z-index: 1;
      /*keeps displaying the icon when it clicks*/
      position: fixed;
      width: 25px;
      /*The parents (hamburger) of siblings (span)*/
      top: 20px;
      left: 28px;
      cursor: pointer;
      /*to able to click it*/
    }
    
    .line {
      display: block;
      /*to show the three lines*/
      width: 100%;
      /*Maximize the width of the parents (hamburger: 25px width)*/
      height: 3px;
      margin-bottom: 3px;
      /*to separate and see the icons*/
      background-color: black;
      /*color of the icons*/
    }
    
    .menu {
      display: none;
      width: 70px;
      line-height: 1.7em;
      margin: 40px;
    }
    
    .menu a {
      display: block;
      text-decoration: none;
      color: black;
      border: 1px grey solid;
    }
    
    #toggle:checked~.menu {
      display: block;
      /*The toggle became the parents while menu is the sibling here*/
    }
    <header class="content">
      <input type="checkbox" id="toggle">
      <label for="toggle" class="hambuger">
        <span class="line"></span>
        <span class="line"></span>
        <span class="line"></span>
      </label>
      <nav class="menu">
        <a href="#" class="active">Home</a>
        <a href="#" class="active">About us</a>
        <a href="#" class="active">History</a>
        <a href="#" class="active">Contacts</a>
      </nav>
    
    </header>