li在嵌套列表中重叠(导航菜单)

li overlapping in a nested list (Navigation menu)

提问人:Daniel Haro 提问时间:9/19/2023 最后编辑:Arleigh HixDaniel Haro 更新时间:9/19/2023 访问量:36

问:

我正在尝试创建一个导航菜单,我一直在遵循本教程: 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 -->

还有一个子菜单也有同样的问题

我敢肯定答案就在我脸上,但我已经做了几个小时了,我无法弄清楚。任何帮助将不胜感激。

短暂性投资安全

我认为这一定是位置问题,所以我三重检查了每个使用位置的实例,但发现没有任何问题。我添加并删除了所有这些位置:相对/绝对,但问题仍然存在。

在视频中,他们使用不透明度和可见性来隐藏我使用的子菜单,而不是显示:无/初始。但是,我已经将其更改为不透明度和可见性,就像在视频中一样,但问题仍然存在,所以不是这样。

我读过类似的问题,通常是导致问题的位置,但正如我所说,我已经尝试过了,但无法弄清楚。

CSS 菜单 嵌套列表 重叠 重叠

评论


答:

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
没问题!- 冲突在于您试图设置一个以像素为单位的精确高度,同时又试图依靠填充来设置菜单项的高度。