<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://blog.britoweb.net/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/"
  xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
  <title>Blog - Britoweb - Tag - png</title>
  <link>http://blog.britoweb.net/</link>
  <atom:link href="http://blog.britoweb.net/feed/tag/png/rss2" rel="self" type="application/rss+xml"/>
  <description>Le Web à la sauce standard</description>
  <language>fr</language>
  <pubDate>Sat, 03 Jan 2009 15:02:47 +0100</pubDate>
  <copyright>Billets sous licence Creative Commons BY-NC-SA</copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>CSS, PNG : ne pas rester prisonnier d'Internet Explorer 6</title>
    <link>http://blog.britoweb.net/post/2008/03/24/CSS-PNG-ne-pas-rester-prisonnier-d-Internet-Explorer-6</link>
    <guid isPermaLink="false">urn:md5:ec69801c5185fbb1d9d90c4599823e14</guid>
    <pubDate>Mon, 24 Mar 2008 23:19:00 +0100</pubDate>
    <dc:creator>Victor Brito</dc:creator>
        <category>CSS</category>
        <category>commentaires conditionnels</category><category>css</category><category>dom</category><category>hacks css</category><category>internet explorer</category><category>internet explorer 6</category><category>navigateurs</category><category>png</category><category>standards web</category><category>sélecteurs css</category><category>w3c</category>    
    <description>&lt;p&gt;La &lt;a href=&quot;http://www.w3.org/TR/CSS21/&quot; hreflang=&quot;en&quot; title=&quot;Spécification CSS 2.1 du W3C&quot;&gt;spécification &lt;acronym title=&quot;Cascading StyleSheets&quot;&gt;CSS&lt;/acronym&gt; 2.1&lt;/a&gt; offre des possibilités d'appliquer un style à un document Web si riches (et je ne parle pas de ce que nous réserve CSS 3…) qu'elle paraît trop en avance pour les navigateurs «&amp;nbsp;mauvais élèves », comme Internet Explorer 6. Même si ce dernier est encore, hélas&amp;nbsp;! répandu, ce n'est pas une raison de ne pas utiliser toute la puissance des CSS.&lt;/p&gt;    &lt;p&gt;Prenons l'exemple de ce bout de code &lt;acronym title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/acronym&gt;&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;&amp;lt;div id=&quot;exemple&quot;&amp;gt;
  &amp;lt;h1&amp;gt;Titre&amp;lt;/h1&amp;gt;
  &amp;lt;ul&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://blog.britoweb.net/post/2008/03/24/section1.html&quot;&amp;gt;Section 1&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;
      &amp;lt;a href=&quot;http://blog.britoweb.net/post/2008/03/24/section2.html&quot;&amp;gt;Section 2&amp;lt;/a&amp;gt;
      &amp;lt;ul&amp;gt;
        &amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://blog.britoweb.net/post/2008/03/24/section2-1.html&quot;&amp;gt;Section 2.1&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
        &amp;lt;li&amp;gt;
          &amp;lt;a href=&quot;http://blog.britoweb.net/post/2008/03/24/section2-2.html&quot;&amp;gt;Section 2.2&amp;lt;/a&amp;gt;
          &amp;lt;ul&amp;gt;
            &amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://blog.britoweb.net/post/2008/03/24/section2-2-1.html&quot;&amp;gt;Section 2.2.1&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
            &amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://blog.britoweb.net/post/2008/03/24/section2-2-2.html&quot;&amp;gt;Section 2.2.2&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
          &amp;lt;/ul&amp;gt;
        &amp;lt;/li&amp;gt;
        &amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://blog.britoweb.net/post/2008/03/24/section2-3.html&quot;&amp;gt;Section 2.3&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
      &amp;lt;/ul&amp;gt;
    &amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://blog.britoweb.net/post/2008/03/24/section3.html&quot;&amp;gt;Section 3&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://blog.britoweb.net/post/2008/03/24/section4.html&quot;&amp;gt;Section 4&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;a href=&quot;http://blog.britoweb.net/post/2008/03/24/section5.html&quot;&amp;gt;Section 5&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;Nous voulons que chaque élément de liste ait une bordure en haut, sauf le premier de chaque liste, et que les listes imbriquées aient une couleur d'arrière-plan différente de celle de la liste qui la contient. Pour corser les choses, le deuxième élément de chaque liste doit avoir son texte en gras.&lt;/p&gt;


&lt;p&gt;Il est possible de réaliser cette volonté &lt;strong&gt;sans qu'on touche au code HTML&lt;/strong&gt;, en codant, par exemple, le code CSS suivant&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;/* Texte en gras pour le deuxième élément li de chaque liste */
#exemple li:first-child + li {
  font-weight: bold;
}
/* Si ce deuxième élément contient une liste,
   seul le deuxième élément de cette dernière est en gras
   (le reste est en graisse normale) */
#exemple li &amp;gt; ul {
  font-weight: normal;
}
/* Bordure */
#exemple li {
  border-top: 1px solid black;
}
/* Pas de bordure pour chaque premier élément li */
#exemple li:first-child {
  border-top: none;
}
/* Couleurs d'arrière-plan différentes pour les listes selon leur niveau */
#exemple &amp;gt; ul {
  background-color: yellow;
}
#exemple &amp;gt; ul &amp;gt; li &amp;gt; ul {
  background-color: orange;
}
#exemple &amp;gt; ul &amp;gt; li &amp;gt; ul &amp;gt; li &amp;gt; ul {
  background-color: red;
}&lt;/pre&gt;

&lt;p&gt;Pour résumer, nous recourons aux sélecteurs d'élément enfant (&lt;code&gt;&amp;gt;&lt;/code&gt;) et adjacent (&lt;code&gt;+&lt;/code&gt;), ainsi qu'à une pseudo-classe (&lt;code&gt;:first-child&lt;/code&gt;), pour traiter les différents niveaux de liste. Et ça marche sous Firefox 2, Opera 9 et Safari 3, ainsi que sous Internet Explorer 7.&lt;/p&gt;


&lt;p&gt;&lt;q&gt;Ça ne marche pas sous &lt;acronym title=&quot;Internet Explorer&quot;&gt;IE&lt;/acronym&gt; 6&lt;/q&gt;, me direz-vous. C'est un fait, certes&amp;nbsp;; mais, &lt;strong&gt;cela ne doit pas être une excuse&lt;/strong&gt; pour mépriser les sélecteurs évoqués ci-dessus, sous prétexte que cela compliquerait la maintenance pour les intégrateurs ou que tout ce qui en CSS n'est pas compris par IE 6 est à ignorer parce que les utilisateurs d'IE 6 sont la cible principale.&lt;/p&gt;


&lt;p&gt;Pour ma part, j'estime que la maintenance est plus compliquée lorsqu'on doit ajouter des attributs &lt;code&gt;class&lt;/code&gt; (ou quelques &lt;code&gt;id&lt;/code&gt; lorsque le contexte du code HTML le permet), au risque de friser la &lt;q cite=&quot;http://forum.alsacreations.com/topic-6-18704-1-Mon-site-est-il-parfaitement-accessible-.html#p141123&quot;&gt;classite aiguë&lt;/q&gt; (comme dirait Raphaël Goetter), alors qu'en utilisant toute la puissance des CSS, notamment grâce à ses sélecteurs, on garde la faculté d'alléger le code HTML (et donc de réaliser des économies de bande passante, même s'il ne s'agit que de quelques kilo-octets &lt;img src=&quot;http://blog.britoweb.net/themes/normal-marron/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt; ).&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Cela ne veut pas dire, pour autant, qu'il faille interdire l'utilisation des classes en CSS.&lt;/strong&gt; Si l'on souhaite ou doit tenir compte d'IE 6, on peut s'en servir dans notre exemple (pour distinguer les éléments &lt;code&gt;li&lt;/code&gt; devant être mis en gras). Mais, la classe ajoutée &lt;em&gt;ne servira qu'au correctif pour IE 6&lt;/em&gt; si l'on veut y reproduire le style recherché. Auquel cas il faudra créer une feuille de style à part, qui ne servira &lt;em&gt;que&lt;/em&gt; pour IE 6 (et les versions antérieures à la 6, si l'on veut) et qu'on appellera par un &lt;a href=&quot;http://www.blog-and-blues.org/articles/Les_syntaxes_de_commentaires_conditionnels_pour_IE_Windows&quot; title=&quot;Syntaxe des commentaires conditionnels pour Internet Explorer Windows&quot;&gt;commentaire conditionnel&lt;/a&gt;. C'est une méthode à la fois plus pérenne et plus propre, en ce sens qu'une fois qu'IE 6 aura disparu du marché des navigateurs (et plus vite il disparaîtra, mieux ce sera &lt;img src=&quot;http://blog.britoweb.net/themes/normal-marron/smilies/normal.png&quot; alt=&quot;:-|&quot; class=&quot;smiley&quot; /&gt; ), on pourra non seulement ôter les classes du code HTML, mais surtout supprimer la feuille de style pour IE 6, &lt;strong&gt;sans qu'on ait besoin de maintenir la feuille de style principale&lt;/strong&gt;, contrairement à la méthode des hacks CSS (ou de l'utilisation d'une seule feuille de style, qui mélange règles CSS standards et corrections pour IE), qui pollue une feuille de style qui, après tout, ne doit contenir que des règles CSS conçues pour être appliquées sans broncher par les navigateurs, à commencer par ceux qui respectent les standards.&lt;/p&gt;


&lt;p&gt;On peut en dire tout autant concernant les images en &lt;acronym title=&quot;Portable Network Graphics&quot;&gt;PNG&lt;/acronym&gt; contenant une couche de transparence. Sous prétexte qu'IE 6 ne gère pas nativement la transparence du format PNG, beaucoup en viennent à brider la créativité en matière de design Web, en se contentant du format &lt;acronym title=&quot;Graphics Interchange Format&quot;&gt;GIF&lt;/acronym&gt; pour utiliser de la transparence, mais sans pouvoir utiliser de couche Alpha ni aller au-delà de 256 couleurs (ce qui condamne l'utilisation de dégradés de couleurs). Si l'on souhaite ou doit tenir compte d'IE 6, même motif, même punition que pour les CSS&amp;nbsp;: un commentaire conditionnel, où l'on remplacera le PNG qui ne passe pas par un GIF ou, mieux, par un &lt;acronym title=&quot;Joint Photographic Experts Group&quot;&gt;JPEG&lt;/acronym&gt; équivalent, l'idéal étant que l'image en question soit une image générée en CSS (même si l'on peut utiliser les commentaires conditionnels pour afficher ou masquer un contenu HTML à Internet Explorer).&lt;/p&gt;


&lt;p&gt;Et je ne vais pas me hasarder à parler du &lt;acronym title=&quot;Document Object Model&quot;&gt;DOM&lt;/acronym&gt; et de la manière standard de parcourir l'arborescence d'un document HTML, où l'on peut jongler à merveille entre les liens de parenté qu'entretiennent les élements entre eux, voire boucler entre éléments frères. &lt;img src=&quot;http://blog.britoweb.net/themes/normal-marron/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;


&lt;p&gt;Bref, tout cela pour dire que, malheureusement, même dans le milieu des agences Web, on continue encore à coder «&amp;nbsp;à la cochonne », en n'osant pas exploiter à fond toutes les possibilités des CSS parce qu'on reste prisonnier d'un navigateur et d'une version qui ne respectent pas les standards du Web&amp;nbsp;: on crée des classes pour sélectionner le premier élément enfant, on pollue la feuille de style principale de hacks et de propriétés CSS propriétaires (comme &lt;code&gt;filter&lt;/code&gt; ou &lt;code&gt;zoom&lt;/code&gt;) qui l'invalident dès qu'elle passe au validateur CSS du &lt;acronym title=&quot;World Wide Web Consortium&quot;&gt;W3C&lt;/acronym&gt;… Même s'il faut tenir compte des problèmes de compatibilité entre les navigateurs et entre les versions d'un même navigateur, &lt;strong&gt;il ne faut pas rester prisonnier de ce cancre qu'est Internet Explorer 6&lt;/strong&gt;, d'autant moins que la version 7 fait son bonhomme de chemin, que la version 8 pointe déjà son nez et qu'un code pérenne doit se tourner vers cet avenir, de plus en plus présent, qu'est la généralisation des standards du Web.&lt;/p&gt;


&lt;p&gt;Il est &lt;em&gt;important d'&lt;a href=&quot;http://css.alsacreations.com/Faire-une-mise-en-page-sans-tableaux/Mise-en-page-CSS-avancee-grace-a-la-propriete-display&quot; title=&quot;Exemple d&amp;#039;utilisation de la puissance des CSS&amp;nbsp;: mise en page avancée avec la propriété display&quot;&gt;avancer en CSS&lt;/a&gt;&lt;/em&gt;&amp;nbsp;; sinon, nous en serions à coder en mode &lt;q lang=&quot;en&quot;&gt;&lt;a href=&quot;http://blog.alsacreations.com/2005/08/01/183-choix-dune-dtd-le-doctype-switching-nest-pas-pour-nous&quot; title=&quot;L&amp;#039;utilisation du mode Quirks et du doctype switching n&amp;#039;est pas pour nous&quot;&gt;Quirks&lt;/a&gt;&lt;/q&gt;, ce qui n'arrangerait pas du tout le W3C, dont le travail &lt;em&gt;essentiel&lt;/em&gt; est de faire en sorte que, sur le Web, tout le monde parle les mêmes langages côté client, afin de faciliter la tâche des concepteurs de sites.&lt;/p&gt;</description>
    
    
    
      </item>
    
</channel>
</rss>