<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://blog.pabloprieto.net/index.php/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
  <title>Pablo Prieto - Blog - png</title>
  <link>http://blog.pabloprieto.net/index.php/</link>
  <description>&quot;Faire des sites web c'est pas facile tous les jours&quot;</description>
  <language>fr</language>
  <pubDate>Fri, 19 Mar 2010 06:31:23 +0100</pubDate>
  <copyright></copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>IE6 et PNG, je t'aime moi non plus</title>
    <link>http://blog.pabloprieto.net/index.php/post/2006/08/07/IE6-et-PNG-je-taime-moi-non-plus</link>
    <guid isPermaLink="false">urn:md5:741dceef9a1fb0012abc00d2362408da</guid>
    <pubDate>Mon, 07 Aug 2006 09:54:00 +0200</pubDate>
    <dc:creator>Pab.</dc:creator>
        <category>Conception HTML et CSS</category>
        <category>css</category><category>internet explorer</category><category>png</category>    
    <description>&lt;p&gt;Malgré le bug d'IE6 empêchant l'affichage des PNG transparents (32 bits) il existe quelques solutions de contournement. Je vais essayer de rassembler dans ce billet les différents techniques utilisées, en insistant sur leur fiabilité dans la pratique, si vous décidez de les utiliser dans le cadre d'un projet professionnel.&lt;/p&gt;    &lt;h3&gt;Cas d'un PNG dans une CSS (en image de fond)&lt;/h3&gt;


&lt;p&gt;Cette technique fonctionne à 2 conditions&amp;nbsp;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;le bloc recevant l'image de fond doit être positionné &lt;strong&gt;en absolute&lt;/strong&gt; ou avoir &lt;strong&gt;ses propriétés width ou height fixées&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;l'image ne peut être &lt;strong&gt;ni répétée ni positionnée&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Voici un bloc auquel nous allons appliquer un png en image de fond&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
&amp;lt;div id=&amp;quot;test&amp;quot;&amp;gt;	
	&amp;lt;ul&amp;gt;
		&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Item 1&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
		&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Item 2&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
		&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot;&amp;gt;Item 3&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
	&amp;lt;/ul&amp;gt;		
&amp;lt;/div&amp;gt;
&lt;/pre&gt;


&lt;p&gt;Voici ensuite le code CSS&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
#test{
	width:400px;
	background: url(&amp;quot;fond.png&amp;quot;) no-repeat  0 0;
}
&lt;/pre&gt;


&lt;p&gt;Pour IE, grâce aux &lt;a href=&quot;http://www.blog-and-blues.org/articles/Les_syntaxes_de_commentaires_conditionnels_pour_IE_Windows&quot; hreflang=&quot;fr&quot;&gt;commentaires conditionnels&lt;/a&gt;, nous allons ensuite annuler l'image de fond et appliquer la propriété &lt;code&gt;filter&lt;/code&gt; à la place&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
&amp;lt;!--[if lt IE 7]&amp;gt;
&amp;lt;style type=&amp;quot;text/css&amp;quot; media=&amp;quot;screen&amp;quot;&amp;gt;
#test{
	background-image: none;
	filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fond.png', sizingMethod='crop');
}
&amp;lt;/style&amp;gt;		
&amp;lt;![endif]--&amp;gt;
&lt;/pre&gt;


&lt;p&gt;la propriété sizingMethod peut recevoir comme valeur 'image', 'scale' ou 'crop'. La valeur 'scale' ajuste les dimensions de l'image à la taille du bloc, pour plus de détail je vous invite à consulter &lt;a href=&quot;http://msdn.microsoft.com/workshop/author/filter/reference/filters/alphaimageloader.asp&quot; hreflang=&quot;en&quot;&gt;la doc officielle chez Microsoft&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;Bizarrement, l'url de l'image dans la propriété filter &lt;strong&gt;doit être relative à la page html&lt;/strong&gt;, et non à la feuille de style, pensez-y si les 2 fichiers ne sont pas au même niveau.&lt;/p&gt;


&lt;h4&gt;Un problème de liens...&lt;/h4&gt;


&lt;p&gt;Vous allez maintenant vous rendre compte que les liens à l'intérieur de notre bloc ne fonctionnent pas... plutôt bloquant.&lt;/p&gt;


&lt;p&gt;Pour y remédier, il faut alors rajouter la propriété &lt;code&gt;position:relative&lt;/code&gt; aux liens&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
&amp;lt;!--[if lt IE 7]&amp;gt;
&amp;lt;style type=&amp;quot;text/css&amp;quot; media=&amp;quot;screen&amp;quot;&amp;gt;
#test{
	background-image: none;
	filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fond.png', sizingMethod='crop');
}	
#test a{
	position:relative;
}
&amp;lt;/style&amp;gt;		
&amp;lt;![endif]--&amp;gt;
&lt;/pre&gt;


&lt;p&gt;Et voilà, les liens redeviennent cliquables.&lt;/p&gt;



&lt;h3&gt;Cas d'une image dans le corps de page&lt;/h3&gt;


&lt;p&gt;Ici une seule condition&amp;nbsp;: les attributs width et height de l'image doivent être fixés.&lt;/p&gt;


&lt;p&gt;Le principe consiste à remplacer l'image par un gif transparent et lui appliquer en fond le png grâce à l'attribut filter ci-dessus. Ce comportement peut être automatisé grâce à un fichier htc (à télécharger en annexe). On applique simplement ce comportement aux images, avec la propriété CSS behavior&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
img{
	behavior: url(&amp;quot;png.htc&amp;quot;);
}
&lt;/pre&gt;


&lt;p&gt;pour affiner la chose, on peut choisir de l'utiliser dans une classe&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
img.png{
	behavior: url(&amp;quot;png.htc&amp;quot;);
}
&lt;/pre&gt;

&lt;pre&gt;
&amp;lt;img src=&amp;quot;image.png&amp;quot; width=&amp;quot;100&amp;quot; height=&amp;quot;100&amp;quot; alt=&amp;quot;&amp;quot; class=&amp;quot;png&amp;quot; /&amp;gt;
&lt;/pre&gt;


&lt;p&gt;Placez de préférence les fichiers png.htc et blank.gif au même endroit que votre page html. Ici encore, l'url du fichier htc doit être relative à la page html, et non à la feuille de style.&lt;/p&gt;


&lt;p&gt;Bien évidement, &lt;code&gt;behavior&lt;/code&gt; et &lt;code&gt;filter&lt;/code&gt; ne sont pas des propriétés valides. Encore une fois utilisez les commentaires conditionnels ;)&lt;/p&gt;


&lt;p&gt;Pour conclure, je vous conseille de rester prudent avec ces techniques sur des projets sensibles (et des clients pointilleux... ;) ), et prenez le temps de tester &quot;en conditions réelles&quot; avant de vous prononcer sur la faisabilité.&lt;/p&gt;</description>
    
          <enclosure url="http://blog.pabloprieto.net/public/iepng_burnyourbrowser.zip"
      length="6868" type="application/zip" />
    
    
          <comments>http://blog.pabloprieto.net/index.php/post/2006/08/07/IE6-et-PNG-je-taime-moi-non-plus#comment-form</comments>
      <wfw:comment>http://blog.pabloprieto.net/index.php/post/2006/08/07/IE6-et-PNG-je-taime-moi-non-plus#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.pabloprieto.net/index.php/feed/rss2/comments/2</wfw:commentRss>
      </item>
    
</channel>
</rss>