【问题标题】:Dropdown submenu in flex nav bar doesn't apper under buttonflex navbar 中的下拉子菜单未出现在按钮下
【发布时间】:2018-12-02 20:33:24
【问题描述】:

我正在尝试在我的网站顶部制作一个响应式导航菜单。我正在使用 display: flex; 。它适用于移动设备,因此我将跳过该部分,但在桌面上,子菜单出现在我的下拉按钮的右侧。我应该如何让这个子菜单下拉到我的导航栏?

* {
  margin: 0px;
  padding: 0px;
  box-sizing: border-box;
}

#top-bar {
  width: 100%;
  height: 70px;
  background-color: white;
  z-index: 1;
}

#top-bar nav {
  height: 70px;
}

#nav-buttons {
  height: 70px;
  display: flex;
  flex-direction: column;
  justify-content: center;
  overflow-y: hidden;
  height: 0px;
  transition-property: all;
  transition-duration: .5s;
  transition-timing-function: cubic-bezier(0, 1, 0.5, 1);
}

nav #nav-buttons li {
  list-style-type: none;
  width: 100%;
  background-color: black;
}

nav #nav-buttons li a {
  display: block;
  width: 100%;
  line-height: 10.5vh;
  text-align: center;
  text-decoration: none;
  color: white;
}

.dropdown {
  display: flex;
  flex-wrap: wrap;
  flex-direction: column;
}

.dropdown-sub {
  display: none;
  z-index: 1;
  flex-direction: column;
}

@media only screen and (min-width: 20px) {/*768px ofc*/
  /*=======Top bar for desktop======*/
  #nav-buttons {
    overflow: hidden;
  }
  #top-bar nav {
    width: 75%;
    float: right;
  }
  #top-bar nav #nav-buttons {
    height: 70px;
    flex-direction: row;
    justify-content: space-evenly;
  }
  nav #nav-buttons li {
    background-color: white;
  }
  nav #nav-buttons li a {
    color: black;
    line-height: 70px;
  }
  nav #nav-buttons li a:hover {
    color: red;
    transition: 0.45s;
  }
  .dropdown-title:hover+.dropdown-sub,
  .dropdown-sub:hover {
    cursor: pointer;
    display: flex;
  }
  .dropdown-title:hover+.dropdown-option:hover {
    background-color: #aaaaaa;
  }
  /*=======Top bar for desktop======*/
}
<div id="top-bar">
  <nav>
    <ul id="nav-buttons">
      <li><a href="#">Menu</a></li>
      <li class="dropdown" style="background-color:#aaa;">
        <a class="dropdown-title">Sub menu</a>
        <ul class="dropdown-sub">
          <li class="dropdown-option">option 1</li>
          <li class="dropdown-option">option 2</li>
          <li class="dropdown-option">option 3</li>
        </ul>
      </li>
      <li><a href="#">Menu</a></li>
      <li><a href="#">Menu</a></li>
      <li><a href="#">Menu</a></li>
      <li><a href="#">Menu</a></li>
    </ul>
  </nav>
</div>

【问题讨论】:

    标签: html css flexbox


    【解决方案1】:

    您可以将position: relative 用于父级(子菜单触发器)结合position: absolute 用于子级(子菜单)。我还删除了overflow: hidden 属性并将其替换为overflow: visible

    * {
      margin: 0px;
      padding: 0px;
      box-sizing: border-box;
    }
    
    #top-bar {
      width: 100%;
      height: 70px;
      background-color: white;
      z-index: 1;
    }
    
    #top-bar nav {
      height: 70px;
    }
    
    #nav-buttons {
      height: 70px;
      display: flex;
      flex-direction: column;
      justify-content: center;
      overflow-y: hidden;
      height: 0px;
      transition-property: all;
      transition-duration: .5s;
      transition-timing-function: cubic-bezier(0, 1, 0.5, 1);
    }
    
    nav #nav-buttons li {
      list-style-type: none;
      width: 100%;
      background-color: black;
    }
    
    nav #nav-buttons li a {
      display: block;
      width: 100%;
      line-height: 10.5vh;
      text-align: center;
      text-decoration: none;
      color: white;
    }
    
    .dropdown {
      display: flex;
      flex-wrap: wrap;
      flex-direction: column;
    }
    
    .dropdown-sub {
      display: none;
      z-index: 1;
      flex-direction: column;
    }
    
    @media only screen and (min-width: 20px) {/*768px ofc*/
      /*=======Top bar for desktop======*/
      #nav-buttons {
        overflow: visible;
      }
      #top-bar nav {
        width: 75%;
        float: right;
      }
      #top-bar nav #nav-buttons {
        height: 70px;
        flex-direction: row;
        justify-content: space-evenly;
      }
      nav #nav-buttons li {
        background-color: white;
      }
      nav #nav-buttons li a {
        color: black;
        line-height: 70px;
      }
      nav #nav-buttons li a:hover {
        color: red;
        transition: 0.45s;
      }
      .dropdown-title:hover+.dropdown-sub,
      .dropdown-sub:hover {
        cursor: pointer;
        display: flex;
      }
      .dropdown-title:hover+.dropdown-option:hover {
        background-color: #aaaaaa;
      }
      .dropdown {
        position: relative;
      }
      .dropdown-sub {
        position: absolute;
        top: 100%;
        left: 0;
      }
      /*=======Top bar for desktop======*/
    }
    <div id="top-bar">
      <nav>
        <ul id="nav-buttons">
          <li><a href="#">Menu</a></li>
          <li class="dropdown" style="background-color:#aaa;">
            <a class="dropdown-title">Sub menu</a>
            <ul class="dropdown-sub">
              <li class="dropdown-option">option 1</li>
              <li class="dropdown-option">option 2</li>
              <li class="dropdown-option">option 3</li>
            </ul>
          </li>
          <li><a href="#">Menu</a></li>
          <li><a href="#">Menu</a></li>
          <li><a href="#">Menu</a></li>
          <li><a href="#">Menu</a></li>
        </ul>
      </nav>
    </div>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-22
      • 2014-08-04
      • 1970-01-01
      • 2018-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-26
      相关资源
      最近更新 更多