Search code examples
javascripthtmlcssdrop-down-menuhamburger-menu

How do I hover to change the hamburger menu colour, click the hamburger menu to transform it to x and have the contents dropdown?


I am an amateur at coding and I am trying to code for my own website. How do I create a hamburger icon that changes to gold upon hovering and transforms into an X with dropdown contents after clicking?

The following is my code for a hamburger menu that transforms into an X:

function transformmenubar(x) {
  x.classList.toggle("change");
}
.menu-bar{
  display: inline-block;
  cursor: pointer;
}

.bar1, .bar2, .bar3 {
  width: 15px;
  height: 2px;
  background-color: #000000;
  margin: 3px 0;
  transition: 0.4s;
}


.change .bar1 {
  -webkit-transform: rotate(-45deg) translate(-3px, 3.5px);
  transform: rotate(-45deg) translate(-3px, 3.5px);
}

.change .bar2 {opacity: 0;}

.change .bar3 {
  -webkit-transform: rotate(45deg) translate(-3px, -4.5px);
  transform: rotate(45deg) translate(-3px, -4.5px);
}
<div class="menu-bar"  onclick="transformmenubar(this)"  =>
  <div class="bar1"></div>
  <div class="bar2"></div>
  <div class="bar3"></div>
</div>

The following is the code for my dropdown content:

.dropdown-content {
  height: 100%;
  width: 200px;
  position: fixed;
  z-index: 1;
  display: none;
  overflow-x: hidden;
  margin-top: 50px;
  padding-top: 20px; 
}

.dropdown-content a {
  padding: 6px 8px 6px 16px;
  padding-left: 10px;
  text-decoration: none;
  font-size: 15px;
  color: #000000;
  display: block;
  border: none;
  width: 100%;
  text-align: left;
  cursor: pointer;
  outline: none;
  font-family: Arial Rounded MT Bold;
}

.dropdown-content a:hover {color: #C5B358;}
.dropdown:hover .dropdown-content {display: block;}
.dropdown:hover {color: #C5B358;}
 <div class="dropdown-content">
      <a href="#">HOME</a>
      <a href="#">SHOP</a>
      <a href="#">CATALOGUE</a>
      <a href="#">THE COMPANY</a>
      <a href="#">CONTACT US</a>
      <a href="#">FAQ</a>
 </div>

How do I combine my code together to make it work?

Here are the sample pictures of how I want my code to look like:

enter image description here

enter image description here


Solution

  • Look. Here is a solution from me.

    Firstly, as a coding lover, I advise you NOT to declare javascript events inside html structure tags:

    onclick="transformmenubar(this)"
    

    This will entail many disadvantages. Write all the logic in custom javascript files - .js, or inside the <script>...</script> tags.

    I rewrote your javascript code, adding a toggle side to display the menu itself:

    menu.classList.toggle("menu_change");
    

    Also, the left rule is responsible for the absence and appearance of the menu for animation. I delete the display: none:

    .dropdown-content {
      ...
      left: -100%;
      ...
      transition: 1s;
    }
    

    And a class for displaying a menu that adds/removes a toggle() method in javasript logic:

    .dropdown-content.menu_change {
      left: 0;
    }
    

    To change the color of the bars of the menu button, add this rule from the :hover to your css:

    .menu-bar:hover div {
      background-color: yellow;
    }
    

    Run this snippet and see how it works.

    If you have any questions, please let me know. I will answer with pleasure.

    let x = document.querySelector('.menu-bar');
    let menu = document.querySelector('.dropdown-content');
    
    x.onclick = function() {
      this.classList.toggle("change");
      menu.classList.toggle("menu_change");
    }
    .dropdown-content {
      height: 100%;
      width: 200px;
      position: fixed;
      z-index: 1;
      left: -100%;
      overflow-x: hidden;
      margin-top: 50px;
      padding-top: 20px;
      transition: 1s;
    }
    
    .dropdown-content.menu_change {
      left: 0;
    }
    
    .dropdown-content a {
      padding: 6px 8px 6px 16px;
      padding-left: 10px;
      text-decoration: none;
      font-size: 15px;
      color: #000000;
      display: block;
      border: none;
      width: 100%;
      text-align: left;
      cursor: pointer;
      outline: none;
      font-family: Arial Rounded MT Bold;
    }
    
    .dropdown-content a:hover {color: #C5B358;}
    .dropdown:hover .dropdown-content {display: block;}
    .dropdown:hover {color: #C5B358;}
    
    .menu-bar{
      display: inline-block;
      cursor: pointer;
    }
    
    .menu-bar:hover div {
      background-color: yellow;
    }
    
    .bar1, .bar2, .bar3 {
      width: 15px;
      height: 2px;
      background-color: #000000;
      margin: 3px 0;
      transition: 0.4s;
    }
    
    
    .change .bar1 {
      -webkit-transform: rotate(-45deg) translate(-3px, 3.5px);
      transform: rotate(-45deg) translate(-3px, 3.5px);
    }
    
    .change .bar2 {opacity: 0;}
    
    .change .bar3 {
      -webkit-transform: rotate(45deg) translate(-3px, -4.5px);
      transform: rotate(45deg) translate(-3px, -4.5px);
    }
    <div class="menu-bar">
      <div class="bar1"></div>
      <div class="bar2"></div>
      <div class="bar3"></div>
    </div>
    
    <div class="dropdown-content">
      <a href="#">HOME</a>
      <a href="#">SHOP</a>
      <a href="#">CATALOGUE</a>
      <a href="#">THE COMPANY</a>
      <a href="#">CONTACT US</a>
      <a href="#">FAQ</a>
    </div>