网络编程
位置:首页>> 网络编程>> 网页设计>> 在IE6中用PNG图片实现半透明效果(2)

在IE6中用PNG图片实现半透明效果(2)

作者:dudo 来源:dudo博客 发布时间:2008-05-30 13:14:00 

标签:png,图片,透明,ie

三、其它情况

 但是上面都用PNG做背景的情况,有时候我们还会用PNG来做遮罩,比如下面这张Logo图片,

我们可以使用PNG遮罩来达到渐变效果:

那么我们可以使用下面的方法来实现

HTML代码段

<div>  
      <img src="logo.jpg" alt="图片说明" />  
      <span></span>  
</div>  

注意:这种写法完全是为了迎合Internet Explorer 6,<div>容器用来帮助内部元素定位,<span>用来覆盖在<img>标签的上面达到半透明效果。下面我们只需要设定一下它们的位置就好了:

div { position:relative;}  
  span {  
    filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=scale, src='filter.png');  
    float:left;  
    width:200px;  
    height:100px;  
    position:absolute;  
    top:0;  
    left:0;  
  }  

不过,在Firefox中并没有filter这个属性,因此我们需要单独为Firefox中定制一个样式:

div > span {  
    background:url(filter.png);  
}  

这样我们就可以使用遮罩来实现半透明效果了:

点击查看运行效果

不过如果有太多的地方需要实现这样的遮罩效果的话,上面的处理方式还不是最好的,首先它有冗余的HTML标签,此外还使用了绝对定位和相对定位。如果我们把上面的代码进行封闭效果会更佳。这里我们可以使用下面这段JS代码进行封闭

<!--[if lt IE 7]>  
<script language="JavaScript">  
function correctPNG() // correctly handle PNG transparency in Win IE 5.5 & 6.  
{  
var arVersion = navigator.appVersion.split("MSIE")  
var version = parseFloat(arVersion[1])  
if ((version >= 5.5) && (document.body.filters))   
{  
for(var i=0; i<document.images.length; i++)  
{  
var img = document.images[i]  
var imgName = img.src.toUpperCase()  
if (imgName.substring(imgName.length-3, imgName.length) == "PNG")  
{  
var imgID = (img.id) ? "id='" + img.id + "' " : ""  
var imgClass = (img.className) ? "class='" + img.className + "' " : ""  
var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' "  
var imgStyle = "display:inline-block;" + img.style.cssText   
if (img.align == "left") imgStyle = "float:left;" + imgStyle  
if (img.align == "right") imgStyle = "float:right;" + imgStyle  
if (img.parentElement.href) imgStyle = "cursor:hand;" + imgStyle  
var strNewHTML = "<span " + imgID + imgClass + imgTitle  
+ " style=\"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";"  
+ "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"  
+ "(src=\'" + img.src + "\', sizingMethod='scale');\"></span>"   
img.outerHTML = strNewHTML  
i = i-1  
}  
}  
}   
}  
window.attachEvent("onload", correctPNG);  
</script>  
<![endif]-->  

这段代码只在Internet Explorer 6中才会被运行。

下面我们可以像在Internet Explorer 7 和Firefox中一样写代码:

<div><imgsrc"filter.png"alt"图片说明"/></div>
CSS
div {  
      background:url(logo.jpg) no-repeat;  
}  

点击查看最终运行效果

解决了PNG跨浏览器的问题之后,我们可以利用它来实现更加复杂和更加绚丽的页面效果。

参考:http://joomla.linkster.be/new/index.php?option=com_content&view=article&id=61:transparency-in-internet-explorer-6&catid=35:articles&Itemid=55

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com