z-index 和 iFrames!

Posted

技术标签:

【中文标题】z-index 和 iFrames!【英文标题】:z-index and iFrames! 【发布时间】:2011-07-13 22:51:58 【问题描述】:

我正在为我网站的一些图像使用FancyBox 插件。在我的一个页面上,我还嵌入了来自 YouTube 的 iFrame 代码,用于在页面上放置视频。

在同一页面上是一个缩略图,当单击该缩略图时,FancyBoxes 图像。但是,嵌入的 YouTube 视频仍然覆盖 FancyBox 图像。我做了一些 z-index 实验,但仍然没有运气。

即使设置了 z-index 等,iFrame 是否对页面中的所有元素都具有优先级?

【问题讨论】:

你最好使用wmode=opaque你会得到更好的性能,详情在这里:***.com/q/886864/158014 【参考方案1】:

总之,是的。但是 Youtube 视频是 Flash。 Flash 还具有高于 Z 顺序的资历。它将覆盖它是否在 IFRAME 中。

IFRAME 和 Flash 是“重量级”对象。它们有自己的窗口管理器对象(Windows 中的 HWND),因此它们要么位于其他重量级对象的前面,要么位于它们后面。

divspan 等是“轻量级”。也就是说,它们是绘制对象,绘制到 Body(这是一个重量级对象)上,并由浏览器管理,而不是由窗口管理器管理。

就操作系统窗口管理器而言,它们只是浏览器绘制的漂亮图片。这就是为什么它们不能覆盖“真实”对象(或窗口管理器认为真实的对象)。

它们必须是轻量级的,因为如果每个 DIVSPANA 都必须保留操作系统资源,它们会很快耗尽窗口管理器。

【讨论】:

【参考方案2】:

如果您希望 Flash 小程序按照与任何其他 html 元素相同的 z-index 规则呈现,则需要为包含的 Flash 设置 WMODE 属性。

见:

    http://www.communitymx.com/content/article.cfm?cid=E5141 differences between using wmode="transparent", "opaque", or "window" for an embedded object on a webpage

【讨论】:

嗯,这里的问题是我无法控制 Flash 元素。我基本上只是从仅包含 标签的 youtube 网站中提取嵌入的 iFrame HTML。所以我无法设置 WMODE 属性。【参考方案3】:

添加 wmode=transparent 作为参数。

HTML 解决方案

<iframe title="YouTube video player" 
  
src="http://www.youtube.com/embed/lzQgAR_J1PI?wmode=transparent" 
frameborder="0"
>

jQuery 解决方案:

$(document).ready(function () 
    $('iframe').each(function()
        var url = $(this).attr("src");
        $(this).attr("src",url+"?wmode=transparent");
    );
);

来源http://www.scorchsoft.com/news/youtube-z-index-embed-iframe-fix

【讨论】:

你最好使用wmode=opaque你会得到更好的性能,详情在这里:***.com/q/886864/158014 HTML 解决方案适合我。可悲的是,jQuery 解决方案没有。谢谢! @Zade:这可能是因为 url 已经包含一个问号。 if(url.indexOf("wmode")== -1) $(this).attr("src",url+"?wmode=opaque"); 还检查是否有任何 jquery 像 CMS 通常设置的 NoConflict = true 一样工作,因此您必须设置 $ var。 jQuery(document).ready(function () var $ = jQuery;【参考方案4】:

非常简单,只需将这个参数添加到你的 iframe url 就可以了:

<iframe title="YouTube video player"   src="http://www.youtube.com/embed/lzQgAR_J1PI?wmode=transparent" frameborder="0" wmode="Opaque">

祝你好运!

【讨论】:

您已将属性wmode="Opaque" 添加到iframe 元素。我试着用谷歌搜索。我不认为这有任何意义。 url中的查询有意义,但属性没有——如果我弄错了,请纠正我。【参考方案5】:

要使其在 IE(至少 7 和 8)中工作,您必须添加以下内容:

<param name="wmode" value="transparent" />

我不相信有办法将它附加到 iframe URL,所以你的内容需要有这个,可能在对象标签之间。

【讨论】:

【参考方案6】:

嗯,这里的问题是我无法控制 Flash 元素。我基本上只是从仅包含标签的 youtube 网站中提取嵌入的 iFrame HTML。所以我无法设置 WMODE 属性。

迟到的答案,但是:是的,你可以。只需将 ?wmode=opaque 添加到 yt 网址即可。

<iframe src="http://www.youtube.com/embed/vRH3Kq5qDw4?wmode=opaque".............

【讨论】:

以上是关于z-index 和 iFrames!的主要内容,如果未能解决你的问题,请参考以下文章

z-index 在 iframe 中带有 pdf 的 Internet Explorer 中不起作用

facebook 上 iframe 中的 Youtube - Z-index 问题

iframe中的div被另一个iframe挡住

有一个div的浮动广告层,被iframe压着了,我知道用z-index解决不了,请问有啥问题可以解决。

div层做的下拉菜单被同一页面的ifram挡住了怎么办?

设置移动端iframe 和video 标签视频溢出自动适应播放样式设置