开发者

SWFObject and Resizing Div

I have the following HTML code, what I want to do is to split the page into two divs, and place the object to the left side. However, the swf file covers all of the page, not just the left side. What could be the problem?

Thanks,

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
 <title>test</title>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <meta name="language" content="en" />
 <meta name="description" content="" />
 <meta name="keywords" content="" />

 <script src="js/swfobject.js" type="text/javascript"></script>开发者_StackOverflow
 <script type="text/javascript">
  var flashvars = {
  };
  var params = {
   menu: "false",
   scale: "noScale",
   allowFullscreen: "true",
   allowScriptAccess: "always",
   bgcolor: "#FFFFFF"
  };
  var attributes = {
   id:"player"
  };

  swfobject.embedSWF("player.swf", "left", "100%", "100%", "9.0.0", "expressInstall.swf", flashvars, params, attributes);

 </script>
 <style>
   html, body { height:100%; width:100%; }
   body  { margin:0; padding:0;  }
   #left {
    float: left;
    width: 50%;
   }

   #right { 
    float: right;
    width: 50%;
   }
 </style>
</head>
<body>
<div id="container" >
<div id="left">

  <p><a href="http://www.adobe.com/go/getflashplayer"><img 
   src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" 
   alt="Get Adobe Flash player" /></a></p>
</div>
<div id="right">Test</div>
</div>
</body>
</html>


When you specify an ID in SWFObject's attributes variable, the <object> generated by SWFObject will replace the target div (in this case #left) with an object using the ID you specified (in this case #player). So your CSS for #left won't work, because there is no element with that ID anymore.

<div class="box">
   <div id="left">
      <p> ... </p>
   </div>
</div>

becomes

<div class="box">
   <object id="player" ... >
      <param ... />
   </object>
</div>

The solution is to either not specify an ID in the attributes, in which case the object will inherit the ID used by the target div, or change your CSS to recognize that the object uses the ID #player and not #left


Change your styles to this:

 <style type="text/css">
   html, body { height:100%; width:100%; }
   body  { margin:0; padding:0;  }
   .box {
        float:left;
        width:50%;
    }
 </style>

then change your body html to this (so that you are replacing a Div inside your left 'box':

<div id="container" >

<div class="box">

    <div id="left">
        <p>
            <a href="http://www.adobe.com/go/getflashplayer">
            <img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" />
            </a>
        </p>
   </div>

</div>

<div class="box">
    Test
</div>

</div>

This worked how I imagined you were thinking in firefox for me anyway


What are the native dimensions of the SWF? I think the percentages refer to the % of the inherant dimensions of the file, not the available space of the container element.

Another, thing might be that since a swf is an "object" and object rendring is done by the system it uses the dimentions of the view port, not the container element.

In short if you need it to have dynamic dimensions i would calulate the dimensions needed. You could do so with jQuery pretty easily:

<script src="js/swfobject.js" type="text/javascript"></script>
 <script type="text/javascript">
  var left = $('#left');


  var flashvars = {
  };
  var params = {
   menu: "false",
   scale: "noScale",
   allowFullscreen: "true",
   allowScriptAccess: "always",
   bgcolor: "#FFFFFF"
  };
  var attributes = {
   id:"player"
  };

  swfobject.embedSWF("player.swf", "left", ceil(left.width())+'px', ceil(left.height())+'px', "9.0.0", "expressInstall.swf", flashvars, params, attributes);

 </script>
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜