傍晚

在工作中学习,目前正在为我的家族企业建立一个新网站.

如何使此下拉导航菜单在桌面/手机上工作?我不希望它太花哨,与主导航本身的设计相同,我一直在try 使它像实际的切换一样工作,因此当用户单击"服务"时,它会切换下来,但它没有按预期工作.

理想情况下,在悬停状态下,它应该显示桌面的下拉链接,在移动状态下,它应该需要touch 才能显示.

HTML

<div class="navigation-bar">
  <div class="navigation-item">
    <div class="logo">
      <a href="index.html">
        <img src="/assets/img/logo.jpg" alt="Company Logo">
      </a>
    </div>
    <ul class="navigation-bar-menu">
      <li class="active"><a href="index.html" class="active">Home</a></li>
      <li><a href="#">Services <i class="fa-thin fa-chevron-down"></i></a>

        <ul class="navigation-bar-dropdown">
          <li><a href="#">Managed Print Service</a></li>
          <li><a href="#">Document Management</a></li>
          <li><a href="#">Machine Finance Options</a></li>
          <li><a href="#">Machine Repair & Support</a></li>
        </ul>

      </li>
      <li><a href="#">Products <i class="fa-thin fa-chevron-down"></i></a>
        <ul class="navigation-bar-dropdown">
          <li><a href="#">Machines</a></li>
          <li><a href="#">Ricoh</a></li>
          <li><a href="#">Lexmark</a></li>
          <li><a href="#">Konica Minolta</a></li>
          <li><a href="#">Software</a></li>
          <li><a href="#">Kofax</a></li>
          <li><a href="#">Papercut</a></li>
          <li><a href="#">Filestar</a></li>
        </ul>
      </li>
      <li><a href="contact.html">Contact Us</a></li>
    </ul>
    <button class="navigation-bar-toggle">
      <i class="fa-light fa-bars"></i>
      Menu
    </button>
  </div>
</div>

CSS

* {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

body {
  background-color: #242424;
  font-family: 'proxima-nova', sans-serif;
  font-weight: 100;
  font-style: normal;
  font-size: 16px;
  line-height: 1.5rem;
}

li {
  list-style-type: none;
}

a {
  text-decoration: none;
  color: inherit;
}

.navigation-bar {
  background-color: #ffffff;
  padding: 2rem 1rem;
  position: relative;
  box-shadow: rgba(14, 30, 37, 0.12) 0px 2px 4px 0px, rgba(14, 30, 37, 0.32) 0px 2px 16px 0px;
}

.navigation-item {
  display: flex;
  justify-content: space-between;
  align-items: center;
}

.logo img {
  width: 10rem;
  display: block;
}

.navigation-bar-toggle {
  padding: 1rem;
  background-color: #ecf0f1;
  color: inherit;
  cursor: pointer;
  text-transform: uppercase;
  border: none;
  font: inherit;
  border-radius: 0.25rem;
}

.navigation-bar-dropdown {
  display: flex;
  flex-direction: column;
}

.navigation-bar-menu {
  flex-direction: column;
  right: 0;
  overflow: hidden;
  top: 100%;
  background: #ecf0f1;
  display: none;
  position: absolute;
  width: 100%;
}

.navigation-bar-menu .active {
  background-color: #242424;
  color: #ffffff;
  font-weight: 300;
}

.navigation-bar-menu li {
  display: flex;
  justify-content: center;
  padding: 1rem;
}

.navigation-bar-menu a {
  text-transform: uppercase;
}

.navigation-bar a:hover {
  opacity: 1 !important;
}

.navigation-bar-menu :not(.active):hover {
  background-color: #242424;
  color: #ffffff;
  opacity: 1;
  animation-name: fadeInOpacity;
  animation-iteration-count: 1;
  animation-timing-function: ease-in;
  animation-duration: 500ms;
}


.navigation-bar-menu.open {
  display: flex;
}

@media only screen and (min-width: 700px) {
 /* NAVIGATION BAR */
 .navigation-bar-toggle {
   display: none;
  }
  
  .navigation-bar-menu {
    display: flex;
    flex-direction: row;
    position: relative;
    background: none;
    justify-content: end;
    width: auto;
    gap: 1rem;
  }

  .navigation-bar-menu li {
    background-color: #ecf0f1;
    border-radius: 0.25rem;
    padding: 1rem;
  }
}

JS公司

  window.addEventListener('DOMContentLoaded', () => {
  const menuToggler = document.querySelector('.navigation-bar-toggle')
  const menu = document.querySelector('.navigation-bar-menu')

  menuToggler.addEventListener('click', () => {
    menu.classList.toggle('open')
  })
})

任何帮助都将不胜感激.

推荐答案

在这里,我尽我所能以最小的变化实现您想要的,并在必要时添加 comments .判断一下.对HTML标记、CSS和JS进行了更改.如果你想让我解释一些变化,或者有什么需要解释的,请在 comments 中告诉我.有一件事,如果你要添加一个下拉链接,就像我在你的标记中做的那样,don't forget to add classnames.我还 comments 了要添加的类名.你可以浏览一下,如果有什么不清楚的地方,可以随意发表 comments .

window.addEventListener('DOMContentLoaded', () => {
  const menuToggler = document.querySelector('.navigation-bar-toggle');
  const menu = document.querySelector('.navigation-bar-menu');

  menuToggler.addEventListener('click', () => {
    menu.classList.toggle('open')
  })

  const linksWithChild = document.getElementsByClassName('dropdown-btn');

  for (let i = 0; i < linksWithChild.length; i++) {
    linksWithChild[i].addEventListener('click', function() {

      /* Upon clicking, check if any "dropdown-btn" other than the current one contains .active class. 
      If so remove .active class from the button and the dropdown will be hidden due to our style definition */
      for (let j = 0; j < linksWithChild.length; j++) {
        // 'this' refers to current dropdown-btn
        if (linksWithChild[j].classList.contains('active') && linksWithChild[j] !== this) {
          linksWithChild[j].classList.remove('active');
        }
      }
      this.classList.toggle('active');
    });
  }

})
* {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

body {
  background-color: #242424;
  font-family: 'proxima-nova', sans-serif;
  font-weight: 100;
  font-style: normal;
  font-size: 16px;
  line-height: 1.5rem;
}

li {
  list-style-type: none;
}

a {
  text-decoration: none;
  color: inherit;
}

.navigation-bar {
  background-color: #ffffff;
  padding: 2rem 1rem;
  position: relative;
  box-shadow: rgba(14, 30, 37, 0.12) 0px 2px 4px 0px, rgba(14, 30, 37, 0.32) 0px 2px 16px 0px;
}

.navigation-item {
  display: flex;
  justify-content: space-between;
  align-items: center;
}

.logo img {
  width: 10rem;
  display: block;
}

.navigation-bar-toggle {
  padding: 1rem;
  background-color: #ecf0f1;
  color: inherit;
  cursor: pointer;
  text-transform: uppercase;
  border: none;
  font: inherit;
  border-radius: 0.25rem;
}

.navigation-bar-menu {
  flex-direction: column;
  right: 0;
  top: 100%;
  background: #ecf0f1;
  display: none;
  position: absolute;
  width: 100%;
}

.navigation-bar-menu li.active a {
  background-color: #242424;
  color: #ffffff;
  font-weight: 300;
}

.navigation-bar-menu li {
  justify-content: center;
  position: relative;
}

.navigation-bar-menu a {
  text-transform: uppercase;
  padding: 1rem;
  background: #ecf0f1;
  display: inline-block;
  width: 100%;
}

.navigation-bar-dropdown {
  position: absolute;
  width: max-content;
  padding-top: 10px;
}

.has-child .navigation-bar-dropdown {
  display: none;
}

.navigation-bar-menu.open {
  display: flex;
}

@media only screen and (min-width: 700px) {
  /* navigation bar */
  .navigation-bar-toggle {
    display: none;
  }
  .has-child:hover .navigation-bar-dropdown {
    display: flex;
    flex-direction: column;
  }
  .navigation-bar-menu {
    display: flex;
    flex-direction: row;
    position: relative;
    background: none;
    justify-content: end;
    width: auto;
    gap: 1rem;
  }
  .navigation-bar-menu li a {
    border-radius: 0.25rem;
  }
}

@media screen and (max-width: 699px) {
  .has-child .navigation-bar-dropdown {
    position: relative;
    border-left: 2px solid #a5a7a8;
    margin-left: 30px;
  }
  /* show dropdown if the dropdown button has .active class */
  .has-child>a.active+.navigation-bar-dropdown {
    display: block;
  }
}


/* disable click evetns on devices that support hover */

@media screen and (hover: hover) and (pointer: fine) {
  .has-child>a {
    pointer-events: none;
  }
}
<div class="navigation-bar">
  <div class="navigation-item">
    <div class="logo">
      <a href="index.html">
        <img src="/assets/img/logo.jpg" alt="Company Logo">
      </a>
    </div>

    <!-- add .navlink class to every top level <li> tag -->
    <!-- add .has-child class to every .navlink <li> tag that has dropdown -->
    <!-- add .dropdown-btn class to direct <a> tag of .has-child <li> tag -->
    <ul class="navigation-bar-menu">
      <li class="navlink active"><a href="index.html" class="active">Home</a></li>
      <li class="navlink has-child">
        <a href="#" class="dropdown-btn">Services <i class="fa-thin fa-chevron-down"></i></a>
        <ul class="navigation-bar-dropdown">
          <li><a href="#">Managed Print Service</a></li>
          <li><a href="#">Document Management</a></li>
          <li><a href="#">Machine Finance Options</a></li>
          <li><a href="#">Machine Repair & Support</a></li>
        </ul>

      </li>
      <li class="navlink has-child">
        <a href="#" class="dropdown-btn">Products <i class="fa-thin fa-chevron-down"></i></a>
        <ul class="navigation-bar-dropdown">
          <li><a href="#">Machines</a></li>
          <li><a href="#">Ricoh</a></li>
          <li><a href="#">Lexmark</a></li>
          <li><a href="#">Konica Minolta</a></li>
          <li><a href="#">Software</a></li>
          <li><a href="#">Kofax</a></li>
          <li><a href="#">Papercut</a></li>
          <li><a href="#">Filestar</a></li>
        </ul>
      </li>
      <li class="navlink"><a href="contact.html">Contact Us</a></li>
    </ul>
    <button class="navigation-bar-toggle">
            <i class="fa-light fa-bars"></i>
            Menu
          </button>
  </div>
</div>

Javascript相关问答推荐

验证嵌套 colored颜色 代码的结果

如何从defineExpose访问数据和方法

无法在page. evalve()内部使用外部函数

在shiny 模块中实现JavaScript

如何在不使用类型化数组的情况下将32位浮点数按位转换为整值?

如何使用CSS和JavaScript创建粘性、凝聚力的形状到形状(容器)变形?

如何通过继承contentitable属性的元素捕捉keydown事件?

Flisk和JS错误:未捕获的Syntax错误:意外的令牌'<'

在JavaScript中对大型级联数组进行切片的最有效方法?

Mongoose post hook在使用await保存时不返回Postman响应

使用LocaleCompare()进行排序时,首先使用大写字母

在WordPress中使用带有WPCode的Java代码片段时出现意外令牌错误

React.Development.js和未捕获的ReferenceError:未定义useState

如何在箭头函数中引入or子句?

在JS中动态创建对象,并将其追加到HTML表中

Google脚本数组映射函数横向输出

try 将Redux工具包与MUI ToggleButtonGroup组件一起使用时出错

用另一个带有类名的div包装元素

是否设置以JavaScript为背景的画布元素?

将延迟加载的模块转换为Eager 加载的模块