1

我正在为一家公司制作 CSS3 下拉菜单,但遇到了一个小问题。我首先认为问题是由 wordpress 引起的,但是在 jsfiddle 中重新创建导航后,我知道这是别的东西。

我有一个nav带有两个子菜单的子菜单,在子菜单上我使用了一个伪前元素在顶部给它一个三角形。这是一个很好的效果,经过我的测试,我发现了一个问题。li它的功能很棒并且看起来确实很流畅,但是和之间的空白ul会导致一个相当大的问题,如果您将鼠标悬停在该空白之间,子菜单将关闭,因为它未处于li悬停状态。

我对 css 非常满意,并且尝试了很多选项,但它们都会导致相同的问题。有人有想法么?我宁愿不使用该设计元素,但如果必须,我会还是应该使用 jQuery?

CSS

#top-menu {
  width: 100%;
  height: 50px;
  background: mediumSeaGreen;
}

#top-menu > ul {
  list-style-type: none;
  padding: 0;
  margin: 0 auto;
  width: 70%;
  clear: both;
}

  #top-menu > ul > li {
  float: left;
  width: 11.1%;
  background: #2b2b2b;
  display: block;
  height: 50px;
  line-height: 50px;
  text-align: center;
  color: #fff;
  -webkit-transition: all .5s ease;
  cursor: pointer;
}

#top-menu > ul > li:hover {
  background: mediumSeaGreen;
}

#top-menu > ul > li > ul {
  display: none;
  list-style-type: none;
  margin: 0;
  padding: 5px;
  background: mediumSeaGreen;
  position: relative;
  top: 10px;
  border-radius: 3px;
  box-shadow: 0 -1px 2px #2b2b2b;
}

#top-menu ul li ul:before {
  content: "";
  position: absolute;
  border-right: 10px solid transparent;
  border-left: 10px solid transparent;
  border-bottom: 10px solid mediumSeaGreen;
  top: -10px;
  left: 42%;
  display: block;
  z-index: 1002;
}

#top-menu > ul > li:hover > ul {
  display: block;
}

#top-menu > ul > li > ul > li {
  padding: 0;
  margin: 5px 0 5px 0;
  line-height: 18px;
  color: #2b2b2b;
}

jsFiddle

4

1 回答 1

1

:after您可以在元素后面放置一个透明:before元素。这不是:after假设的使用方式,但看起来效果很好

更新了 jsFiddle

#top-menu ul li ul:after {
    content: "";
    position: absolute;
    top:-10px;
    left:0px;
    height:10px;
    width:100%;
    display:block;
    z-index:1001;
}
于 2013-09-12T18:17:20.680 回答