当前位置: 首页 > 面试题库 >

防止在父Div上触发Div的悬停事件?

麹浩瀚
2023-03-14
问题内容

当我.mensal将鼠标悬停在.operaDIV上时,它将触发将鼠标悬停在父DIV上,这对我来说似乎是错误的。我只希望“突出显示”效果在子.operaDIV
上起作用。

#operaContent {

  padding: 0 50px 0 50px;

  position: relative;

  overflow: visible;

}

#operaContent .opera {

  display: block;

  border: 1px solid #FFFFFF;

  border-bottom: 1px solid #DDDDDD;

  padding: 5px;

  margin-bottom: 10px;

  height: 120px;

  background-color: #0A8ECC;

}

#operaContent .opera:hover {

  border: 1px solid #AAAAAA;

  background-color: #DDDDDD;

  cursor: pointer;

}

.mensal {

  position: absolute;

  top: 1px;

  left: 8px;

  z-index: 3;

  display: block;

}


<div id="operaContent">

  <div class="opera">

    <div class="mensal">

      DIV

    </div>

  </div>

</div>

问题答案:

根据定义,将鼠标悬停在孩子上,也将鼠标悬停在父母上。html事件中没有“阻止”。

有两个方法链,气泡和捕获。

W3C事件模型中发生的任何事件都首先被捕获,直到到达目标元素,然后再次冒泡。

http://www.quirksmode.org/js/events_order.html

您要停止此操作的唯一方法是通过向页面添加javascript以防止链接来防止冒泡。这在jQuery中很简单

$('.mensal').hover(function(e){
    e.stopPropagation();

});

在我看来,在处理CSS时,此答案完全无济于事。Javascript事件不会处理CSS选择器,也不会阻止它们。

不幸的是,仅凭CSS,我不知道实现此目的的方法(甚至在javascript中也可能很棘手)。CSS4选择器将允许您指定选择器的主题以便您可以执行以下操作

 #operaContent .opera:hover! .mensal:not(:hover) { /*your css*/ }

但这尚未实施,并且仍在为草案进行开发。

编辑:这是一个应该为您工作的javascript(jQuery)实现

$(function(){
    $('.opera').hover(function() {$(this).addClass('hoverIntent')}, 
                      function(){ $(this).removeClass('hoverIntent'); }
                     );

    $('.opera .mensal').hover(function() {
        $(this).parent('.opera').removeClass('hoverIntent');
    });

})​

和修改后的CSS

#operaContent {
    padding: 0 50px 0 50px;
    position: relative;
    overflow: visible;
}

#operaContent .opera {
    display: block;
    border: 1px solid #FFFFFF;
    border-bottom: 1px solid #DDDDDD;
    padding: 5px;
    margin-bottom: 10px;
    height: 120px;
    background-color: #0A8ECC;
}


#operaContent .opera.hoverIntent {
    border: 1px solid #AAAAAA;
    background-color: #DDDDDD;
    cursor: pointer;
}

.mensal {
    position: absolute;
    top: 1px;
    left: 8px;
    z-index: 3;
    display: block;
}​


 类似资料:
  • 问题内容: 如果我有标记: .a类具有与之关联的悬停类 .b类具有与之关联的伪元素…像这样: CSS是否有可能防止伪元素触发.a类悬停? 小提琴 问题答案: 以下CSS为现代浏览器(而非IE10-)提供了诀窍: 允许元素不接收悬停/点击事件。 警告 对非SVG元素的支持处于相对早期的状态。developer.mozilla.org给您以下警告: 在CSS中将指针事件用于非SVG元素是实验性的。 该

  • 问题内容: 我在绝对位置div中的函数遇到麻烦。当鼠标点击div中的一个子元素时,将触发mouseout事件,但是我不希望它触发,直到鼠标不在父绝对div之外。 我如何防止事件在没有jquery的情况下击中子元素而触发。 我知道这与事件冒泡有关,但是我没有运气去寻找解决方法。 但是,该解决方案使用jQuery。 问题答案: 我制作了一个快速的JsFiddle演示,其中包含所有需要的CSS和HTML

  • 问题内容: 考虑以下代码段: 现在,假设外部div有一个与之关联的活动对象。我如何确保在内部任何地方都不会触发直播? 编辑: 这是要求的JS 单击“ .inner-div”时不应触发此操作 问题答案: 您必须向内部子级添加事件侦听器,并取消事件的传播。 在普通JS中,类似 要么

  • 我为侧栏导航制作了这种样式 我制作了一个长方体,并使用“变换”将其隐藏在左侧,以获得弯曲的边界效果。 悬停时,激活ect 边框按钮- 有什么东西可以添加到主div中,以同时激活每个子元素中的悬停效果吗? 现在,只有当我将鼠标悬停在每个单独的元素上时,它才会工作。 任何帮助都非常感谢:)

  • 问题内容: 我有一个div,其内容可能会以各种方式更改:例如,可以通过innerHTML重新加载其整个内容,或者可以通过DOM方法添加节点。反过来,这可能是通过本地javascript发生的,也可能是通过调用jQuery API或其他库间接发生的。 我希望在div的内容改变为执行一些代码,但我 绝对没有控制 上 如何 将改变。确实,我正在设计一个可供其他人使用的小部件,他们可以自由选择自己喜欢的d

  • 问题内容: 这是第二简单的翻转效果,但我仍然找不到任何简单的解决方案。 想要的: 我有一个项目列表和一个相应的幻灯片(DIV)列表。加载后,第一个列表项应被选中(粗体),并且第一张幻灯片应可见。当用户将鼠标悬停在另一个列表项上时,应改为选择该列表项,并显示相应的幻灯片。 以下代码有效,但 很糟糕 。如何以一种优雅的方式获得这种行为?jQuery具有数十种动画效果和复杂的过渡效果,但是我没有想出这种