下拉菜单和子菜单之间的间隙

3
我希望子菜单距离菜单底部显示10像素,我可以使用ul的margin-top来实现,但这样会有一个间隙,导致我无法移动鼠标到子菜单上。有与此非常相似的帖子,但我从中无法得出答案。像这个 Space between menu and drop down menu

deepMenu {
  background: black !important;
  margin-left: 100px !important;
  position: absolute !important;
}
.lmao li ul {
  display: none;
  position: absolute;
  border-top: 5px solid black;
  margin-top: 18px;
}
.lmao li ul li {
  display: none;
  border-top: 0.1px solid #F2F2F2;
  padding: 10px 40px 10px 10px;
  margin: 0;
  position: relative;
  z-index: 9999999;
  background: white;
  font-size: 8pt;
  line-height: 24px;
  text-align: left;
}
.lmao li:hover > ul,
.lmao li:hover > ul li {
  display: block;
}
<ul class="lmao">
  <li class="point1"><a href="index.html">home</a>
    <ul>
      <li><a href="#">Sub Menu 1</a></li>
      <li><a href="#">Sub Menu 2 long lel</a></li>
      <li><a href="#">Sub Menu 3 really bare long mad</a></li>
      <li><a href="#">Sub Menu 4 dvg</a></li>
    </ul>

    <li class="point"><a href="index.html">features</a>
      <ul>
        <li><a href="#">sdfgsdfgsdfgsdfgsdfgsdfg</a></li>
        <li><a href="#">sdfg</a></li>
        <li><a href="#">sdfgsdfgsdfgsdfg</a></li>
        <li><a href="#">sdfgsdfgsdfgsdfgsdfg</a></li>
      </ul>

      <li class="point layout"><a href="#">Layouts</a>
        <ul>
          <li><a href="#">sfdgsdfgsdfgsdfgsdfgdfgsdgsdf</a></li>
          <li><a href="#">sfdgsdfgsdfgl</a></li>
          <li><a href="#">dfsgsdfgsdfgsdfgsdfgsdfgsdfg</a></li>
          <li class="arrow"><a href="#">sfgsdfg</a>
            <ul class="deepMenu">
              <li><a href="#">Deep Menu 1</a>
                <ul>
                  <li><a href="#">Sub Deep 1</a></li>
                  <li><a href="#">Sub Deep 2</a></li>
                  <li><a href="#">Sub Deep 3</a></li>
                  <li><a href="#">Sub Deep 4</a></li>
                </ul>
              </li>
              <li><a href="#">Deep Menu 2</a></li>
            </ul>
          </li>
        </ul>
      </li>

      <li class="point"><a href="index.html">pages</a></li>
      <li class="point"><a href="index.html">light version</a></li>
</ul>


为什么不试试 .lmao li ul { display: none; position: absolute; border-top: 5px solid black; margin-top: 0px; } 查看演示 - SaidbakR
在这种情况下最好使用填充而不是边距。尝试在你的类菜单中更改它。 - Marco Romano
2个回答

1

更新:

既然您提供了参考,悬停菜单实际上并不远离li本身,而是直接定位在其下方。在示例网站上,li的高度大于其中的文本,并且具有position:relative;。

下拉菜单绝对定位在这个更大的<li>元素的正下方,使用top: 100%;,这样它就远离触发下拉菜单的文本。

请查看以下更新的代码片段,其中包含更新的解决方案。


边距不可“悬停”,因此悬停选择器不会触发。一种保持远离同时可“悬停”的方法是使用padding而不是边距。

因此,您可以更改您的.lmao li ul,尽管我不建议向标签添加样式作为CSS最佳实践,我通常采用CSS命名约定,如BEM、SMACSS等。

/* Reset the ul style */
ul {
  list-style: none;
  padding: 0;
  margin: 0;
}

deepMenu {
  background: black !important;
  margin-left: 100px !important;
  position: absolute !important;
}

.lmao {
  width: 100%;
  text-align: center;
}

.lmao li {
  display: inline-block;
  background-color: white;
  padding: 15px;
  position: relative;
  padding: 20px;
}

.lmao li a {
  text-decoration: none;
  color: black;
}

.lmao li a:hover {
  text-decoration: none;
  color: #f38763;
}

.lmao li ul {
  display: none;
  position: absolute;
  border-top: 5px solid black;
  top: 100%;
  min-width: 200px;
}

.lmao li ul li {
  display: none;
  border-top: 0.1px solid #F2F2F2;
  padding: 10px 40px 10px 10px;
  margin: 0;
  position: relative;
  z-index: 9999999;
  background: white;
  font-size: 8pt;
  line-height: 24px;
  text-align: left;
}
.lmao li:hover > ul,
.lmao li:hover > ul li {
  display: block;
}
<ul class="lmao">
  <li class="point1"><a href="index.html">home</a>
    <ul>
      <li><a href="#">Sub Menu 1</a>
      </li>
      <li><a href="#">Sub Menu 2 long lel</a>
      </li>
      <li><a href="#">Sub Menu 3 really bare long mad</a>
      </li>
      <li><a href="#">Sub Menu 4 dvg</a>
      </li>
    </ul>

    <li class="point"><a href="index.html">features</a>
      <ul>
        <li><a href="#">sdfgsdfgsdfgsdfgsdfgsdfg</a>
        </li>
        <li><a href="#">sdfg</a>
        </li>
        <li><a href="#">sdfgsdfgsdfgsdfg</a>
        </li>
        <li><a href="#">sdfgsdfgsdfgsdfgsdfg</a>
        </li>
      </ul>

      <li class="point layout"><a href="#">Layouts</a>
        <ul>
          <li><a href="#">sfdgsdfgsdfgsdfgsdfgdfgsdgsdf</a>
          </li>
          <li><a href="#">sfdgsdfgsdfgl</a>
          </li>
          <li><a href="#">dfsgsdfgsdfgsdfgsdfgsdfgsdfg</a>
          </li>
          <li class="arrow"><a href="#">sfgsdfg</a>
            <ul class="deepMenu">
              <li><a href="#">Deep Menu 1</a>
                <ul>
                  <li><a href="#">Sub Deep 1</a>
                  </li>
                  <li><a href="#">Sub Deep 2</a>
                  </li>
                  <li><a href="#">Sub Deep 3</a>
                  </li>
                  <li><a href="#">Sub Deep 4</a>
                  </li>
                </ul>
              </li>
              <li><a href="#">Deep Menu 2</a>
              </li>
            </ul>
          </li>
        </ul>
      </li>

      <li class="point"><a href="index.html">pages</a>
      </li>
      <li class="point"><a href="index.html">light version</a>
      </li>
</ul>


填充到哪里? - user5635857
@RhysEdwards 我已经更新了答案以反映我的意思。 - Lucas Lazaro
@RhysEdwards,更新的问题是否有助于您解决问题?如果您有任何进一步的问题,请随时提问。 - Lucas Lazaro
嗨,这确实有所帮助,我一定会研究更好的命名约定。但是通过添加填充,它在我的下拉菜单顶部和其边框顶部之间创建了一个间隙。我想让下拉菜单上的ul具有像此网站上那样的边框顶部: - user5635857
显示剩余2条评论

1

body {
    background-color: #cac3bc
}
nav {
 float: left;
}
nav ul ul {
 display: none;
}
 nav ul li:hover > ul {
  display: block;
 }
 nav ul {
 background-color: #fff;
 margin-top: 10px;
 padding: 0 20px;  
 list-style: none;
 position: relative;
 display: inline-table;
 margin-right: -80px;
}
 nav ul li {
 float: left;
}
  nav ul li:hover {
   border-bottom: 5px solid #f5aa65;
            color: #fff;
   
  }
  nav ul li a:hover {
   color: #000;
  }
 
 nav ul li a {
  display: block; 
  padding: 15px 15px;
  font-family: 'PT Sans', sans-serif;
  color: #000; 
  text-decoration: none;
 }
 nav ul ul {
 background-color:#fff;
 border-radius: 0px; 
 padding: 0;
 position: absolute;
 top: 100%;
 box-shadow: 0px 0px 9px rgba(0,0,0,0.15);
}
 nav ul ul li {
  float: none; 
  position: relative;
 }
  nav ul ul li a {
   padding: 15px 40px;
   color: #000;
  }

nav ul ul:before {
        content: "";
        display: block;
        height: 20px;
        position: absolute;
        top: -20px;
        width: 100%;
    }
<body>
<nav>
 <ul>
  <li><a href="#">One</a>
         <ul>
    <li><a href="1.html">A</a></li>
    <li><a href="2.html">B</a>
            </ul>
        </li>
  <li><a href="#">Two</a>
   <ul>
    <li><a href="3.html">A</a></li>
    <li><a href="4.html">B</a></li>
    <li><a href="5.html">C</a></li>
   </ul>
  </li>
  <li><a href="#">Three</a>
   <ul>
    <li><a href="6.html">A</a></li>
    <li><a href="7.html">B</a></li>
   </ul>
  </li>
  <li><a href="8.html">Four</a></li>
 </ul>
</nav>
</body>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接