【问题标题】:Why is my dropdown nav with overflow: hidden blocking the page equal to the height of the nav?为什么我的下拉导航带有溢出:隐藏阻塞页面等于导航的高度?
【发布时间】:2021-03-21 08:03:00
【问题描述】:

height blocking website这是在与手机大小相等的屏幕上工作时。我真的不知道如何让这个导航的高度不阻塞我网站的任何其他元素。例如,如果我向下滚动按钮所在的位置,由于导航的高度,即使它没有展开,我也无法单击它。

任何帮助或指点将不胜感激。

谢谢

编辑:我添加了一张图片来显示下拉高度如何阻挡网站的某些部分。一旦我向下滚动足够远,我就无法点击该按钮。

<header>
  <nav>
   <ul class="nav-links">
    <li><a href="index.html">home</a></li>
    <li><a href="shop.html">shop</a></li>
    <li><a href="sport.html">sport</a></li>
    <li><a href="read.html">read</a></li>
    <li><a href="explore.html">explore</a></li>
    <li><a href="about.html">about</a></li>
   </ul>
  </nav>
 </header>
header {
    z-index: 999;
    position: fixed;
    width: 100vw;
    height: 75px;
    background-image: linear-gradient(to top, rgba(255,255,255,0), rgba(63, 63, 63, 0.65));
}

nav {
  width: 100vw;
  height: 55vh;
  overflow: hidden;
  left: 0;
  margin-top: 29px;
}

nav .nav-links {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  -webkit-box-align: start;
      -ms-flex-align: start;
          align-items: flex-start;
  opacity: 1;
  /* only to show when class is added */
  background-color: black;
  margin: 0;
  padding: 0;
  padding-top: 15px;
  list-style: none;
  overflow: hidden;
  -webkit-transition: -webkit-transform 1s;
  transition: -webkit-transform 1s;
  transition: transform 1s;
  transition: transform 1s, -webkit-transform 1s;
  -webkit-transform: translateY(-100%);
          transform: translateY(-100%);
}

nav ul {
  margin: 0;
  padding: 0;
  list-style: none;
}

nav li {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  width: auto;
  height: auto;
  padding: 5px;
  margin: 5px;
}

nav a {
  text-decoration: none;
  color: white;
  font-size: 24px;
  font-weight: 700;
}

.nav-links.is-active {
  opacity: 1;
  /*only shows when class is added */
  -webkit-transform: translateY(0);
          transform: translateY(0);
}
const revealNav = () => {
  const hamburger = document.querySelector('.hamburger');
  const nav = document.querySelector('.nav-links');

  hamburger.addEventListener('click', () => {
    hamburger.classList.toggle('is-active');
  }, false);

  hamburger.addEventListener('click', () => {
    nav.classList.toggle('is-active');
  });
}

revealNav();

【问题讨论】:

    标签: javascript html css sass responsive-design


    【解决方案1】:

    您的标题位置是固定的。这意味着标题之外的所有元素都将落在此标题的“下方”...

    如果您可以制作一个真实世界的示例,那么了解您的问题可能会更好。

    这是在标题上使用position: fixed 和在标题和导航上使用固定height 之间的混合。下面的示例或多或少可以解决您的问题。通过一些媒体查询和额外的逻辑,它应该适合你。

    const revealNav = () => {
      const hamburger = document.querySelector('.hamburger');
      const nav = document.querySelector('nav');
      const navLinks = document.querySelector('.nav-links');
    
      hamburger.addEventListener('click', () => {
        hamburger.classList.toggle('is-active');
      }, false);
    
      hamburger.addEventListener('click', () => {
        navLinks.classList.toggle('is-active');
        nav.classList.toggle('is-active');
      });
    }
    
    revealNav();
    header {
        z-index: 999;
        position: relative;
        width: 100vw;
        background-image: linear-gradient(to top, rgba(255,255,255,0), rgba(63, 63, 63, 0.65));
    }
    
    nav {
      width: 100vw;
      overflow: hidden;
      left: 0;
      margin-top: 29px;
      height: 0;
      transition: height ease-in-out .5s;
    }
    nav.is-active {
      height: 55vh;
      height: auto;
    }
    
    nav .nav-links {
      display: -webkit-box;
      display: -ms-flexbox;
      display: flex;
      -webkit-box-orient: vertical;
      -webkit-box-direction: normal;
          -ms-flex-direction: column;
              flex-direction: column;
      -webkit-box-align: start;
          -ms-flex-align: start;
              align-items: flex-start;
      opacity: 1;
      /* only to show when class is added */
      background-color: black;
      margin: 0;
      padding: 0;
      padding-top: 15px;
      list-style: none;
      overflow: hidden;
      -webkit-transition: -webkit-transform 1s;
      transition: -webkit-transform 1s;
      transition: transform 1s;
      transition: transform 1s, -webkit-transform 1s;
      -webkit-transform: translateY(-100%);
              transform: translateY(-100%);
    }
    
    nav ul {
      margin: 0;
      padding: 0;
      list-style: none;
    }
    
    nav li {
      display: -webkit-box;
      display: -ms-flexbox;
      display: flex;
      width: auto;
      height: auto;
      padding: 5px;
      margin: 5px;
    }
    
    nav a {
      text-decoration: none;
      color: white;
      font-size: 24px;
      font-weight: 700;
    }
    
    .nav-links.is-active {
      opacity: 1;
      /*only shows when class is added */
      -webkit-transform: translateY(0);
              transform: translateY(0);
    }
    <header>
      <button class="hamburger">
        menu
      </button>
      <nav>
       <ul class="nav-links">
        <li><a href="index.html">home</a></li>
        <li><a href="shop.html">shop</a></li>
        <li><a href="sport.html">sport</a></li>
        <li><a href="read.html">read</a></li>
        <li><a href="explore.html">explore</a></li>
        <li><a href="about.html">about</a></li>
       </ul>
      </nav>
     </header>
    
    <div style="height: 500px; background-color: blue; position: relative;">
      <button>submit</button
    </div>

    【讨论】:

    • 我现在添加了一张照片,我将尝试使用您的解决方案。
    • 这已经奏效了,感谢您的帮助。有没有办法在不使用固定的情况下“固定”标题?当标题始终可见时,我个人喜欢它。再次感谢您。
    • 上次更新,我在整个容器周围添加了一个容器,高度为:0;然后我可以申请位置:固定;到原始标题,对网页没有负面影响,到目前为止...
    • @Rambus_Jarbus:我很高兴能帮上忙。自从我上次回复以来一直没有关注。我看到您在我的回答的帮助下找到了解决方案。希望这将是您问题的最终解决方案。
    猜你喜欢
    • 2023-04-03
    • 2021-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-17
    • 2019-01-12
    相关资源
    最近更新 更多