Firefox、IE、iframe、div和opacity  

  偶然的机会,用Firefox看了一下自己精心制作的网站,竟然和IE下的模样大相径庭。尽管IE仍然是主流,但在Firefox下弄成那副嘴脸实在是有失颜面,赶紧着手解决。
  如今的显示器分辨率可以说是多元化了,为了能够充分利用窗口大小,我的页面在宽和高上都使用的是百分比数值,改版时本想赶赶时髦,弄成div+css的模式,但苦于才疏学浅,无法达到原来table弄出的效果。但在height的百分比数值方面,Firefox和IE的理解似乎有比较大的差别,通过一些简单的尝试,我渐渐摸到了一点Firefox的性格。最离奇的就是在嵌套表格中,一开始的简单测试似乎说明Firefox不支持嵌套的百分比高度。但如果在之前的一个固定高度的行内嵌套过一个百分比表格,那么双百分比的嵌套竟然就能够正确显示了,例如如下代码段:
  <tr height=200>
   <td>
   <table height=50%><tr><td></td></tr></table>
   </td>
  </tr>
  <tr height=40%>
   <td>
   <table height=50%><tr><td></td></tr></table>
   </td>
  </tr>
  如果没有前一行中的table,那么第二行中的50%也将无效,但有了第一个,似乎Firefox就知道大概是怎么回事了。经过一番试验,我精简了网页代码,减少了嵌套层,最终,虽然Firefox和IE的显示结果还是略有不同,但基本上已是大同小异。
  
  另外,由于我使用了iframe,点击小类后,主页面本身并没有什么反应,在网慢的情况下,难免让访问者失去安全感。我决定做一个“数据载入中,请稍后……”的效果,但几经尝试,却没有简单的办法。子页面上用Javascript,页面需要二次跳转;主页面上用div盖住iframe,又有div定位困难和盖不住iframe的问题。最后,我偶然看到了使iframe透明的方法,随即进入了另一个思路——把“数据载入中”写在iframe下面的td上,将iframe设为透明,待页面完全载入后,再将子页面的透明效果取消。经过一番试验,子页面的body颜色无法在onload事件中更改。正在沮丧之际,晚餐时却灵机一动,最终解决方案如下:
  1. 将iframe外的td的底色设置好,将“数据载入中”作为背景图片;
  2. <iframe allowTransparency="true">
  3. 子页面中<BODY style="background-color=transparent" background='image/white.jpg'>,white.jpg是一个白色小方块,用它遮盖td上的背景图。
  虽然IE5.5之前并不支持,但这样做也并没有影响到在老版本浏览器中的固有效果,虽然多用了两张小图片,但毕竟没几个字节,尚不违背我的理念。
  
  另外,首页上图片的透明度变化在Firefox中也是毫无效果,只好使用两套代码一起堆在那里,对于IE起作用的是:
  style='filter:alpha(opacity=30)' onmouseover='this.filters.alpha.opacity=100' onmouseout='this.filters.alpha.opacity=30'
  对Firefox起作用的则是样式表中的链接样式:
  .ima a:link {filter:alpha(opacity=30);-moz-opacity:0.3;opacity:0.3;}
  .ima a:active {filter:alpha(opacity=100);-moz-opacity:1;opacity:1;}
  .ima a:visited {filter:alpha(opacity=30);-moz-opacity:0.3;opacity:0.3;}
  .ima a:hover {filter:alpha(opacity=100);-moz-opacity:1;opacity:1;}
  
  呜呼,计算机的确给人们带来了巨大的方便,但与之相伴的还有无数的困扰……
日期:2007-05-24    
Warning: mysql_query() [function.mysql-query]: Unable to save result set in D:\wwwroot\musicshow\web\money\db.php on line 63
Failed to execute query at line 132: Table 't_critic' is marked as crashed and should be repaired
SQL: select id from t_critic where aid=31