【问题标题】:div overlap in IE 11 blocks eventsIE 11 阻止事件中的 div 重叠
【发布时间】:2013-11-28 01:51:39
【问题描述】:

当我在 IE 11 中有重叠的 div 时,第一个带有单选按钮的 div 会被第二个重叠的 div 阻止接收任何鼠标事件,所以我无法单击单选按钮!请参阅我正在使用的代码的简化示例:

<div>
<div style="display: block; border: solid 1px blue;">
    <table>
        <tr>
            <td><input id="rbl_0" type="radio" checked="checked"><label for="rbl_0">Option 1</label></td>
            <td><input id="rbl_1" type="radio"><label for="rbl_1">Option 2</label></td>
         </tr>
    </table>
</div>

<div style="margin-top: -23px; display: inline-block; border: solid 1px red;">                  
    <table style="width: 100%; table-layout: fixed;">
        <tr><td>&nbsp;</td></tr>
        <tr><td>Product 1</td></tr>
        <tr><td>Product 2</td></tr>
    </table>
</div></div>

在 JSFiddle 中:http://jsfiddle.net/yW6kp/1/

我需要这些重叠,但也需要单选按钮上的事件发生。我可以通过在第二个 div 上使用 display: block 而不是 display: inline-block 来实现这一点,但是它们不会重叠。这在 IE 10 或 IE 11 兼容模式下不会发生。谁能解释一下怎么回事

【问题讨论】:

    标签: css internet-explorer internet-explorer-11


    【解决方案1】:

    首先让我解释一下为什么会这样,你有一个没有背景颜色的 div,但它仍然是一个 block 元素。想象一下,你有一个士力架,嗯,你把它夹在两层玻璃之间。

    你可能会看到那个美味的士力架,但你很难把手伸进一个固体物体来拿到它。

    input 标签也是如此。它被困在两层之间,其中一层是它的父级。他们可能没有背景,但这不会使其背景开放。

    这是 html 的外观,

    <div>
    <div style="display: block; border: solid 1px blue;height: 35px;">
    
    </div>
    
    <div style="margin-top: -25px; display: inline-block; border: solid 1px red;">
        <table>
            <tr>
                <td><input id="rbl_0" type="radio" checked="checked" /><label for="rbl_0">Option 1</label></td>
                <td><input id="rbl_1" type="radio" /><label for="rbl_1">Option 2</label></td>
             </tr>
        </table>
        <table style="width: 100%; table-layout: fixed;">
            <tr><td>&nbsp;</td></tr>
            <tr><td>Product 1</td></tr>
            <tr><td>Product 2</td></tr>
        </table>
    </div>
    

    这是一个 jsfiddle,看看它是如何工作的,fiddle

    【讨论】:

    • 乔希,谢谢你的回复,我觉得这个比喻很幽默,但它错过了问题的根源。我之前的代码适用于 IE 10,但不适用于 11。问题在于显示类型 inline-block。在这里看到一个更好的例子:jsfiddle.net/yW6kp/4
    • 好的,我明白你在问什么。我会很快查到这一点,但根据我的知识,IE 有很多问题。由于它在 Chrome 或 Firefox 中不起作用,我会说这是 IE 10 的错误,并在 IE 11 中得到了纠正。让我快速检查一下。
    • 您可能正确地说它在 IE 10 中是错误的,并且可能在 IE 11 中得到修复。另外,如果这是一个分层问题,为什么 z-index 没有任何效果? z-index 对 inline-block 元素没有影响吗?
    • 这是一本关于你应该做什么的好书,stackoverflow.com/questions/3680429/…
    • 您的元素是使用relativeabsolute 还是fixed 定位的? Z-index 仅适用于定位元素。
    【解决方案2】:

    你为什么不直接添加

    pointer-events:none;
    

    到你的第二个 div?喜欢(使用你的代码)

    <div>
    <div style="display: block; border: solid 1px blue;">
        <table>
            <tr>
                <td><input id="rbl_0" type="radio" checked="checked"><label for="rbl_0">Option 1</label></td>
                <td><input id="rbl_1" type="radio"><label for="rbl_1">Option 2</label></td>
             </tr>
        </table>
    </div>
    
    <div style="margin-top: -23px; display: inline-block; pointer-events:none; border: solid 1px red;">                 
        <table style="width: 100%; table-layout: fixed;">
            <tr><td>&nbsp;</td></tr>
            <tr><td>Product 1</td></tr>
            <tr><td>Product 2</td></tr>
        </table>
    </div>
    

    使用它,您可以整天点击另一个 div。

    【讨论】:

      【解决方案3】:

      Internet Explorer 11 处理此问题的方式似乎与 Firefox 和 Chrome 处理它的方式相同。我稍微修改了您的代码以说明正在发生的事情,以及为什么当您的 inline-block 元素向上移动到其相邻的输入字段上方时您无法单击单选按钮。

      在第一个示例中,我们看到输入元素本身出现在inline-block 元素的后面,使得从红色元素的边界内无法访问它们。但是,它们确实从红色元素后面窥视,使我们能够单击输入元素的上半部分。

      相比之下,底部示例显示了将第二个元素从 inline-block 更改为 block 的结果。在这个例子中,输入元素出现在块级元素的上方。这似乎更类似于 IE10 处理示例的方式。

      至于两者之间的区别是什么,我不完全确定。这可能是由原子内联级框引起的,它们有助于其主机的内联格式,以及它们内部的内联格式。块元素不这样做。

      解决方案

      解决此问题的方法是避免表单与其他元素重叠,这通常是一种不好的做法。或者,您可以为两个容器提供相对定位,并为托管我们表单的容器提供更高的 z-index。这会将元素及其所有内容提升到红框上方。

      .box {
          position: relative;
      }
      
      .higher {
          z-index: 1;
      }
      
      <div class="box higher"><!-- inputs --></div>
      <div class="box"><!-- text --></div>
      

      这将导致如下所示:

      我已在修改后的小提琴中提供了这些更改,非常欢迎您探索。如果有任何方法可以帮助我进一步探索这个问题,请告诉我。

      小提琴:http://jsfiddle.net/yW6kp/11/show/

      【讨论】:

        猜你喜欢
        • 2015-04-08
        • 1970-01-01
        • 2013-07-27
        • 1970-01-01
        • 2021-04-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多