如何悬停以更改汉堡菜单颜色,单击汉堡菜单将其转换为 x 并显示内容下拉菜单?

时间:2021-01-13 09:00:19

标签: javascript html css drop-down-menu hamburger-menu

我是编码的业余爱好者,我正在尝试为自己的网站编码。如何创建一个在悬停时变为金色并在点击后变为带有下拉内容的 X 的汉堡包图标?

以下是我将汉堡菜单转换为 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>

以下是我的下拉内容的代码:

.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>

如何将我的代码组合在一起以使其工作?

以下是我希望我的代码看起来像的示例图片:

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

看。这是我的解决方案。

首先,作为一个编码爱好者,我建议你不要在html结构标签中声明javascript事件:

onclick="transformmenubar(this)"

这将带来许多缺点。将所有逻辑写入自定义 javascript 文件 - .js<script>...</script> 标签内。

我重写了你的 javascript 代码,添加了一个切换端来显示菜单本身:

menu.classList.toggle("menu_change");

此外,left 规则负责动画菜单的缺失和出现。我删除了 display: none:

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

还有一个用于显示在 javasript 逻辑中添加/删除 toggle() 方法的菜单的类:

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

要更改菜单按钮栏的颜色,请将此规则从 :hover 添加到您的 css:

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

运行这个片段,看看它是如何工作的。

如果您有任何问题,请告诉我。我会很乐意回答。

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>