【发布时间】:2011-03-10 00:00:09
【问题描述】:
我有一个包含多个子菜单项的菜单栏。主页包含位于菜单栏下方的 Flash 动画。当子菜单项在 flash 文件上方时,flash 文件将显示在菜单栏上方。我尝试使用 z-index,但它不起作用。
这个问题只发生在 IE 中。
有什么建议吗?
谢谢
【问题讨论】:
我有一个包含多个子菜单项的菜单栏。主页包含位于菜单栏下方的 Flash 动画。当子菜单项在 flash 文件上方时,flash 文件将显示在菜单栏上方。我尝试使用 z-index,但它不起作用。
这个问题只发生在 IE 中。
有什么建议吗?
谢谢
【问题讨论】:
是的,克里斯,
您必须为 Flash 嵌入代码设置一个属性
<param name="wmode" value="transparent" />
这会起作用
【讨论】:
插入flash文件的地方,需要设置窗口模式为透明:
<embed src="flashfile" wmode="transparent">
【讨论】:
Muneer 和 Tim 已经给出了很好的答案,但我想补充一些额外的信息:
transparent 和 opaque 值会导致可访问性问题,因为它们会将 Flash 对象的内容隐藏到屏幕阅读器。只有 window 的默认值才适用于屏幕阅读器【讨论】:
有一个更好的解决方案,因为添加该参数并不总是有效,尤其是在 div 中使用 flash 对象时。
在页面末尾注册 flash 对象,如下所示:
<script type="text/javascript">
swfobject.registerObject('FlashIdName');
</script>
然后像这样调用一个javascript函数:
<script type="text/javascript">
swfobject.registerObject('FlashIdName');
Chk_Flash('FlashIdName');
</script>
此函数执行以下操作:
<script type="text/javascript">
function Chk_Flash(ToRegister)
{
document.getElementById('FlashIdName').style.visibility = 'visible';
return true;
}
</script>
这适用于所有浏览器 100%
你也可以使用:
document.getElementById('FlashIdName').style.visibility = 'hidden';
现在,如果您在 div 标签上调用操作,例如:
document.getElementById('MyDiv').style.visibility = 'block';
或 document.getElementById('MyDiv').style.visibility = 'none';
您需要做的是首先执行 div 操作,然后按该顺序调用 flash 可见性:
document.getElementById('MyDiv').style.display = 'block';
document.getElementById('FlashIdName').style.visibility = 'visible';
享受吧!
【讨论】:
使用这些值代替“透明”:
wmode="opaque"
【讨论】:
我终于找到了一个适用于所有浏览器的解决方案。
如果我用过
<param name="wmode" value="transparent" />
,我会在 IE 上获得所需的输出,但不会在 firefox 上获得所需的输出,如果我使用过
<embed wmode="transparent" ></embed>
,我在 Firefox 中得到了所需的输出,但没有 ie。
所以我决定在所有浏览器上都使用这两种方法
<!--[if IE]>
<param name="wmode" value="transparent" />
<![endif]-->
<embed wmode="transparent" ></embed>
【讨论】: