【问题标题】:How can I adjust the height of a sub-dropdown menu with CSS?如何使用 CSS 调整子下拉菜单的高度?
【发布时间】:2021-09-29 02:09:04
【问题描述】:

我是新手,正在慢慢自学...我想尝试编写一个下拉菜单,但我注意到我的子菜单在第一个孩子身上有额外的高度。我尝试在菜单栏、主下拉菜单等几个地方调整填充、边距;但老实说,我迷路了。我尝试、阅读和研究的越多,我就越迷失。我认为我以前的编码(如父代码)阻止了我,但我无法完全弄清楚。我认为这也很容易解决。有人想解释我做错了什么吗?非常感谢...

我的 CSS

.body {
    padding: 0;
    margin: 0;
    background: #91A3BD;
    background-size: cover;
    background-position: center;
    box-sizing: border-box;
    font-family: abel;
}
    
.menu-bar {
    background: #1D3860;
    height: 100%;
    width: 100%;
    text-align: center;
    font-family: abel;
    font-style: normal;
    font-size: x-large;
    font-weight: 400;
}
    
.menu-bar ul {
    display: flex;
    align-items: stretch;
    justify-content: space-between;
    width: auto;
    height: auto;
    margin-left: 50px;
    margin-right: 90px;
    list-style: none;
    color: #91A3BD;
    padding-top: 18px;
    padding-right: 0px;
}
    
.menu-bar ul li {
    display: block;
    list-style-type: none;
    color: #91A3BD;
    white-space:nowrap;
}
    
.menu-bar ul li a {
    text-decoration: none;
    color: #91A3BD;
    white-space:nowrap;
}

.current, .menu-bar ul li a:hover {
    text-decoration: underline;
    white-space:nowrap;
}
    
.sub-menu1 {
    display: none;
}
        
.menu-bar ul li:hover .sub-menu1 {
    display: block;
    position: absolute;
    background: #1D3860;
    white-space:nowrap;
}
    
.menu-bar ul li:hover .sub-menu1 ul {
    display: block;
    margin-top: auto;
    margin-right: auto;
    margin-left: -40px;
    margin-bottom: auto;
    white-space: nowrap;
}

.menu-bar ul li:hover .sub-menu1 ul li {
    width: auto;
    padding: 10px;
    border-bottom: 1px solid #fff;
    background: transparent;
    border-radius: 0;
    text-align: left;
    white-space:nowrap;
}
    
.menu-bar ul li:hover .sub-menu1 ul li:last-child {
    border-bottom: none;
}
    
.sub-menu2 {
    display: none;
}
    
.menu-bar ul li:hover .sub-menu1 ul li:hover .sub-menu2 {
    display: block;
    position: absolute;
    margin-top: none;
    margin-left: 146px;
    margin-top: -59px;
    background: #1D3860;
    white-space: nowrap;
 
    
.menu-bar ul li:hover .sub-menu1 ul li:hover .sub-menu2 ul {
    display: block;
    height: auto;
    margin-right: auto;
    margin-bottom: auto;
    white-space:nowrap;
}   
    
.menu-bar ul li:hover .sub-menu1 ul li:hover .sub-menu2 ul li {
    height: auto;
    width: auto;
    margin-top: 0px;
    border-bottom: 1px solid #fff;
    background: transparent;
    border-radius: 0;
    text-align: left;
    white-space: nowrap;
}
    
.menu-bar ul li:hover .sub-menu1 ul li:hover .sub-menu2 ul li:last-child {
    border-bottom: none;
}   

我的 HTML

  <li class="current"><a href="#">Home</a></li>
  <li><a href="#">Über Uns</a></li>
  <li><a href="#">Leonberger</a>
        <div class="sub-menu1">
        <ul><li><a href="#">Hündinnen</a></li>        
          <li><a href="#">Welpen</a>
                <div class="sub-menu2">
                    <ul><li><a href="#">Würfe A</a></li>
                    </ul></div></li>
          <li><a href="#">Notvermittlung</a></li>
        </ul></div></li>
   <li><a href="#">Golden Retriever</a>
        <div class="sub-menu1">
        <ul><li><a href="#">Hündinnen</a></li>
          <li><a href="#">Rüde</a></li> 
          <li><a href="#">Welpen</a>
                <div class="sub-menu2">
                    <ul><li><a href="#">Würfe A</a></li>
                    <li><a href="#">Würfe B</a></li>
                    <li><a href="#">Würfe C</a></li>
                    </ul></div></li>
          <li><a href="#">Notvermittlung</a></li>
        </ul></div></li>
    <li><a href="#">Welpen</a>
        <div class="sub-menu1">
        <ul><li><a href="#">vor dem Kauf</a></li>
          <li><a href="#">Welpen Infos</a></li> 
          <li><a href="#">Garantie</a></li>
          <li><a href="#">Kosten</a></li>
        </ul></div></li>
    <li><a href="#">Services</a>
        <div class="sub-menu1">
        <ul>
            <li><a href="#">Welpenschule</a></li>
            <li><a href="#">Seminare</a></li>
            <li><a href="#">Pension</a></li>
            <li><a href="#">empfohlene Bücher</a></li>
            <li><a href="#">Hundefutter</a></li>
        </ul></div></li>
    <li><a href="#">Kontakt</a></li>
</ul></div>``` 


  [1]: https://i.stack.imgur.com/gQgPP.jpg

【问题讨论】:

  • 您提供的 html 似乎不完整。
  • 您没有共享正确的代码 sn-p。请更新您的问题并分享正确的代码,以便有人可以帮助您。
  • 1.请分享完整的代码 2。看起来您的 HTML 不正确,因此您可能需要在尝试设置样式之前对其进行验证。

标签: html css drop-down-menu height submenu


【解决方案1】:

使用 Global Selector *,我消除了额外的 ma​​rginpadding,这是您的代码出现问题的原因之一。

然后我给了 sub-menu1sub-menu2 position : absolute

我从上到右和左调整了它们的位置。您可以通过查看代码轻松查看更改。

当然,这个菜单没有响应,在全屏模式下测试一下。

* {
  padding: 0;
  margin: 0;
}

.body {
  padding: 0;
  margin: 0;
  background: #91A3BD;
  background-size: cover;
  background-position: center;
  box-sizing: border-box;
  font-family: abel;
}

.menu-bar {
  background: #1D3860;
  text-align: center;
  font-family: abel;
  font-style: normal;
  font-size: x-large;
  font-weight: 400;
}

.menu-bar ul {
  justify-content: space-between;
  width: 100%;
  list-style: none;
  color: #91A3BD;
}

.menu-bar ul li {
  display: inline-block;
  list-style-type: none;
  color: #91A3BD;
  white-space: nowrap;
  padding: 18px 10px;
  position: relative;
}

.menu-bar ul li a {
  text-decoration: none;
  color: #fff;
  white-space: nowrap;
}

.current,
.menu-bar ul li a:hover {
  text-decoration: underline;
  white-space: nowrap;
}

.sub-menu1 {
  border-top: 1px solid #dd3322;
  position: absolute;
  top: -1000px;
}

.menu-bar ul li .sub-menu1 ul li {
  display: block;
}

.menu-bar ul li:hover .sub-menu1 {
  display: block;
  background: #1D3860;
  white-space: nowrap;
  top: 62px;
}

.menu-bar ul li:hover .sub-menu1 ul {
  display: block;
  white-space: nowrap;
  width: 100%;
  left: 0;
}

.menu-bar ul li:hover .sub-menu1 ul li {
  padding: 10px;
  border-bottom: 1px solid #fff;
  background: transparent;
  border-radius: 0;
  text-align: left;
  white-space: nowrap;
}

.menu-bar ul li:hover .sub-menu1 ul li:last-child {
  border-bottom: none;
}

.sub-menu2 {
  border-top: 1px solid #dd3322;
  display: block;
  position: absolute;
  width: 150px;
  top: -1000px;
}

.menu-bar ul li .sub-menu1 ul li .sub-menu2 ul li {
  display: block;
}

.sub-menu1 ul li:hover .sub-menu2 {
  background: #1D3860;
  white-space: nowrap;
  top: 0px;
  right: -150px
}

.sub-menu1 ul li:hover .sub-menu2 ul li {
  padding: 10px;
  border-bottom: 1px solid #fff;
  background: transparent;
  border-radius: 0;
  text-align: left;
  white-space: nowrap;
  display: block;
  white-space: nowrap;
  width: 100%;
  left: 0;
}

.sub-menu1 ul li:hover .sub-menu2 ul li:last-child {
  border-bottom: none;
}
<div class="menu-bar">
  <ul>
    <li class="current"><a href="#">Home</a></li>
    <li><a href="#">Über Uns</a></li>
    <li><a href="#">Leonberger</a>
      <div class="sub-menu1">
        <ul>
          <li><a href="#">Hündinnen</a></li>
          <li><a href="#">Welpen</a>
            <div class="sub-menu2">
              <ul>
                <li><a href="#">Würfe A</a></li>
              </ul>
            </div>
          </li>
          <li><a href="#">Notvermittlung</a></li>
        </ul>
      </div>
    </li>
    <li><a href="#">Golden Retriever</a>
      <div class="sub-menu1">
        <ul>
          <li><a href="#">Hündinnen</a></li>
          <li><a href="#">Rüde</a></li>
          <li><a href="#">Welpen</a>
            <div class="sub-menu2">
              <ul>
                <li><a href="#">Würfe A</a></li>
                <li><a href="#">Würfe B</a></li>
                <li><a href="#">Würfe C</a></li>
              </ul>
            </div>
          </li>
          <li><a href="#">Notvermittlung</a></li>
        </ul>
      </div>
    </li>
    <li><a href="#">Welpen</a>
      <div class="sub-menu1">
        <ul>
          <li><a href="#">vor dem Kauf</a></li>
          <li><a href="#">Welpen Infos</a></li>
          <li><a href="#">Garantie</a></li>
          <li><a href="#">Kosten</a></li>
        </ul>
      </div>
    </li>
    <li><a href="#">Services</a>
      <div class="sub-menu1">
        <ul>
          <li><a href="#">Welpenschule</a></li>
          <li><a href="#">Seminare</a></li>
          <li><a href="#">Pension</a></li>
          <li><a href="#">empfohlene Bücher</a></li>
          <li><a href="#">Hundefutter</a></li>
        </ul>
      </div>
    </li>
    <li><a href="#">Kontakt</a></li>
  </ul>
</div>

【讨论】:

  • 谢谢!我检查并调整了我的 CSS 代码的边距和填充,并将子菜单的位置更改为绝对 - 第一个子菜单现在与它的父级完美对齐。
猜你喜欢
  • 2015-03-14
  • 1970-01-01
  • 1970-01-01
  • 2012-12-05
  • 2021-06-15
  • 2016-06-14
  • 1970-01-01
  • 1970-01-01
  • 2018-11-23
相关资源
最近更新 更多