找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2969|回复: 0

[教程]  CSS pointer-events下层元素被点击

[复制链接]
发表于 2011-12-30 10:30:14 | 显示全部楼层 |阅读模式 来自 中国–江苏–南京
是否曾经有过这样的经历:把一个元素置于另一个元素之上,而希望下面的那个元素成为可点击的?现在,利用css的pointer-events属性即可做到。
CSS pointer-events
Pointer-events原本来源于SVG,目前在很多浏览器中已经得到体现。不过,要让任何HTML元素生效还得借助于一点点css。该属性称之为pointer-events,基本上可以将它设置为auto,这是正常的行为,而“none”是一个有趣的属性。
将它应用到一个元素
如果你已经设置一个元素的css属性为pointer-events: none。它将不会捕获任何click事件,而是让事件穿过该元素到达下面的元素,就像这样:
  1. <style>
  2.     .overlay {
  3.         pointer-events: none;
  4.     }
  5. </style>
  6. <div id="overlay" class="overlay"></div>
复制代码
浏览器支持到目前为止,Firefox 3.6+、Safari 4 和Google Chrome支持Pointer-events。我觉得Opera和IE肯定会尽快赶上,我不知道它们的计划中是否支持它。
小演示
我将Pointer-events行为的演示放在一起,在那里你可以自己测试它。正如你看到的那样,右边灰色的盒子阻止单击下面的链接。但是,如果你单击checkbox对其禁用Pointer-events。下面链接的click事件将被触发。
演示页完整的代码如下所示:
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="utf-8">
  5.     <title>CSS pointer events</title>
  6.     <style>
  7.         .container {
  8.             position: relative;
  9.             width: 370px;
  10.             font: 15px Verdana, sans-serif;
  11.             margin: 10px auto;
  12.         }
  13.   
  14.         .overlay {
  15.             position: absolute;
  16.             right: 0px;
  17.             top: 0;
  18.             width: 40px;
  19.             height: 40px;
  20.            background: rgba(0, 0, 0, 0.5);
  21.         }
  22.         .pointer-events-none {
  23.             pointer-events: none;
  24.         }
  25.     </style>
  26.     <script>
  27.         window.onload = function () {
  28.             document.getElementById("enable-disable-pointer-events").onclick = function () {
  29.                 document.getElementById("overlay").className = "overlay " + ((this.checked)? "pointer-events-none" : "");
  30.             };
  31.         };
  32.     </script>
  33. </head>
  34. <body>
  35. <div class="container">
  36.     <a href="http://twitter.com">Twitter</a>, <a href="http://twitter.com">Twitter</a>, <a href="http://twitter.com">Twitter</a>, <a href="http://twitter.com">Twitter</a>, <a href="http://twitter.com">Twitter</a>, <a href="http://twitter.com">Twitter</a>, <a href="http://twitter.com">Twitter</a>, <a href="http://twitter.com">Twitter</a>, <a href="http://twitter.com">Twitter</a>, <a href="http://twitter.com">Twitter</a>, <a href="http://twitter.com">Twitter</a>, <a href="http://twitter.com">Twitter</a>, <a href="http://twitter.com">Twitter</a>, <a href="http://twitter.com">Twitter</a>,
  37.     <div id="overlay" class="overlay"></div>
  38.     <p>
  39.         <input id="enable-disable-pointer-events" type="checkbox">
  40.         <label for="enable-disable-pointer-events">Disable pointer events for grey box</label>
  41.     </p>
  42. </div>
  43. </body>
  44. </html>
复制代码

实际的例子
如果你进入Twitter(国内好像不能登录到该网站,如下图所示)的开始页,而且没有登录。在底部你将看到很多列出的标签。在右边的一个元素,有一张褪色的图片覆盖其上产生这样的效果。不幸的是下面的链接无法点击。如果你在css中添加一行代码,就可以了。
现在,如果你需要这种效果,你有了一个非常简单的方法。

评分

参与人数 1金币 +1 收起 理由
光明使者 + 1 赞一个!

查看全部评分

发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;

如何回报帮助你解决问题的坛友,好办法就是点击帖子下方的评分按钮给对方加【金币】不会扣除自己的积分,做一个热心并受欢迎的人!

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 需要先绑定手机号

关闭

站长推荐上一条 /1 下一条

QQ|侵权投诉|广告报价|手机版|小黑屋|西部数码代理|飘仙建站论坛 ( 豫ICP备2022021143号-1 )

GMT+8, 2024-11-22 09:37 , Processed in 0.045283 second(s), 10 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表