淘先锋技术网

首页 1 2 3 4 5 6 7

我想要一个下拉导航条(与标题)覆盖整个视窗。我不希望导航下拉菜单后面的内容在下拉菜单后面滚动。

我通过在标题和导航元素上使用position: fixed实现了这一点。当我的菜单按钮被点击时,主体溢出:隐藏应用。

问题是,在非常小的视窗中,底部的导航列表项目落在视窗之外,我不能向下滚动查看/点击它们。

这是我的代码。

header {
    height: 60px;
    background-color: green;
}

body.nav-shown {
      overflow: hidden;
}

body.nav-shown header {
      position: fixed;
      top: 0;
      left: 0;
      right: 0;
}

body.nav-shown nav {
      position: fixed;
      top: 60px;
      left: 0;
      right: 0;
      min-height: calc(100vh - 60px);
      background-color: black;
      color: white;
      font-size: 30px;
      line-height: 3em;
      overflow: scroll;
}

<body class="nav-shown">

<header>
    
    <button class="nav-button">Menu</button>

    <nav>
        <ul>
      <li>Link1</li>
      <li>Link2</li>
      <li>Link3</li>
      <li>Link4</li>
      <li>Link5</li>
      <li>Link6</li>
      <li>Link7</li>
       <li>Link8</li>
      <li>Link9</li>
   </ul>
    </nav>

</header>

固定部分应该设置宽度、高度和顶部、底部属性,否则它将无法识别其大小和位置。

在这种情况下,您可以使用最大高度:100%;导航系统。

header {
  height: 60px;
  background-color: green;
}

body.nav-shown {
  overflow: hidden;
}

body.nav-shown header {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
}

body.nav-shown nav {
  position: fixed;
  top: 60px;
  left: 0;
  right: 0;
  min-height: calc(100vh - 60px);
  max-height: 100%;
  background-color: black;
  color: white;
  font-size: 30px;
  line-height: 3em;
  overflow: scroll;
}

<body class="nav-shown">
  <header>
    <button class="nav-button">Menu</button>
    <nav>
      <ul>
        <li>Link1</li>
        <li>Link2</li>
        <li>Link3</li>
        <li>Link4</li>
        <li>Link5</li>
        <li>Link6</li>
        <li>Link7</li>
        <li>Link8</li>
        <li>Link9</li>
      </ul>
    </nav>
  </header>
</body>

您可以在header元素上设置overflow: auto,并将min-height设置为header元素而不是nav元素。下面是更新后的代码。试试看

header {
        height: 60px;
        background-color: green;
    }

    body.nav-shown {
        overflow: hidden;
    }

    body.nav-shown header {
          position: fixed;
          top: 0;
          left: 0;
          right: 0;
          overflow: auto;
          min-height: calc(100vh - 60px);
    }



    body.nav-shown nav {
         position: absolute;
          top: 60px;
          left: 0;
          right: 0;
          background-color: black;
          color: white;
          font-size: 30px;
          line-height: 3em;
    }

<body class="nav-shown">

    <header>
        
        <button class="nav-button">Menu</button>


        <nav>
            <ul>
          <li>Link1</li>
          <li>Link2</li>
          <li>Link3</li>
          <li>Link4</li>
          <li>Link5</li>
          <li>Link6</li>
          <li>Link7</li>
           <li>Link8</li>
          <li>Link9</li>
       </ul>
        </nav>


    </header>

    </body>

我最终做的是:

与此问题类似:隐藏除打印视图的一个div之外的所有元素

点击时,我设置了display: none来显示页面上的所有内容(我已经将所有内容包装在一个div中),除了标题。这消除了导航后面内容滚动的问题,因为没有什么可滚动的。

然后我将标题和导航设置为position: absolute,这样在小视窗中用户可以向下滚动到导航中的最后一个链接。这消除了固定位置不允许滚动的问题。

header {
    height: 60px;
    background-color: green;
}

body.nav-shown {
      overflow: hidden;
}

body.nav-shown header {
      position: fixed;
      top: 0;
      left: 0;
      right: 0;
}

body.nav-shown nav {
      position: fixed;
      top: 60px;
      left: 0;
      right: 0;
      height: 100%;
      min-height: calc(100vh - 60px);
      background-color: black;
      color: white;
      font-size: 30px;
      line-height: 3em;
      overflow: scroll;
}

<body class="nav-shown">

<header>
    
    <button class="nav-button">Menu</button>

    <nav>
        <ul>
      <li>Link1</li>
      <li>Link2</li>
      <li>Link3</li>
      <li>Link4</li>
      <li>Link5</li>
      <li>Link6</li>
      <li>Link7</li>
       <li>Link8</li>
      <li>Link9</li>
   </ul>
    </nav>

</header>