【问题标题】:IE9 z-index issue with embedded video嵌入视频的 IE9 z-index 问题
【发布时间】:2012-03-25 12:44:48
【问题描述】:

我正在尝试制作一个嵌入在模态窗口中的 iframe 弹出式 YouTube 视频。我让它在 Chrome 和 Firefox 中成功运行,但在 IE 中无法运行。 Flash 视频似乎覆盖了 z-index,即使我将 wmode 设置为透明(我也尝试过不透明,结果相同)。弹出视频的菜单可以正常工作,但带有直接位于视频上方的 onclick 事件的 div 无法正常工作。我已经尝试手动设置几乎每个元素的 z-index,没有任何变化。

我已包含一个演示该问题的 HTML 页面。在 Chrome 和 Firefox 上,如果您单击视频,您将收到一条带有“已单击”消息的警报,但在 IE 中不会发生这种情况。

<html>
<head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
    <script type='text/javascript'>
        $(function(){
            $("ul.dropdown li").hover(function(){
                $(this).addClass("hover");
                $('ul:first',this).css('visibility', 'visible');
            }, function(){
                $(this).removeClass("hover");
                $('ul:first',this).css('visibility', 'hidden');
            });

            $("ul.dropdown li ul li:has(ul)").find("a:first").append(" &raquo; ");
        });
    </script>
    <style type="text/css">
        *                                   { margin: 0; padding: 0; }
        body                                { font: 14px Helvetica, Sans-Serif; } 
        #page-wrap                          { width: 800px; margin: 80px auto; } 
        a                                   { text-decoration: none; }
        ul                                  { list-style: none; }
        p                                   { margin: 15px 0; }

        /* 
            LEVEL ONE
        */
        ul.dropdown                         { position: relative; }
        ul.dropdown li                      { font-weight: bold; float: left; zoom: 1; background: #ccc; }
        ul.dropdown a:hover                 { color: #000; }
        ul.dropdown a:active                { color: #ffa500; }
        ul.dropdown li a                    { display: block; padding: 4px 8px; border-right: 1px solid #333;
                                              color: #222; }
        ul.dropdown li:last-child a         { border-right: none; } /* Doesn't work in IE */
        ul.dropdown li.hover,
        ul.dropdown li:hover                { background: #F3D673; color: black; position: relative; }
        ul.dropdown li.hover a              { color: black; }


        /* 
            LEVEL TWO
        */
        ul.dropdown ul                      { width: 220px; visibility: hidden; position: absolute; top: 100%; left: 0; }
        ul.dropdown ul li                   { font-weight: normal; background: #f6f6f6; color: #000; 
                                              border-bottom: 1px solid #ccc; float: none; }

                                            /* IE 6 & 7 Needs Inline Block */
        ul.dropdown ul li a                 { border-right: none; width: 100%; display: inline-block; } 

        /* 
            LEVEL THREE
        */
        ul.dropdown ul ul                   { left: 100%; top: 0; }
        ul.dropdown li:hover > ul           { visibility: visible; }
    </style>
    <title>IE Bug</title>
</head>
<body>
<div class="page-wrapper">
    <div class="menu">
        <ul class="dropdown" style="z-index: 100;">
            <li>
                <a href="#">Menu</a>
                <ul class="sub_menu">
                    <li><a href="#">Sub Item 1</a></li>
                    <li><a href="#">Sub Item 2</a></li>
                </ul>
            </li>
        </ul>
    </div>
    <br />

    <div class="span4" style="background-color: transparent; display: block; margin-bottom: 0px; margin-left: 20px; margin-right: 0px; margin-top: 0px; width: 300px; z-index: 4;">
        <div class="column" style="margin-left: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; z-index: 3;">
            <div class="embedded-video" style="position: relative; z-index: 3;">
                <div class="video-launcher" onclick="alert('clicked');" style="position: absolute; cursor: pointer; width: 100%; height: 100%; z-index: 2;"></div>
                <div class="youtube-video" style="z-index: 1;">
                    <iframe style="z-index: 1;" width="300" height="225" src="http://www.youtube.com/embed/W8_Kfjo3VjU?rel=0&showinfo=0&wmode=transparent" frameborder="0" allowfullscreen></iframe>
                </div>
            </div>
        </div>
    </div>

</div>
</body>

我已经到处搜索试图解决这个问题,但我只能找到有关设置 wmode 和 z-index 的信息。我一定还缺少其他东西,或者这可能在 IE 中不起作用。感谢您的帮助。

【问题讨论】:

  • 这里有类似的问题:带有 "wmode=opaque" 的 flash 对象/swf 在 ie8 中工作正常,现在在 ie9 中 - flash 不显示任何文本。如果 wmode 更改为“window”,flash 将显示文本,但 flash 对象也是最上面的,并且会覆盖其他 DOM 元素。

标签: flash internet-explorer youtube z-index wmode


【解决方案1】:

您需要在任何页面上的任何位置的任何 EMBED/OBJECT 标记内将 WMODE 参数设置为不透明,无论它在何处呈现——在您的页面上或在您尝试显示的 IFRAME 中。否则,无论是哪个页面(iframe 或其他)呈现它,Flash 播放器都将位于所有内容(继承或其他)之上。它不在您的页面上并不重要。它显示在浏览器中。

如果您在自己的网站上显示其他网站的内容,这可能会产生问题。幸运的是,YouTube 有一个解决方案:

将 ?wmode=transparent 添加到 IFRAME 中 YouTube 网址的末尾(如果您已有查询字符串,则添加 &wmode=transparent)。这对我来说非常适合模态。

注意:我从另一个问题中发现了这个答案并将其应用于这个问题: https://stackoverflow.com/questions/8278390/how-can-i-make-iframe-respect-z-index-in-ie

【讨论】:

  • 实际上我使用的是 ?wmode=transparent 查询字符串,它仍然有这个问题。如果您查看我的示例页面,您会发现这确实允许播放器外部的菜单与播放器重叠,但与播放器大小完全相同的 DIV 不会捕获点击事件。
【解决方案2】:

我能够完成这项工作的唯一方法是使DIV 大于嵌入式 iFrame,因此DIV 会在鼠标经过 iFrame 之前捕获鼠标悬停。这不是一个完美的解决方案,因为用户移动鼠标的速度足够快,它不会捕获鼠标悬停。

此问题已在 IE10 中解决。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-29
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多