如何制作可水平滚动的导航栏?
How do I make a horizontally scrollable nav bar?
我正在尝试在屏幕宽度缩小时使导航栏中的 ul 水平滚动。
我查看了一些类似问题的答案并实施了似乎对我的情况有效的解决方案。
但是,ul 及其内容以某种方式脱离了 nav,并停留在 nav 下的下一行。另外,
我认为将 position: fixed; overflow-y: hidden;
设置为 ul 可以解决问题。但是,相反,它的左侧覆盖了位于导航左角的按钮。
谁能帮帮我??
<!--HTML-->
<body>
<nav class="main-nav">
<div class="btn"><i class="fas fa-bars fa-2x"></i></div>
<ul>
<li><a href="#">Hello</a></li>
<li><a href="#">Hello</a></li>
<li><a href="#">Hello</a></li>
<li><a href="#">Hello</a></li>
<li><a href="#">Hello</a></li>
<li><a href="#">Hello</a></li>
<li><a href="#">Hello</a></li>
</ul>
</nav>
</body>
/*CSS*/
.main-nav {
position: fixed;
z-index: 1000;
display: flex;
flex-wrap: wrap;
width: 100%;
height: 3rem;
background-color: #ffffff;
}
.main-nav .btn {
height: 3rem;
width: 3rem;
background-color: chartreuse;
cursor: pointer;
}
.main-nav ul {
display: flex;
flex-wrap: wrap;
list-style: none;
padding-left: 2rem;
}
.main-nav ul li a {
display: block;
line-height: 3rem;
height: 100%;
padding: 0 1rem;
text-decoration: none;
text-transform: uppercase;
font-size: 1rem;
font-weight: 600;
color: black;
}
@media (max-width: 800px) {
.main-nav {
height: 4rem;
white-space: nowrap;
}
.main-nav ul {
position: fixed;
white-space: nowrap;
flex-wrap: nowrap;
overflow-x: scroll;
overflow-y: hidden;
}
.main-nav ul li {
flex: 0 0 auto;
}
}
所以,我在 CodePen 上试过你的代码,似乎唯一阻止你的代码工作的是媒体查询中 ul
元素上的 position: fixed
规则。
在我看来,由于您打算将所有项目都放在 X-Axis 上的 header 中,因此根本不需要 overflow-y: hidden
。
我不知道您到底打算实现什么,但是在 X-Axis 上使用可滚动的导航栏似乎不是一个好的做法。也许在您的应用程序中它是有意义的,但您可能会重新考虑这一点。从用户体验的角度来看,这不是最好的方法。
我正在尝试在屏幕宽度缩小时使导航栏中的 ul 水平滚动。
我查看了一些类似问题的答案并实施了似乎对我的情况有效的解决方案。
但是,ul 及其内容以某种方式脱离了 nav,并停留在 nav 下的下一行。另外,
我认为将 position: fixed; overflow-y: hidden;
设置为 ul 可以解决问题。但是,相反,它的左侧覆盖了位于导航左角的按钮。
谁能帮帮我??
<!--HTML-->
<body>
<nav class="main-nav">
<div class="btn"><i class="fas fa-bars fa-2x"></i></div>
<ul>
<li><a href="#">Hello</a></li>
<li><a href="#">Hello</a></li>
<li><a href="#">Hello</a></li>
<li><a href="#">Hello</a></li>
<li><a href="#">Hello</a></li>
<li><a href="#">Hello</a></li>
<li><a href="#">Hello</a></li>
</ul>
</nav>
</body>
/*CSS*/
.main-nav {
position: fixed;
z-index: 1000;
display: flex;
flex-wrap: wrap;
width: 100%;
height: 3rem;
background-color: #ffffff;
}
.main-nav .btn {
height: 3rem;
width: 3rem;
background-color: chartreuse;
cursor: pointer;
}
.main-nav ul {
display: flex;
flex-wrap: wrap;
list-style: none;
padding-left: 2rem;
}
.main-nav ul li a {
display: block;
line-height: 3rem;
height: 100%;
padding: 0 1rem;
text-decoration: none;
text-transform: uppercase;
font-size: 1rem;
font-weight: 600;
color: black;
}
@media (max-width: 800px) {
.main-nav {
height: 4rem;
white-space: nowrap;
}
.main-nav ul {
position: fixed;
white-space: nowrap;
flex-wrap: nowrap;
overflow-x: scroll;
overflow-y: hidden;
}
.main-nav ul li {
flex: 0 0 auto;
}
}
所以,我在 CodePen 上试过你的代码,似乎唯一阻止你的代码工作的是媒体查询中 ul
元素上的 position: fixed
规则。
在我看来,由于您打算将所有项目都放在 X-Axis 上的 header 中,因此根本不需要 overflow-y: hidden
。
我不知道您到底打算实现什么,但是在 X-Axis 上使用可滚动的导航栏似乎不是一个好的做法。也许在您的应用程序中它是有意义的,但您可能会重新考虑这一点。从用户体验的角度来看,这不是最好的方法。