提问人:Daniel Haro 提问时间:9/19/2023 最后编辑:Arleigh HixDaniel Haro 更新时间:9/19/2023 访问量:36
li在嵌套列表中重叠(导航菜单)
li overlapping in a nested list (Navigation menu)
问:
我正在尝试创建一个导航菜单,我一直在遵循本教程: https://www.youtube.com/watch?v=vb_u7mj84Tc&ab_channel=TheWebShala 我卡在了第 28 分 56 秒,子菜单应该向下推菜单的 li,但它是重叠的(最大宽度:960px)。我确实对视频的代码进行了一些修改,但没有什么可以干扰的,主要是美学上的改变。
这是我目前拥有的代码:
https://codepen.io/Daniel-Haro-the-styleful/pen/RwEjrNG
:root {
--color1: 115, 2, 12;
/*rgb(115, 2, 12) #73020C Principal*/
--color2: 217, 74, 86;
/*rgb(217, 74, 86) #D94A56 Secundario*/
--color3: 191, 4, 38;
/*rgb(191, 4, 38) #BF0426 tres*/
--color4: 242, 235, 220;
/*rgb(242, 235, 220) #F2EBDC cuatro*/
--color5: 13, 13, 13;
/*rgb(13, 13, 13) #0D0D0D cinco*/
--background: 88, 5, 12;
/*rgb(88, 5, 12)*/
--black: 13, 13, 13;
/*rgb(13, 13, 13) #0D0D0D*/
--white: 242, 235, 220;
/*rgb(242, 235, 220) #F2EBDC*/
}
body {
min-height: 100vh;
max-width: 100%;
color: rgb(var(--black));
background-color: rgb(var(--background));
font-family: 'Anton', sans-serif;
font-weight: 400;
font-size: 1.125rem;
}
img {
display: block;
}
a {
text-decoration: none;
color: inherit;
}
ul {
list-style-type: none;
margin: 0;
padding: 0;
}
.title {
font-family: 'SweetDreams', serif;
font-weight: 700;
}
.table,
.header h1,
.main h2 {
color: rgb(var(--white));
}
.nav-menu {
font-size: .8rem;
color: rgb(var(--color4));
}
/*Inicio tutorial*/
.header {
background-color: rgb(var(--color5));
position: absolute;
width: 100%;
left: 0;
top: 0;
z-index: 99;
}
.header h1 {
margin: 0;
width: 105px;
}
.header-main {
max-width: 1600px;
margin: auto;
display: flex;
justify-content: space-between;
align-items: center;
padding: 5px 20px;
}
.logo {
padding: 0 15px;
}
.nav-menu {
padding: 0 15px;
}
.menu-item {
display: inline-block;
margin-left: 30px;
position: relative;
height: 40px;
}
.plus {
display: inline-block;
height: 10px;
width: 10px;
position: relative;
margin-left: 5px;
pointer-events: none;
}
.menu-item>a {
display: block;
padding: 12px 0;
transition: all 0.3s ease;
}
.plus::before,
.plus::after {
content: '';
position: absolute;
left: 50%;
top: 50%;
background-color: rgb(var(--color4));
height: 2px;
width: 100%;
transform: translate(-50%, -50%);
transition: all 0.3s ease;
}
.plus::after {
transform: translate(-50%, -50%) rotate(-90deg);
}
.menu-item:hover>a .plus::before,
.menu-item:hover>a .plus::after {
background-color: green;
}
.menu-item:hover>a {
color: green;
}
.sub-menu {
display: none;
width: 105px;
position: absolute;
left: 0;
top: 100%;
background-color: rgb(var(--color5));
border-top: 3px solid green;
transition: all 0.3s ease;
}
.sub-menu--level2 {
display: none;
background-color: rgb(var(--color5));
position: absolute;
top: 0;
right: 100%;
transform: translateY(-3px);
width: 108px;
}
.sub-menu--level2>.menu-item:hover {
border-right: 3px solid green;
}
@media(min-width: 961px) {
.menu-item--has-children:hover>.sub-menu,
.menu-item--has-children:hover>.sub-menu--level2 {
display: initial;
}
.menu-item--has-children:hover>a .plus::after {
transform: translate(-50%, -50%) rotate(0deg);
}
}
.sub-menu>.menu-item,
.sub-menu--level2>.menu-item {
margin-left: 0;
display: block;
}
.sub-menu>.menu-item>a,
.sub-menu--level2>.menu-item>a {
display: block;
padding: 15px 10px;
}
.open-nav-menu {
height: 34px;
width: 40px;
position: relative;
display: none;
align-items: center;
justify-content: center;
cursor: pointer;
}
.open-nav-menu span {
display: block;
height: 3px;
width: 24px;
background-color: rgb(var(--color4));
position: relative;
}
.open-nav-menu span::before,
.open-nav-menu span::after {
content: '';
position: absolute;
left: 0;
width: 100%;
height: 100%;
background-color: rgb(var(--color4));
top: -7px;
}
.open-nav-menu span::after {
top: 7px;
}
.close-nav-menu {
height: 40px;
width: 40px;
background-color: rgb(var(--color4));
margin: 0 0 15px 15px;
cursor: pointer;
display: none;
align-items: center;
justify-content: center;
}
.close-nav-menu img {
width: 30px;
}
@media(max-width: 960px) {
.nav-menu {
position: fixed;
top: 0;
right: 0;
width: 280px;
height: 100%;
background-color: rgb(var(--color5));
overflow-y: auto;
z-index: 1000;
padding: 15px 0;
transition: all 0.5s ease;
}
.menu-item {
display: block;
margin: 0;
}
.menu-item>a {
padding: 12px 15px;
border-bottom: 1px solid rgba(var(--color4), .3);
}
.menu-item:first-child>a {
border-top: 1px solid rgba(var(--color4), .3);
}
.menu-item--has-children>a {
display: flex;
justify-content: space-between;
align-items: center;
}
.sub-menu {
width: 100%;
display: initial;
position: relative;
left: auto;
top: auto;
border: none;
}
.open-nav-menu,
.close-nav-menu {
display: flex;
}
}
<!-- Header Start -->
<header class="header">
<div class="header__container">
<div class="header-main">
<h1 class="title logo"><a href="https://www.proximaestacion.lat">Próxima Estación</a></h1>
<div class="open-nav-menu">
<span></span>
</div>
<!-- navigation menu start -->
<nav class="nav-menu">
<div class="close-nav-menu">
<img src="./assets/icons/cross.png" alt="exit icon">
</div>
<ul class="menu">
<li class="menu-item menu-item--has-children"><a href="#">Variedades <i class="plus"></i></a>
<ul class="sub-menu">
<li class="menu-item menu-item--has-children"><a href="#">Item 1 <i class="plus"></i></a>
<ul class="sub-menu--level2">
<li class="menu-item"><a href="#GT">sub-item 1 </a></li>
<li class="menu-item"><a href="#TRK">sub-item 2</a></li>
<li class="menu-item"><a href="#AA+">sub-item 3</a></li>
<li class="menu-item"><a href="#JF">sub-item 4</a></li>
</ul>
</li>
</ul>
</li>
<li class="menu-item"><a href="#tablaDePrecios">Tabla de precios</a></li>
<li class="menu-item menu-item--has-children"><a href="#">Contactos <i class="plus"></i></a>
<ul class="sub-menu">
<li class="menu-item"><a href='#'>Instagram</a></li>
<li class="menu-item"><a href="#">Whatsapp</a></li>
</ul>
</li>
</ul>
</nav>
<!-- navigation menu end -->
</div>
</div>
</header>
<!-- Header end -->
还有一个子菜单也有同样的问题
我敢肯定答案就在我脸上,但我已经做了几个小时了,我无法弄清楚。任何帮助将不胜感激。
短暂性投资安全
我认为这一定是位置问题,所以我三重检查了每个使用位置的实例,但发现没有任何问题。我添加并删除了所有这些位置:相对/绝对,但问题仍然存在。
在视频中,他们使用不透明度和可见性来隐藏我使用的子菜单,而不是显示:无/初始。但是,我已经将其更改为不透明度和可见性,就像在视频中一样,但问题仍然存在,所以不是这样。
我读过类似的问题,通常是导致问题的位置,但正如我所说,我已经尝试过了,但无法弄清楚。
答:
0赞
Dayley
9/19/2023
#1
尝试从 中删除 。height: 40px;
.menu-item
.menu-item {
display: inline-block;
margin-left: 30px;
position: relative;
height: 40px; /* Remove me */
}
评论
0赞
Daniel Haro
9/20/2023
这绝对做到了!我什至不记得我为什么要设定高度,但我绝对明白这是怎么回事。谢谢你这么善良的陌生人!
0赞
Dayley
9/20/2023
没问题!- 冲突在于您试图设置一个以像素为单位的精确高度,同时又试图依靠填充来设置菜单项的高度。
评论