IE6 is the bane of the Internet. One of the worst things about it is how it handles transparent PNG images. Here is a jQuery plug-in that fixes it.
(function($) {
$.fn.extend({
png: function(options) {
var settings = $.extend({}, $.fn.png.defaults, options);
var ie6 = navigator.appVersion.indexOf("MSIE 6.0") != -1;
var ie55 = navigator.appVersion.indexOf("MSIE 5.5") != -1;
if (jQuery.browser.msie && (ie6 || ie55)) {
return this.each(function() {
var $rootThis = $(this);
if (settings.doImg) $rootThis.find("img[src$=.png]").each(
function() {
var $this = $(this);
$this.css({
filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(
src='" + $this.attr("src") + "', sizingMethod='scale');",
height: $this.height(),
width: $this.width()
})
.attr("src", settings.blank);
});
if (settings.doInput) $rootThis.find("input[src$=.png]").each(
function() {
var $this = $(this);
$this.css({
filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(
src='" + $this.attr("src") + "', sizingMethod='scale');"
})
.attr("src", settings.blank);
});
if (settings.doBgImg) $rootThis.find("*").andSelf().each(
function() {
var $this = $(this);
var bgImg = $this.css("background-image");
if (bgImg && bgImg.match(/^url\(\".+?\.png\"\)$/i)) {
bgImg = bgImg.substr(5, bgImg.length - 7);
var sizing = ($this.css("background-repeat") == "no-repeat") ?
"crop" : "scale";
$this.css({
filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(
src='" + bgImg + "', sizingMethod='" + sizing + "');",
backgroundImage: "none",
height: $this.height(),
width: $this.width()
});
}
});
});
}
return this;
}
});
$.fn.png.defaults = {
blank: "blank.gif", //the transparent image to replace img tags
doImg: true, //do img tag fixes
doInput: true, //do tag fixes
doBgImg: true //do 'background-image' fixes
};
})(jQuery);
Example
// Fixes all the PNGs in the document
$(function() { $(document).png(); }
// Fixes all the PNGs in the div with class 'image'
$(function() { $("div.image").png(); }
// Fixes all the PNGs in the div with class 'image'
// using 'transparent.gif' for transparency
$(function() { $("div.image").png({blank: 'transparent.gif'}); }
// Fixes all the PNGs in the div with class 'image' but
// not fixing any background PNGs
$(function() { $("div.image").png({doBgImage: false}); }