CSS3 下拉菜单不会从 li 和 ul 之间的空白处保持打开状态

Posted

技术标签:

【中文标题】CSS3 下拉菜单不会从 li 和 ul 之间的空白处保持打开状态【英文标题】:CSS3 dropdown not staying open from whitespace between li and ul 【发布时间】:2013-09-17 01:14:23 【问题描述】:

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

我有一个带有两个子菜单的nav,在子菜单上我使用了一个伪前元素在顶部给它一个三角形。这是一个很好的效果,经过我的测试,我发现了一个问题。它的功能很棒而且看起来真的很流畅,但是liul 之间的空白会导致一个相当大的问题,如果您将鼠标悬停在该空白之间,子菜单将关闭,因为它不在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

【问题讨论】:

【参考方案1】:

您可以在:before 元素后面放置一个透明的:after 元素。这不是:after 的用法,但它似乎工作得很好

Updated jsFiddle

#top-menu ul li ul:after 
    content: "";
    position: absolute;
    top:-10px;
    left:0px;
    height:10px;
    width:100%;
    display:block;
    z-index:1001;

【讨论】:

你就是男人!我找不到任何与此问题相似的东西。除了你之外,没有人愿意帮忙,所以我非常感谢! 很高兴能帮上忙!在旁注中,您可能希望为不支持伪元素的浏览器创建后备。这可能是个问题,具体取决于您希望它覆盖的对象 是的,我已经开始计划这个了,因为我敢肯定,在见到客户之后,他们仍然使用 IE 洞穴人版.. 哈哈,我永远不会明白任何精通技术的人会怎么考虑使用 IE。也许这只是我,但再次感谢你这么多的人。

以上是关于CSS3 下拉菜单不会从 li 和 ul 之间的空白处保持打开状态的主要内容,如果未能解决你的问题,请参考以下文章

下拉菜单中的父 li 不改变悬停时的颜色

li和lu的可点击下拉菜单

下拉菜单案例

CSS 实践:实现下拉菜单的方法

html如何使三级下拉菜单第一级竖直排列

下拉菜单:使用 jQuery 悬停时无限滑动