各浏览器中定位元素遮盖其它元素差异性

有时需要用绝对定位元素去遮盖其它元素。多数时候没有什么问题。如果被遮盖的元素添加了鼠标事件(如点击事件),各浏览器下表现则不太一样了。


1,绝对定位元素(未设置background)遮住Input元素,只在IE/Opera中,Input的点击事件能触发。

1
2
3
4
5
6
7
8
9
10
11
12
13
.container{
    width:200px;
    height:100px;
    border:1px solid red;
    position:relative;
}
<div class="container">
    <input type="button" value="click me" onclick="alert('clicked');"/>
    <div style="filter:alpha(opacity=30);opacity:0.3;
                border:1px solid gold;position:absolute;
                top:0;left:0;width:100px;height:50px;">
    </div>
</div>

示例:

Div[class=container] 中有子元素Input,其添加了鼠标单击事件;另一个子元素Div设置了绝对定位,top,left都为0。这样就遮盖住了Input元素。这是点击Input,看看各浏览器中的表现

IE6/7/8/Opera : 弹出提示框:clicked

Firefox/Safari/Chrome : 不弹

很神奇,IE6/7/8/Opera 中虽然绝对定位的div盖住了input,但点击input,仍然能触发其点击事件。而Firefox/Safari/Chrome 则不会触发。


2,绝对定位元素(设置background)遮住Input元素,所有浏览器中均无法触发Input的点击事件。

1
2
3
4
5
6
7
<div class="container">
    <input type="button" value="click me" onclick="alert('clicked');"/>
    <div style="filter:alpha(opacity=30);opacity:0.3;
                border:1px solid gold;position:absolute;
                top:0;left:0;width:100px;height:50px;background:yellow;">
    </div>
</div>

示例:

这时候在所有浏览器中点击input都无法触发其点击事件,也不会弹出clicked。


3,相对定位的元素(未设置背景色)能盖住绝对定位的元素,也只在IE/Opera中能触发Input点击事件。

1
2
3
4
5
6
7
<div class="container">
    <input type="button" value="click me" onclick="alert('clicked');" style="position:absolute;"/>
    <div style="filter:alpha(opacity=30);opacity:0.3;
                border:1px solid gold;position:relative;
                width:100px;height:50px;">
    </div>
</div>

示例:


4,相对定位的元素(设置背景色)能盖住绝对定位的元素,所有浏览器中均无法触发Input点击事件。

1
2
3
4
5
6
7
<div class="container">
    <input type="button" value="click me" onclick="alert('clicked');" style="position:absolute;"/>
    <div style="filter:alpha(opacity=30);opacity:0.3;
                border:1px solid gold;position:relative;
                width:100px;height:50px;background:gray;">
    </div>
</div>

示例:

posted on   snandy  阅读(2657)  评论(2编辑  收藏  举报

编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
< 2011年3月 >
27 28 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 1 2
3 4 5 6 7 8 9

统计

点击右上角即可分享
微信分享提示