当relative遇上z-index,半透明度不阻断事件捕获

今天在做页面的时候,遇到一个li点点击事件无法触发的问题,在一步步console,发现添加事件的代码正确运行,切打印添加事件的对象没有错之后,

我就检查是否有透明的元素遮住了它,发现也并没有啊。于是我给li加上cursor: pointer; 惊悚地发现鼠标移上去的确不变手。然后我又惊悚地发现,我在li的样式中有一个z-index:-1; 于是我把z-index去掉,li鼠标在li上顺利变成了一只手。后面我发现,原来真正的原因是还有哟个position:relative;

当把li的position设为relative的时候,li已经脱离的文档流了,此时ul只是在文档结构中是li的父元素,而li在流中并不认ul作为父元素,就相当于li是在ul的外面定义的,所以li和ul比较层叠上下文的时候,就不存在父子关系(遵循后来居上和z-index的原则)。所以,z-index:-1;加上position:relative;会被父类覆盖,当然就加不了事件,之前我还一直天真以为relative的元素,还会认文档结构的父元素当爸爸,没想到relative元素也是暴脾气啊。以下是测试

ul{
        /*background-color: aqua;*/
        /*opacity: 0.6;*/
        /*float: left;*/
        /*position: relative;*/
    }
    ul>li{
       display: inline-block;
        width: 100px;
        height: 100px;
        z-index: -1;
        margin: 10px 10px;
        background-color: #1977a1;
        position: relative;
     cursor: pointer;
    }
 
 

效果如下:

看起来似乎没有什么问题,但是这个时候,li的hover:pointer在鼠标移上去的时候,并没有效果,点击事件也没效果。把relative或z-index:-1;中任何一个去掉,li的事件和hover(变手)都有效。

本来事情到这里就该结束了,可我又发现一个很神奇的事情,当我设置ul的透明度不为1的时候,鼠标又可以投过ul,触发li的hover和事件,代码如下

<style>
    ul{
        background-color: aqua;
        opacity: 0.9;
        /*float: left;*/
        /*position: relative;*/
    }
    ul>li{
       display: inline-block;
        width: 100px;
        height: 100px;
        z-index: -1;
        margin: 10px 10px;
        background-color: #1977a1;
        position: relative;
        cursor: pointer;
    }

</style>
<script>

    $(function(){

        $("li").on("click",function(){

            alert("你点击了li哦");
        });

    });

</script>

点击的时候有触发事件:

为什么会这样呢,难道透明度不为1的元素,对鼠标事件也是透明的么。我不太认同这个看法,于是我又用了一个跟ul和li没有半毛钱关系的div来遮住他们,并且设置透明度为0.5,看看他们的是否能穿透鼠标事件:代码

<head>
    <meta charset="utf-8">
    <title>ces</title>
    <script type="text/javascript" src="js/jquery-1.8.3.min.js"></script>
</head>
<body>

<style>
    ul{
        background-color: aqua;
        opacity: 0.9;
        /*float: left;*/
        /*position: relative;*/
    }
    ul>li{
       display: inline-block;
        width: 100px;
        height: 100px;
        z-index: -1;
        margin: 10px 10px;
        background-color: #1977a1;
        position: relative;
        cursor: pointer;
    }
    div{
        background-color: antiquewhite;
        opacity: 0.5;
        position: absolute;
        top: 0px;
        left: 0px;
        height: 200px;
        width: 100%;

    }

</style>
<script>

    $(function(){

        $("li").on("click",function(){

            alert("你点击了li哦");
        });

    });

</script>
    <ul>
        <li>我是li</li>
        <li>我是li</li>
        <li>我是li</li>
        <li>我是li</li>

    </ul>
    <div></div>

</body>

效果如下,无论,你怎么点击,都触发不了事件:

所以,我断定,透明度不唯一的时候,可以正确地捕获事件,但这个不是穿透,只是可以捕获到子类,所以能触发事件。而透明度为1的时候,捕获不到对象。因为hover和事件的触发关系都是在文档结构的位置决定的,而不是在流中的位置(或者说页面中的位置)决定的。

而元素,只要没有关系的元素,覆盖住另一个元素,就会阻断被覆盖元素的事件,就算覆盖的元素透明度为0(经过测试)。

时间: 2024-10-25 11:24:06

当relative遇上z-index,半透明度不阻断事件捕获的相关文章

当css遇上less

某种程度来讲,css不能称得上程序.虽然它也和其它语言一样,有自己的规范,也需要编码,但它的笨拙实在让我失望.不喜欢css是因为无论怎么优化代码,项目大到一定程序后,都会看上去一团乱.而且有时候一个bug的定位也要花去不少时间.直到我发现了less.突然感慨,css中的jquery大概就是它了. less允许传参数,允许定义变量,可以把层叠的样式组织得较为美观,可以少写许多重复代码--这一切的优势,让我毫不犹豫地要去把它加入接下来的项目. 举个例子: css要这样写: #header h1 {

当东方的企业,遇上西方的流程

当东方的企业,遇上西方的流程 文/韩城彬 中国企业流程管理面临的问题 人治下的管理漏洞 如果说,西方很多管理理念在进入中国后都面临着一个“洋为中用”的问题:那么,在流程管理方面,这个问题表现的尤为突出,它直接反映了中西方管理哲学中对“人”和“事”的本源认识的差异. 中国的儒家思想主张人治,国内企业的很多管理者都认为,管理的核心是管人,管住人了,事情就自然完成了.这种缺乏规范管理的人治模式往往导致了企业里面任人唯亲.派系斗争.组织内部各种人际关系复杂.小团体小帮派的现象.因为,在这种人治的管理模式

当transition遇上display(选项卡效果)

下文转自http://www.cnblogs.com/ihardcoder/p/3859026.html 如demo(如果没有显示,请查看源地址http://jsfiddle.net/ihardcoder/HNduT/2/)所示,基本的效果是在点击"Translate"按钮后,蓝色区域透明度变为0,然后隐藏display:none:点击Reset按钮后,首先显示蓝色区域display:block,然后透明度逐渐恢复至1,代码如下: 复制代码 1 var btn1 = $("#

推荐系统遇上深度学习

推荐系统遇上深度学习(一)--FM模型理论和实践 https://www.jianshu.com/p/152ae633fb00 1.FM背景 在计算广告和推荐系统中,CTR预估(click-through rate)是非常重要的一个环节,判断一个商品的是否进行推荐需要根据CTR预估的点击率来进行.在进行CTR预估时,除了单特征外,往往要对特征进行组合.对于特征组合来说,业界现在通用的做法主要有两大类:FM系列与Tree系列.今天,我们就来讲讲FM算法. 2.one-hot编码带来的问题 FM(F

当微信小程序遇上filter~

在微信小程序的开发过程中,当你想要实现不同页面间的数据绑定,却为此抓耳饶腮时,不妨让微信小程序与filter 来一场完美的邂逅,相信会给你带来别样的惊喜~ 前段时间被安利了一个很实用的公众号-前端早读课,它简洁.大方的页面和方便.实用的功能深深地吸引着我~(^U^)ノ 恰好这段时间学了小程序,就自己仿着写了个前端早读课的小程序. 实现的功能 不同页面间的数据绑定 随机显示数组里的元素 实时显示系统的日期 鼠标点击和页面跳转等基本功能 swiper组件和template样式模板的使用 使用easy

当VB遇上C++

最近在学习VB.NET 这块的东西,自然而然就会想到VB.NET与VB6是什么关系? 宏观上来讲就是从基于对象变成了完全的面向对象,因此不能简单的说VB.NET是VB6.0的升级版本.在学习VB.NET之前,已经接触过C++和VB,所以在学习VB.NET的时候总能看到他们的影子,那种似曾相识的感觉让我不得不仰天长叹:这VB.NET简直就是混搭版本的程序设计语言啊! 在1991年Visual Basic1.0诞生以前,开发人员不得不使用C++和Windows系统本身的未成形的程序块,即所谓的Win

渗透场景篇--当XSS遇上CSRF

你是否有过这样的经历,你发现了一个xss,但是貌似只能叉自己,输出点只有自己可以看见.这个时候,你会觉得这个xss很鸡肋,当你就此忽略这个漏洞的时候,你可能丢掉一个发出组合技能的机会.    今天我们来介绍一个场景,当xss遇上csrf的时候,是否能打出一套漂亮的组合技能. 实验环境:     ZvulDirll[请用下面我简单修改过的版本]     下载地址:在文章最后面 一.安装:0x00:解压ZVulDrill压缩包,将其放在www目录下,也就是你的网站根目录.0x01.编辑ZVulDri

敏捷遇上UML-需求分析及软件设计最佳实践(郑州站 2014-6-7)

邀请函:尊敬的阁下:我们将在郑州为您奉献高端知识大餐,当敏捷遇上UML,会发生怎样的化学作用呢?首席专家张老师将会为您分享需求分析及软件设计方面的最佳实践,帮助您掌握敏捷.UML及两者相结合的实战技巧.时间:2014.06.07(周六),上午9:00-12:00,下午14:00-17:30(时长6.5小时)地点:郑州市畜牧路16号牧业经济学院实验楼B座2518(可乘坐B11.909.962.47路等公交车到老长途汽车北站下车畜牧路向东300米路北)软件知识原创基地www.umlonline.or

当property遇上category

[当property遇上category] @property可以在类定义中,以及extension定义中使用,编译器会自动为@property生成代码,并在变量列表(ivar_list_t)中添加相应的以下划线开头的变量. 在category中,编译器允许定义@property,但不会为此@property生成代码,也即意味着编译器不会在变量列表中加入property的变量.必须人工的实现property的方法. 参考:https://developer.apple.com/library/m