【问题标题】:hover over two elements set effect to one element将鼠标悬停在两个元素上将效果设置为一个元素
【发布时间】:2016-08-23 07:31:33
【问题描述】:

我的导航中有这个列表项,它有一个下拉菜单

 <li class="projects">
      <a href="#">Projects</a>
      <i class="fa fa-angle-down" aria-hidden="true"></i>
      <ul class="list-unstyled myDropDown">
             <li><a href="#">King SALEH Bridge</a></li>
             <li><a href="#">Internationl future schools</a></li>
             <li><a href="#">Elwakeel Companies Group</a></li>
      </ul>
 </li>

这里是样式

nav .myDropDown{
    display:none;
    position:absolute;
    min-height:160px;
    background-color:#ffb700;
    top:calc(15px + 100%)
}

我想在 li.projects 上悬停时显示 .myDropDown ,当鼠标悬停在 .myDropDown 本身时它仍然显示,当鼠标不在 li.projects 或 .myDropDown 时它消失。

我有这个 jquery 代码,但它不起作用?!

 $("nav .projects").hover(function(){
     $("nav .myDropDown").css("display","block");
 });
 $("nav .myDropDown").hover(function(){
           $(this).css("display","block");
  },function(){
           $(this).css("display","none");
 });

【问题讨论】:

  • 为什么你不使用纯 CSS 呢?
  • 您的导航未包含在 OP 中
  • 我尝试这样做,但它不起作用.. nav ul li.projects:hover .myDropDown{ display:block } nav .myDropDown:hover{ display:block }
  • @guradio nav ul li.projects 是一个像它的兄弟姐妹一样的孩子列表项目到父导航

标签: jquery html css drop-down-menu jquery-hover


【解决方案1】:

您可能应该使用提供的 CSS 答案。但如果你想使用 javascript,你应该这样做:

 $("nav .projects").hover(function(){
    $(this).find(".myDropDown").css("display","block");
 }, function(){
     $(this).find(".myDropDown").css("display","none");
 });

如果您希望 top:calc(15px + 100%) 重叠,则不能保留它。如果您在下拉列表和链接之间留有间隙,则在输入之前将其删除。 CSS 方案也是如此。

https://jsfiddle.net/80tbzcjh/1/

【讨论】:

【解决方案2】:

为什么不只是 CSS?

ul.myDropDown{
  display: none;
}

li.projects:hover > ul.myDropDown{
  display: block;
}
<li class="projects">
      <a href="#">Projects</a>
      <i class="fa fa-angle-down" aria-hidden="true"></i>
      <ul class="list-unstyled myDropDown">
             <li><a href="#">King SALEH Bridge</a></li>
             <li><a href="#">Internationl future schools</a></li>
             <li><a href="#">Elwakeel Companies Group</a></li>
      </ul>
 </li>

编辑:我改变了你的最高价值并且它有效:

li.projects {
 position: relative; 
}

ul.myDropDown{
  display:none;
    position:absolute;
    min-height:160px;
    background-color:#ffb700;
    top: 0px;
}

li.projects:hover > ul.myDropDown{
  display: block;
}
<li class="projects">
      <a href="#">Projects</a>
      <i class="fa fa-angle-down" aria-hidden="true"></i>
      <ul class="list-unstyled myDropDown">
             <li><a href="#">King SALEH Bridge</a></li>
             <li><a href="#">Internationl future schools</a></li>
             <li><a href="#">Elwakeel Companies Group</a></li>
      </ul>
 </li>

【讨论】:

  • 它不起作用兄弟,因为 ul.myDropDown 具有绝对位置,并且当悬停在 li.projects 上时,会显示下拉菜单,但是当悬停在 ul.myDropDown 本身上时,它会消失,因为您离开了鼠标关于 li.projects
  • 现在顶部:0?问题是您将它绝对移动到页面底部,并且两个元素之间的间隙被计为“不悬停”,因此它消失了。
  • 是的,问题出在顶级属性上,现在可以正常工作了,非常感谢兄弟
【解决方案3】:

这样用

li:hover .myDropDown{dispaly:block;}

【讨论】:

  • 它不起作用兄弟,因为 ul.myDropDown 具有绝对位置,并且当悬停在 li.projects 上时,会显示下拉菜单,但是当悬停在 ul.myDropDown 本身上时它会消失,因为您离开了鼠标关于 li.projects
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-16
  • 1970-01-01
  • 2015-11-18
  • 1970-01-01
  • 2020-01-03
相关资源
最近更新 更多