我了解这可能是之前提出的问题,但是我还没有找到解决此问题的帖子或其他问题。

我想通过切换#mobileMenu div的高度来使用Javascript制作下拉菜单。我希望div在加载文档时具有0的初始高度,并在单击触发按钮时添加其全高。唯一的问题是,当我将div的初始高度设置为0时,文档仍显示div的高度为27.59px,这对我来说没有太大意义。

我尝试添加:overflow: hidden; / line-height: 0; / display: block但无论我做什么,div的高度都不会低于27.59px。我什至完成了Javascript功能,并且div的高度将打开为154px,但是当关闭时,它会返回27.59px而不是0。



const openBtn = document.querySelector('.open');
const closeBtn = document.querySelector('.close');
const mobileMenu = document.getElementById('mobileMenu');

openBtn.addEventListener('click', e => {
  mobileMenu.classList.remove('hidden');
  mobileMenu.classList.add('active');
  openBtn.style.display = 'none';
  closeBtn.style.display = 'block';
});

closeBtn.addEventListener('click', e => {
  mobileMenu.classList.remove('active');
  mobileMenu.classList.add('hidden');
  openBtn.style.display = 'block';
  closeBtn.style.display = 'none';
});

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

body {
  position: relative;
}


/* Header */

header {
  display: flex;
  justify-content: space-around;
  align-items: center;
  padding: .5rem;
  height: 60px;
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
}

header h2 {
  font-family: 'Calistoga';
  letter-spacing: 2px;
}

header i {
  font-size: 1.5rem;
}

header i:hover {
  cursor: pointer;
}

header i.close {
  display: none;
}


/* Mobile Nav */

#mobileMenu {
  padding: .8rem 0;
  border-top: 1px solid #000;
  border-bottom: 1px solid #000;
  position: fixed;
  top: 92px;
  left: 0;
  right: 0;
  overflow: hidden;
  transition: height .7s ease-in-out;
}

#mobileMenu.hidden {
  height: 0;
  line-height: 0;
  display: block;
}

#mobileMenu.active {
  height: 154px;
}

.mobile-nav {
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  list-style: none;
}

.mobile-nav li {
  padding: .3rem 0;
}

.mobile-nav li a {
  text-decoration: none;
  font-size: 1.2rem;
  color: #000;
}

<header>
  <h2>Website Header</h2>
  <i class="fas fa-chevron-down open"></i>
  <i class="fas fa-chevron-up close"></i>
</header>

<div id="mobileMenu" class="hidden">
  <ul class="mobile-nav">
    <li>
      <a href="#">Home</a>
    </li>
    <li>
      <a href="#">Services</a>
    </li>
    <li>
      <a href="#">About</a>
    </li>
    <li>
      <a href="#">Contact</a>
    </li>
  </ul>
</div>





有或没有overflow: hidden; / line-height: 0; / display: block的结果保持不变。

任何帮助将非常感激。感谢您的时间。

最佳答案

如何将菜单的默认值设置为隐藏状态并删除隐藏的类。块是div的默认显示,因此不需要。尝试将#mobileMenu的padding设置为0,并将.mobile-nav的margin设置为.8rem 0

10-06 00:43