wmode="transparent"是唯一有效的HTML层级透明控制方式,必须同时在<object>的<param>标签和<embed>标签中设置该参数,才能使Flash背景真正透明并透出下层HTML内容。

wmode="transparent" 是唯一有效的 HTML 层级透明控制方式,不加这行参数,Flash 永远是白色背景遮挡下层内容。
为什么必须用 wmode 参数而不是改 Flash 文件本身
SWF 文件导出时默认不带“背景透明”元数据;它只记录图形像素的 alpha 通道,但渲染时仍强制套一层不透明窗口。真正决定是否透出 HTML 背景的,是容器(<object> 或 <embed>)的 wmode 行为。不设置该参数,哪怕舞台设成“无色”、元件全用 PNG,照样盖住下面的 <div> 或背景图。
-
wmode="window":默认值,独占窗口层,z-index 无效,必然遮挡其他元素 -
wmode="opaque":允许上层 HTML 元素覆盖 Flash,但 Flash 自身背景仍是实色(不透底) -
wmode="transparent":启用 alpha 合成,让 SWF 中所有透明区域露出 HTML 底层 —— 这才是真透明
<param> 标签和 <embed> 属性必须同时写
IE 系列只读 <param>,Firefox/Chrome 等现代浏览器依赖 <embed> 的属性。漏掉任一端,透明在部分浏览器中就失效。
正确写法示例:
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="550" height="400"> <param name="movie" value="demo.swf"> <param name="wmode" value="transparent"> <embed src="demo.swf" width="550" height="400" wmode="transparent"></embed> </object>
- 注意
<param>中的name必须小写wmode,大小写错误(如WMode)会被忽略 -
<embed>标签里不能写成wmode="Transparent",value 必须全小写transparent - 若使用
AC_RunActiveContent.js(Dreamweaver 常见),需在AC_FL_RunContent()调用中显式传入'wmode', 'transparent'
常见失效原因和验证方法
加了 wmode="transparent" 却还是白底?大概率卡在这几个环节:
- Flash 内部舞台或关键图层设置了纯色背景(比如画了个白色矩形盖满舞台),删掉它
- 发布设置中勾选了“导出隐藏图层”,导致某层意外导出并遮挡透明区
- HTML 页面
<body>没设背景色或背景图,看起来像没生效 —— 实际已透明,只是底下是白的 - 移动端浏览器(尤其 iOS Safari)早已弃用 Flash 插件,
wmode在这些环境完全不解析,别白费劲
验证是否生效:给 <body> 加个鲜明背景色(如 style="background:rebeccapurple"),再刷新页面看 Flash 区域是否透出该色。
真正起作用的只有 wmode="transparent" 这个组合,不是“设舞台为无色”也不是“导出时勾透明”,那些只是辅助步骤。参数没进 HTML 容器,前面全白做。


















