我想要一个下拉导航条(与标题)覆盖整个视窗。我不希望导航下拉菜单后面的内容在下拉菜单后面滚动。
我通过在标题和导航元素上使用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>