Le point sur les PNG transparents sous IE6
Voici un article récapitulatif à propos des différentes façons d'afficher des PNG transparents sous IE.
Comme vous le savez certainement, la gestion de la transparence des images au format PNG n’est pas complète sous Internet Explorer 6, contrairement à d’autres navigateurs respectueux des standards comme Firefox ou Opera. En effet, on observe un fond gris à la place de la transparence voulue :

Dans une page web, il y a deux façons d’afficher une image :
- A l’aide de la balise <img>
- Via une feuille de style CSS et la propriété background-image.
Les méthodes de contournements de l’affichage défectueux d’IE sont différentes selon l’origine de l’image :
Images provenant de balises <img>
Il existe des scripts JavaScript qui permettent d’obtenir un affichage correct de ces images. Vous pourrez trouver une solution sur ce site, ainsi que le script JavaScript. Ensuite, il faut appeler ce script dans vos pages seulement si le navigateur est IE, pour cela on utilise les commentaires conditionnels :
<!--[if lt IE 7]>
<script defer type="text/javascript" src="pngfix.js"></script>
<![endif]-->
Le mot-clé defer permet de transformer les images avant de les afficher, ce qui permet d’éviter l’affichage de fond gris pendant le chargement de la page.
Images provenant de feuille de style CSS
La marche à suivre pour permettre l’affichage de PNG transparents par l’intermédiaire de CSS est plus fastidieuse puisqu’il faut cette fois ajouter deux propriétés pour chaque images. Si l’on veut par exemple assigner l’image image.png à un élément HTML, on utilise la propriété suivante :
background-image: url("image.png");
Pour obtenir le même rendu sous IE 6, il faut utiliser les propriétés suivantes :
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=crop src=image.png');
background-image: none;
L’utilisation de ce hack CSS peut provoquer un problème sur les liens de la page que l’on résout avec la règle suivante :
a, input
{
position: relative;
z-index: 1;
}
Je vous conseille de réunir toutes les règles de corrections des problèmes liés à IE dans un même fichier CSS, appelé par exemple iefix.css, que l’on appellera seulement si le navigateur est IE, ce qui donne au final :
<!--[if lt IE 7.]>
<script defer type="text/javascript" src="pngfix.js"></script>
<link rel="stylesheet" type="text/css" href="iefix.css"/>
<![endif]-->
Définir la couleur de fond d’un fichier PNG
Dans le cas où l’on ne veut pas (ou peut pas) utiliser de code JavaScript ou hack CSS, il existe un moyen de choisir la couleur de fond de l’image PNG à la place du fond gris visible par défaut sous IE. Il est en effet possible de choisir une couleur de fond lors de l’enregistrement du fichier. Cette manipulation n’est pas possible avec Photoshop (ou alors je l’ai loupé) mais disponible avec The GIMP.
Lors de l’enregistrement de l’image, choissiez une couleur d’arrière-plan, puis enregistrez l’image au format PNG. Lorsque la boite de dialogue enregistrer au format PNG s’affiche, cochez l’option enregistrer la couleur d’arrière-plan, comme le montre la capture suivante :

L’image s’affichera avec un fond de la couleur choisie à la place du gris hideux par défaut.
Voila ! J’espère que ce petit récapitulatif vous sera utile !
Lien permanent
Commentaires
pffff, j'y crois pas.
Le bordel que c'est avec cette merde de IE pour afficher un png transparent. J'ai eu le problème récemment, et moi je n'ai pas cherché à comprendre, j'ai mis un gif à la place.
Merci à aurel pour cette astuce.
ps: A mon stage depuis que je leur ai montré firefox, ils n'utilisent plus que ça (IE est voué à disparaitre si les merdes comme ça continuent)
Hello,
Merci pour ce petit article.
Quel est le comportement de ce script pour les versions de IE inférieures à IE 6 ?
(je n'ai pas ces versions sous la main pour tester)
Merci
François
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=crop src=image.png');
background-image: none;
comment tu gères si tu veux une image qui se répètte en hauteur par exemple ? Vu que le back est à none ?
Tu remplace
sizingMethod=cropparsizingMethod=scale.Mais ça marche seulement sur des conteneurs avec les dimensions spécifiées, avec l'attibut
height: 100pxpar exemple. En fait l'image de fond est étirée et non répétée, ce qui limite pas mal l'utilisation qu'on peut en faire.Tu trouvera (un peu) plus d'infos à la page correspondante de la spec.
Thx ! En effet, cette solution semble bien compliqué. Je pensais avoir trouvé une solution à la transparence avec le script (pour les img en dur ds le html) mais là...
On a pas fini de galérer avec les standards tant que IE n'aura pas fait un effort...
Je vais néanmoins aller jeter un coup d'oeil à la doc de ton code...
Merci bq !
drcerveau
C'est hélas quand on commence à developper des sites que l'on se rencontre de la bouze qu'est ie6. C'est fini sur mon ordi, je ne le garderai que pour les vérifs. Je viens d'installer leur dernier opera 8.5, il est très sympa et sans pub.
Bonjour,
Super ce truc ca marche (presque a merveille)
J'ai utilisé :
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=crop src=image.png');
background-image: none;
Puis pour les liens :
a
{
position: relative;
z-index: 1;
}
Le seul problème est que j'ai un boutton de formulaire qui comme les liens sans cette petite astuce ne fonctionne pas, quelqu'un aurait il une idée pour les boutons de formulaires ?*
Merci d'avance.
teste :
input { position: relative; z-index: 1; }tiens moi au courant si ca marche...
edit : j'ai testé, ça marche
Finalement, le plus simple est quand même de prendre Gimp et de setter la couleur de backGround à la main...
C'est moins beau et réutilisable mais comme je ne peux pas garantir que les visiteurs de mon site auront FireFox, un mac ou ie7...
Tant pis pour la transparence du PNG... Ca attendra encore un peu !
Merci en tout cas pour cet article très intéressant
Bien sur, quand on est certain de la couleur de fond, autant la définir avec Gimp. Mais il y a des cas où on a besoin de plus, comme sur le design de ce site par exemple.
Bon perso, le problème des liens ne se règle pas de cette manière chez moi et d'ailleurs je cherche toujours
Le lien semble exister et avoir le bon focus même sans le hack..mais il a des dimensions du style 1X1px...
En specifiant une taille au lien transformé en block..je n'ai toujours pas de résultat.
Je suis preneur pour une idée. Merci
Bizarre, je n'ai jamais eu ce problème...
Excellent, j'avais trouvé des docs avec
a, input {position: relative; z-index: 1;}
Mais sans le input ! Et ça, ça change tout, pour les champs de saisie... Un grand merci !
Aussi, il y a un problème sur l'objet flash et je n'arrive pas !

a, input, objet {position: relative; z-index: 1;} ou non ?
Merci pour aider
Idem pour moi: ce code ne fonctionne pas: a {position: relative; z-index: 1;}
je peux voir les contours du lien avec border, mais impossible de cliquer dessus!
Salut
Moi non plus je n'arrive pas a cliquer sur mes liens malgrés l'utilisation de z-index: 1 + position:relative
(sinon la transparence marche...)
Bye
Bon il faudrai que je revérifie. Le problème, c'est que je n'ai plus IE6
Idem chez moi... ça bloque!
Pour voir , allez là : http://www.jobetudiant.net/?newStyl... puis rentrez un email et un mot de passe bidon dans le champs de login... Vous aurez alors un message d'erreur impossible à fermer sous IE si je veux la transparence de mon "pop-up"!
Chez moi la transparence de ton blog ne marche pas sous IE, ainsi que sur le site où j'essai de l'intégrer (j'ai du recourir au gif :'( :'( :'( à quand un gif24bit :p)
Bonjour,
avez vous finalement trouvé une solution pour le problèmes des liens "inactifs" dans le cas de l'utilisation d'un script du type PNGfix?
Merci !
Essayez avec ce procédé: http://midiwebconcept.free.fr/PNG_I...
pour les liens ajouter juste position:relative dans la css .
Par contre si quelqu'un connait le moyen de positionner une image de fond png sous ie 6 et < , a premiere vu c'est impossible, mais par experience je sait que rien n'est impossible dans le www
Sinon j'utilise maintenant beaucoup de png transprent , et tampis pour les ie6< , apres tout ils ont acces a firefox, et ce n'est pas ce qui empeche le contenu de s'afficher , bref je ne me bride plus , et ca va beaucoup mieux pour moi :D et finalement meme le client est content de voir une version plus jolie sous firefox, tant que dés le départ on se met d'accord sur le fait que quelques variations auront lieu dans le design, apres tout on arrete pas le progres !
Dans le même esprit que la page citée:
( http://midiwebconcept.free.fr/PNG_I... )
Je donne un exemple de code pour un background PNG
(valable pour <table> et <td> et marche sous IE, FFx et Opera):
<html xmlns:v=VML>
<head>
<style>
v\:*{behavior:url(#default#VML)}
</style>
</head>
<body>
Bonjour!<br>
<![if IE]>
<v:rect style='width:250;height:210' stroked=f>
<table width=250 height=210>
<v:fill src="MonImage.png" type=tile /></v:rect>
<![if !IE]>
<table width=250 height=210 background="MonImage.png">
<![endif]>
<tr><td><font color=fuchsia size=6><b>
BLABLABLA....<br>
BLABLABLA....
</td></tr></table>
A bientot!
</body>
</html>
Merci pour l'astuce c'est très pratique
Pour la deuxième solution on peux le faire avec photoshop aussi il suffit de mettre entrelacé dans l'option png(ou peut être que ça ne fait que noir je n'ai pas testé les autres couleurs^^)
je voudrais répondre à "defré" pour ce qui concerne la méthode 'scale'.
sache que le HEIGHT dans ie6 équivaut en réalité à min-height...
donc si tu cible ton div rien que pour ie6 ( *html #nomdudiv ) tu peux lui donner une height de par 10px par exemple, et si tu as un contenu qui dépasse, et bien ton backgroune continue au delà des 10px... ) ceci ne vaut bien sur que pour des background qui peuvent s'étirer, comme par exemple un fond uni en transparence ou un léger dégradé que tu pourrais étirer...
je t'avoue que je commence à peine à pouvoir gerer les hacks pour ie6...ce qui est triste c'est qu'il faut détruire son code cs "propre" pour faire fonctionner ce fichu navigateur...
mais pourquoiiiiiiiiiiiiiii bill, pourquoiiiiiiiiiiiii nous fait tu ça à nous les développeurs ?
bonjour,
je viens de trouver votre astuce, et bravo, ça marche très bien !
En revanche, vous suggérez de créer un nouveau css, nommé iefix.css, mais je vous suggère une autre solution :
dans votre css principale, ajoutez sur le border "normal" l'attribut !important.
ça donne :
background: transparent url(image.png) no-repeat !important;
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=crop src='image.png');
background-image: none;
ça marche très bien, et ça ne fait qu'une css à gérer.
al1
rectification... ça ne marche pas si bien...
en effet, sous IE, j'ai des liens qui ne marchent plus du tout !
comme si le z-index n'était tout simplement pas pris en compte
quelqu'un a trouvé la solution ?
merci !
al1
Salut à tous !
Si c'est le lien lui-même qui a un arrière-plan en png, comment on fait pour cliquer dessus ?!
É.
Bonjour ! Je voudrais savoir si l'impossibilité de changer la couleur transparente sur Photoshop est confirmée ou si c'est possible ?
Ca m'étonne quand même, un logiciel aussi performant qui coute 1000 € ! On doit pourvoir le faire, mais connaissant la simplicité de leur logiciel, cette option doit être paumée au fin fond d'un menu !
Quoi qu'il en soit, merci de vos réponses et merci d'avance
Bonne journée !
(PS: Sur Adobe Photoshop CS2)
Bonjour à tous,
J'ai aussi été confronté à ce problème, qu'est-ce que j'ai pu grogner après IE, c'est vraiment une belle daube, heureusement qu'ils ont corrigé ça dans IE7, mais chez crosoft, ils ont encore du retard à rattraper au niveau des standards.
PS: pour ceux qui ont des liens qui ne marchent plus (même avec l'astuce) essayez de faire pareil mais en mettant "position : absolute;" au lieu de "position : relative;", pour comprendre, il y a des explications bien complètes sur google.