IE6不支持PNG图片透明效果的完美解决方案(完善版)

可怜的IE6,不支持PNG图片透明,
这已经是其众多“BUG”中,不是那么显眼的一个,
但也是让部分人头痛的一个了。
(今天在机房那破机器上IE6忘了抓图了,现在想给大家看效果也难啊。)
发个PNG大家看看。   如果用IE6的朋友,请在下面回复截个图!谢谢啦。
[attach]641886[/attach]
想查看区别的,请到这个页面
http://www.54caizi.org/demo/enablePngImages.html

所以,只有借助滤镜来实现透明了。

方法一: 复制内容到剪贴板
代码:
<div align="center" style="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='png图片路径 ',sizingMethod='image'); " width="100px" height="100px"></div>这样的话,需要在每一PNG都这么做,显然不合适。而且设计的时候也不直观。

方法二:
将下面的代码保存为“png.js” 复制内容到剪贴板
代码:
function correctPNG()
{
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 type="text/javascript" src="png.js"></script>经过实际测试。
这种方法在普通模式下,问题不大。

但是问题来了:
1、如果图片未指明大小(width/height),那么,最终显示的尺寸将是(0px*0px),也就是说:啥也没有。
2、如果把图片放在隐藏层中(<div style="display:none;">...),那么,同上。程序获得不到图片大小。

这么一来,也不能完美解决了。

OK!那么我们来完善一下吧!

既然获取不到代码中的图片尺寸,我们何不直接读取图片的实际尺寸呢? 复制内容到剪贴板
代码:
<!--对于隐藏层中的图片,或者其他原因导致图片尺寸无法获得-->
<!--此时我们需要读取图片的真实大小-->
<!--以免宽高都为0px而导致图片不显示-->
var imgTrueWidth=0;
var imgTrueHeight=0;
if(img.width==0)
{
var imgPng=new Image();
imgPng.src=img.src;
imgTrueWidth=imgPng.width;
imgTrueHeight=imgPng.height;
}我们通过 Image对象,来获得其真实大小。然后最终代码如下: 复制内容到剪贴板
代码:
function correctPNG4IE6()
{
//获得全部图片
var imgs=document.getElementsByTagName("IMG");
for(var i=0; i<imgs.length; i++)
{
var img = imgs[i];
var imgName = img.src.toUpperCase();
<!--操作PNG图片-->
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;

<!--对于隐藏层中的图片,或者其他原因导致图片尺寸无法获得-->
<!--此时我们需要读取图片的真实大小-->
<!--以免宽高都为0px而导致图片不显示-->
var imgTrueWidth=0;
var imgTrueHeight=0;
if(img.width==0)
{
var imgPng=new Image();
imgPng.src=img.src;
imgTrueWidth=imgPng.width;
imgTrueHeight=imgPng.height;
}

<!--用<span>替换<img>标签-->
var strNewHTML = "<span " + imgID + imgClass + imgTitle + " style=\"";
strNewHTML=strNewHTML+"width:" + (img.width==0?imgTrueWidth:img.width) + "px; height:";
strNewHTML=strNewHTML+(img.height==0?imgTrueHeight:img.height) + "px;";
strNewHTML=strNewHTML+imgStyle + ";" + "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader";
strNewHTML=strNewHTML+"(src='" + img.src + "', sizingMethod='scale');\"></span>";

<!--执行替换-->
img.outerHTML = strNewHTML;

i = i-1;
}
}
}
<!--加载完毕,执行代码-->
window.attachEvent("onload", correctPNG4IE6);

转载于:https://www.cnblogs.com/panjun-Donet/archive/2010/05/04/1727186.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/406210.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

更改VS的运行主窗体

Program.cs中Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);Application.Run(new Form1());把new Form1()改成你需要启动的窗体转载于:https://www.cnblogs.com/moyuling/p/4337593.html

jms mysql_JMS学习九(ActiveMQ的消息持久化到Mysql数据库)

1、将连接Mysql数据库的jar文件&#xff0c;放到ActiveMQ的lib目录下2、修改ActiveMQ的conf目录下的active.xml文件&#xff0c;修改数据持久化的方式2.1 修改原来的kshadb的持久化数据的方式2.2 连接Mysql的配置(注意配置文件放置的位置)3、将数据持久化Mysql的运行截图3.1 …

Dynamic Performance Tables not accessible,Automatic Statistics...

From: http://igogo007.iteye.com/blog/443609 使用的PLSQL Developer 工具在对oracle 10g插入数据或查询数据的时候都会报以下错误&#xff1a;Dynamic Performance Tables not accessible, Automatic Statistics Disabled for this session. You can disable statistics…

看完这篇不要告诉我不会封装ant design弹框组件了

我是歌谣 放弃很容易 但是坚持一定很酷 微信公众号关注前端小歌谣 获取前端学习知识 1设计需求 封装一个弹框组件 直接调用接口 2技术栈 ant designreact 设计第一步 绘制样式 <ModalmaskClosable{false}visible{visible}title{签收协议}onOk{this.handleSignFor}onCancel…

vue+element+el-table表格简单封装成组件

vueelementel-table表格简单封装成组件

[文档].Altera - Avalon接口规范

Ch 1 导言 1.1 Avalon属性及参数 1.2 信号类型 1.3 接口时序 1.4 相关文档 Ch 2 时钟接口 2.1 时钟输入&#xff08;Sink&#xff09; 2.1.1 属性 2.1.2 信号类型 2.1.3 associatedClock接口 2.2 时钟输出&#xff08;Source&#xff09; 2.2.1 属性 2.2.2 信号类型 Ch 3 Avalo…

C++类库:OTL通用的数据库连接类库

From: http://www.cppblog.com/lovefeel2004/archive/2010/06/02/116946.aspx OTL是一个纯C的通用数据库连接模板库&#xff0c;可以支持各种当下流行的数据库&#xff0c;如Oracle&#xff0c;Sybase, MySQL, PostgreSQL, EnterpriseDB, SQLite, MS ACCESS, Firebird等等.它是…

mysql 报错3534_win7下安装MYSQL报错:MYSQL 服务无法启动的3534问题

win7下安装MYSQL,只到“net start mysql”这一步报错:3534的错误&#xff1a;是直接官网下载的压缩文件.不是安装文件.解决方法:1:环境变量PATH添加完成(例如&#xff1a;h:\mysql\\bin2:在mysql目录下&#xff0c;新建data目录。3:在mysql目录下 新建新建一个默认配置文件my.i…

Linux下Socket网络编程

什么是Socket Socket接口是TCP/IP网络的API&#xff0c;Socket接口定义了许多函数或例程&#xff0c;程序员可以用它们来开发TCP/IP网络上的应用程序。要学Internet上的TCP/IP网络编程&#xff0c;必须理解Socket接口。 Socket接口设计者最先是将接口放在Unix操作系统里面的。如…

软件测试课初感

在上课以前&#xff0c;说起软件测试&#xff0c;就连我们这些学了两年多的大学生&#xff0c;也会觉得“测试&#xff0c;不就是用一用&#xff0c;找找编写的时候没有发现的bug&#xff0c;然后就完事了”。 然而呢&#xff0c;改观就在第一节课上&#xff0c;直到老师老师举…

npm-shrinkwrap锁定依赖

npm-shrinkwrap锁定依赖

windows和linux下,查看oracle SID的方法

From: http://www.linuxdiyf.com/viewarticle.php?id78524 Windows 平台下&#xff1a;你可以到注册表去&#xff0c;看看 HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE 下面&#xff0c;有一个 ORACLE_SID。linux平台下&#xff1a;如果你的server是linux的话1.以安装oracle的账号…

Impress.js上手 - 抛开PPT、制作Web 3D幻灯片放映

前言&#xff1a; 如果你已经厌倦了使用PPT设置路径、设置时间、设置动画方式来制作动画特效、那么Impress.js将是你一个非常好的选择。 用它制作的PPT将更加直观、效果也是嗷嗷美观的。 当然&#xff0c;如果用它来装X&#xff0c;是需要付出一些代价的&#xff0c;不过如果你…

采用合适的网站优化技术

不久前读到一篇博文&#xff0c;讲述开心网存在的问题&#xff0c;列举了一些应该采用的网站优化技术。不得不说研究的 很有道理&#xff0c;博主细致并且较全面的分析了开心网的几个”缺点”&#xff0c;我在这里也不是想要反驳那篇博文的意思&#xff0c;只是想说&#xff0c…

mysql gtid 主主_mysql GTID主从复制(主库在线,添加新丛库)

要求&#xff1a;1、 主库上线&#xff0c;主库不停止服务的前提下做主从复制2、 新添加一个丛库操作&#xff1a;1、 在主库导出数据(主库正常运行)&#xff1b;2、 将主库的sql文件传到丛库&#xff1b;3、 丛库恢复数据库&#xff…

Mac-安装Homebrew报错error: could not lock config file .git/config:

Mac-安装Homebrew报错error: could not lock config file .git/config:

Qt中的QFileDialog类的几个示范代码

From: http://www.hedabbs.cn/thread-102600-1-1.html void Dialog::setExistingDirectory() { //选择一个文件夹; QFileDialog::Options options QFileDialog::DontResolveSymlinks | QFileDialog::ShowDirsOnly; if (!native->isChecked()) options…

JS 画饼图,折线图

网址&#xff1a; http://www.hcharts.cn/demo/index.php 效果图&#xff1a; 它的网址里面都很全的。简单实用扣代码即可 使用时注意数据格式即可 1         //获取mood_evalue的百分比2 $total_mood_evalue 0;3 //初始化key的数组&…