Asp.net jquery循环IE7透明png问题
当我在IE7中有透明的png文件时,我很难让jquery循环正常工作 在Firefox和Chrome中都不错,但在IE(第7版)中,我得到了黑色 png透明度在淡入淡出过程中Asp.net jquery循环IE7透明png问题,asp.net,jquery,Asp.net,Jquery,当我在IE7中有透明的png文件时,我很难让jquery循环正常工作 在Firefox和Chrome中都不错,但在IE(第7版)中,我得到了黑色 png透明度在淡入淡出过程中 这能正常工作吗?不幸的是,尽管IE7支持透明PNG,但一次只能对一个元素应用一个过滤器 在您的应用程序中发生的事情是IE7将alpha过滤器应用于PNG,然后jQuery要求为淡入应用另一个alpha过滤器。正如你所说,这有明显的结果 解决这个问题的方法是将png嵌套在容器中,然后淡入容器。有点像这样: <div i
这能正常工作吗?不幸的是,尽管IE7支持透明PNG,但一次只能对一个元素应用一个过滤器 在您的应用程序中发生的事情是IE7将alpha过滤器应用于PNG,然后jQuery要求为淡入应用另一个alpha过滤器。正如你所说,这有明显的结果 解决这个问题的方法是将png嵌套在容器中,然后淡入容器。有点像这样:
<div id="fadeMe">
<img src="transparent.png" alt="" />
</div>
$(document).ready(function ()
{
if ($.browser.msie && parseInt($.browser.version, 10) < 9)
{
$(".myClass, .myOtherClass").each(function (val)
{
var backgroundValue = val.css("background-image");
backgroundValue.replace('.png', '.gif');
$(this).css("background-image", backgroundValue);
//you could just as easily do this with 'img' tags
});
}
}
注意最初编写该插件是为了修复IE6中的PNG透明度,但我修改了它以解决IE6+中的问题
旁注:我记不得了,但我认为IE8可能也有同样的问题。如果我错了,请更正:)尝试添加
cleartype:true,
cleartypeNoBg:true
到您的循环jquery片段。
现在应该没事了:)这让我疯狂了好几天,最后我偶然发现了该装置的PNG修复程序。-使用Cycle并阻止我切换到JPEG解决方案
需要对cycle div中的特定PNG进行一些修补,但她可以工作 希望帮助遇到此问题的其他人: 我在页面上的几个div上有透明的.png背景(平铺),当我激活jquery cycle插件时,这些透明区域变得扭曲。他们失去了一些透明度 我的解决方案是简单地把瓷砖做得更大,所以根本就没有瓷砖。对于文件大小有一个小的折衷,但它解决了这个问题 Internet Explorer 7有一些问题 与褪色透明PNG。如果 你进入这个页面是因为 你看到一个黑色的边界 PNG中的透明边是, 下面是一些修复问题的技巧 问题:
缩放:1
技巧。给
父元素的样式声明
缩放:1
(通过CSS或内联
这将迫使IE给出
元素具有布局
-倾向于修复
各种各样的奇怪的显示问题
即不幸的是,这意味着不可能让透明PNG在透明背景上淡入,因为必须对父元素应用背景色,以便平滑过渡,即没有黑色像素<代码>背景:透明的不起作用(因为透明的实际上不是一种颜色)(我正在将一些png动态加载到DOM中……这对我来说很有效:我重写了fadeIn和fadeOut方法。似乎我没有在png图像上获得黑色。不需要父div。仍然可以用作jQuery
如果您可以牺牲一点图像质量,您可以将图像保存为PNG-8而不是PNG-24,然后应用Prosini提到的修复,即
cleartype: true, cleartypeNoBg: true
这应该是可行的。使用PNG-24,我在转换过程中仍然会遇到一些黑色边框。虽然不限于cycle插件,但这可能会帮助其他人。我在尝试找到.animate()的解决方案时遇到了这个流透明/半透明png文件。我在IE7和IE8中都遇到了黑色边框的问题。在我尝试使用JQuery设置不透明度动画之前,图像看起来很好
$('#my-png-img').stop().animate({opacity:0.0},3000);
我研究了许多解决方案,但不幸的是,它们都不理想。虽然这条流有点过时,但它可能会帮助其他人继续寻找拼凑解决方案。我最终使用了双螺旋解决方案()稍微调整一下。我不太喜欢.htc文件,但这不是重点。我编辑了iepngfix.htc文件(~75行)以捕获IE7和IE8。我更改了
!/MSIE (5\.5|6)/.test(navigator.userAgent) ||
到
在那里,我按照一般说明(见演示)进行操作,包括将此位添加到CSS中
/* IE PNG Fix */
img, div, a, input {
behavior: url(/_css/iepngfix.htc)
}
此外,正如其他人所提到的,我必须将我的图像嵌套在一个容器中
<div id="img-container"><img src="/images/my_semi_trans_png24.png" /></div>
然后我对包含的div应用了.animate()效果。但是,有一点约束,这是我能够使淡入一致工作的唯一方法。在一个例子中,我甚至发现透明度问题影响了在透明的.gif文件上设置不透明度的动画。哦,还有,我是否使用了.fadeIn()/.fadeOut而不是.animate()没有任何区别。再加上前面提到的“在div中包装图像/淡入div”策略,使用这一行CSS将解决IE问题:
#div img {
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader (src='../images/bubble_intro_ph1.png');
}
#部门经理{
过滤器:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../images/bubble_intro_ph1.png');
}
为我工作
我进一步调整了.htc文件,并更改了这一行:
var bgPNG = bgSrc.match(/url[("']+(.*\.png[^\)"']*)[\)"']/i);
致:
通过这样做,.htc脚本将忽略所有.png文件,除非它们以.fixme.png结尾(例如“transparant.fixme.png”)。我打算这样做是为了加快脚本的速度,并确保只有问题.png得到修复(您必须使用transparant)
我使用其他的.png,它们不是透明的,因此不需要这个脚本来运行它们。最好的修复方法是
将其包含在脚本中,并确保提供1px by 1px透明gif的路径。瞧!我已经找到了使用淡入淡出或其他jQuery效果时这个该死的IE问题的最终解决方案。它在每一个IE>6甚至IE8中都能正常工作
var bgPNG = bgSrc.match(/url[("']+(.*\.png[^\)"']*)[\)"']/i);
var bgPNG = bgSrc.match(/url[("']+(.*\.fixme.png[^\)"']*)[\)"']/i);
img {
background: transparent;
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF)"; /* IE8 */
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF); /* IE6 & 7 */
zoom: 1;
}
<div class="views-field-field-photo-fid">
<span class="field-content"><img height="433" width="834" src="http://devel.acupuncture2.polishyourimage.com/sites/acupuncture2.polishyourimage.com/files/pain_splash.png?1292552784" alt="" class="imagefield imagefield-field_photo"></span>
</div>
.views-field-field-photo-fid { width: 0px; }
$("#btn").animate({opacity:1,"margin-left":"-25px", filter:''});
<div style="background:url('something.png') no-repeat 0 0 scroll; position:absolute; z-index:2;"> </div>
<div style="background-color:#fa0237; position:absolute; z-index:1;"> </div>
<!--[if IE 8]>
<style type="text/css">
.fixpng {
/* this fixes transparency in IE8 ONLY! */
behavior: url(css/IE8pngfix.htc);
}
</style>
<![endif]-->
[div id="tooltip" class="fixpng"]
.container img {
background-color: white;
}
$('.container img').each(function() {
$(this).css('background-image', $(this).attr('src'));
});
<div class="fademe">
<a href="http://mysite/node/1">
<img class="firstTAB-phase2" src="http://mysite/IMG/bio_640x330.png" height="330px" width="640px" />
</a>
<a href="http://mysite/node/1">
<div class="fademe" id="TAB1"></div>
</a>
.fademe{ width:640px; height:330px;}
#TAB1{ background: #999 url(http://mysite/IMG/bio_640x330.png) no-repeat;}
#div, #div img {
background:none !important;
filter:none !important;
}
$(document).ready(function ()
{
if ($.browser.msie && parseInt($.browser.version, 10) < 9)
{
$(".myClass, .myOtherClass").each(function (val)
{
var backgroundValue = val.css("background-image");
backgroundValue.replace('.png', '.gif');
$(this).css("background-image", backgroundValue);
//you could just as easily do this with 'img' tags
});
}
}