以前知道解决方法,但是不知道为什么会出现这种情况,就像css权重的问题似的,看过这本书才知道某些做法的缘由。
Flash 默认总是会显示在页面的最顶层,也就是说如果页面上存在一些DHTML Layer,那么这些层将会被Flash盖住。即使设置了 z-index 属性也无济于事。如果你需要一些 LightBox 的弹出层,页面上的Flash可能会让其效果丑陋不堪。
Adobe 的技术知识库里提供了解决的办法: Flash content displays on top of all DHTML layers。
给<object> 标签增加wmode参数针对IE
<param name="wmode" value="transparent">
给<embed> 标签也增加类似参数 针对FIREFOX
wmode="transparent"
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="756" height="200" accesskey="1" tabindex="2" title="sss">
<param name="movie" value="*.swf" />
<param name="quality" value="high" />
<param name="wmode" value="transparent">
<embed wmode="transparent" src="*.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="756" height="200"></embed>
</object>
【flash插入网页中,如果和其他元素有重叠,无论我们如何设置z-index,Flash都会浮动在其他元素之上。这是为什么呢?】
【1、其实与z-index无关,浏览器解析页面时,会先判断元素的类型,如果是窗口类型的,会优先于非窗口类型的元素,显示在页面最顶端,如果同属于非窗口类型的,才回去判断z-index的大小。
2、Flash嵌入网页中,有个wmode属性,用于指定窗口模式,其值有window窗口、opaque非窗口不透明、transparent非窗口透明三种。其中window表示Flash以窗口形式显示,opaque和transparent表示Flash以非窗口的形式显示,如果不显示这是wmode属性,默认的wmode的值为window。无论我们如何设置z-index也不会有效果。解决的办法就是这事wmode属性为opaque或transparent。因为Flash在ie和ff下是用不同的标签嵌入的(ie下一boject标签嵌入,ff下embed标签嵌入)所以我们需要对两种标签记性设置】
如上面的例子或者下面的例子(哈哈其实就一个啦)
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="756" height="200" >
<param name="movie" value="*.swf" />
<param name="quality" value="high" />
<param name="wmode" value="transparent">
<embed wmode="transparent" src="*.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="756" height="200"></embed>
</object>