<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>css 4 design &#187; Commentaires conditionnels</title>
	<atom:link href="http://css4design.com/tag/commentaires-conditionnels/feed" rel="self" type="application/rss+xml" />
	<link>http://css4design.com</link>
	<description>Le blog de l&#039;intégrateur web</description>
	<lastBuildDate>Sun, 05 Feb 2012 18:10:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<atom:link rel='hub' href='http://css4design.com/?pushpress=hub'/>
		<item>
		<title>Ajouter une classe CSS dans BODY ou HTML pour Internet Explorer (IE6 &#8212; IE9)</title>
		<link>http://css4design.com/ajouter-une-classe-css-dans-body-ou-html-pour-internet-explorer-ie6-ie7-ie8-ou-ie9</link>
		<comments>http://css4design.com/ajouter-une-classe-css-dans-body-ou-html-pour-internet-explorer-ie6-ie7-ie8-ou-ie9#comments</comments>
		<pubDate>Thu, 01 Apr 2010 20:46:19 +0000</pubDate>
		<dc:creator>Bruno Bichet</dc:creator>
				<category><![CDATA[Intégration web]]></category>
		<category><![CDATA[Commentaires conditionnels]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[IE6]]></category>
		<category><![CDATA[IE7]]></category>
		<category><![CDATA[IE8]]></category>
		<category><![CDATA[Internet Explorer]]></category>

		<guid isPermaLink="false">http://css4design.com/?p=5690</guid>
		<description><![CDATA[Toujours dans ma recherche de solution pour servir des déclarations CSS uniquement à Internet Explorer, je suis tombé sur une technique que j&#8217;appellerais «classification» sélective du body (ou de la balise html) en  fonction du navigateur. Une fois encore, les commentaires conditionnels serviront à détecter Internet Explorer pour ajouter une classe à la balise html pour éviter de créer une feuille de style dédiée à IE. &#60;!--[if !IE]&#62;&#60;!--&#62;&#60;html&#62;&#60;!-- &#60;![endif]--&#62; &#60;!--[if IE]&#62;&#60;html class="ie"&#62;&#60;![endif]--&#62; Reste à utiliser ce sélecteur .ie dans votre feuille de style pour cibler IE toute version confondue. Rien n&#8217;empêche d&#8217;utiliser plusieurs commentaires pour cibler différentes versions, comme le suggère Yves Van [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 18px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcss4design.com%2Fajouter-une-classe-css-dans-body-ou-html-pour-internet-explorer-ie6-ie7-ie8-ou-ie9">
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcss4design.com%2Fajouter-une-classe-css-dans-body-ou-html-pour-internet-explorer-ie6-ie7-ie8-ou-ie9&amp;source=br1o&amp;style=normal&amp;service=bit.ly&amp;service_api=R_0c1ee4b64f105d1b2672690740a77d6a&amp;b=2" height="61" width="50" />
			</a>
		</div><p>Toujours dans ma recherche de solution pour servir des déclarations CSS uniquement à Internet Explorer, je suis tombé sur une technique que j&#8217;appellerais «classification» sélective du <code>body</code> (ou de la balise <code>html</code>) en  fonction du navigateur. Une fois encore, les <a href="http://css4design.com/commentaires-conditionnels-d-internet-explorer-vs-hacks-css">commentaires conditionnels</a> serviront à détecter Internet Explorer pour ajouter une classe à la balise <code>html</code> pour éviter de créer une feuille de style dédiée à IE.<span id="more-5690"></span>
<pre>&lt;!--[if !IE]&gt;&lt;!--&gt;&lt;html&gt;&lt;!-- &lt;![endif]--&gt;
&lt;!--[if IE]&gt;&lt;html class="ie"&gt;&lt;![endif]--&gt;</pre>
Reste à utiliser ce sélecteur <code>.ie</code> dans votre feuille de style pour cibler IE toute version confondue. Rien n&#8217;empêche d&#8217;utiliser plusieurs commentaires pour cibler différentes versions, <a href="http://css4design.com/une-feuille-de-style-et-des-hacks-css-pour-cibler-ie6-ie7-ou-ie8#comment-4495">comme le suggère</a> Yves Van Goethem (dont le code source de la page personnelle &#8211; <a href="http://yves.vg/">http://yves.vg</a> &#8211; a fourni la matière première de ce billet).</p>

<h2>Cibler chaque version d&#8217;Internet Explorer</h2>

<p><pre>&lt;!--[if !IE]&gt;&lt;!--&gt;&lt;html&gt;&lt;!-- &lt;![endif]--&gt;
&lt;!--[if lte IE 6]&gt;&lt;html class="ie6"&gt;&lt;![endif]--&gt;
&lt;!--[if IE 7]&gt;&lt;html class="ie7"&gt;&lt;![endif]--&gt;
&lt;!--[if gte IE 8]&gt;&lt;html class="ie8"&gt;&lt;![endif]--&gt;</pre>
Internet Explorer ne tiendra pas compte de la première ligne. Ensuite, on fait un premier tri pour mettre de côté les versions inférieures ou égales à IE6.  Plus loin, on isole IE7, et pour finir on cible les versions supérieures ou égales à IE8.</p>

<h3>Et le prochain IE9 ?</h3>

<p>Si IE9 utilise les commentaires conditionnels de la même manière, il sera toujours temps de modifier la dernière ligne et d&#8217;en ajouter une :
<pre>&lt;!--[if IE 8]&gt;&lt;html class="ie8"&gt;&lt;![endif]--&gt;
&lt;!--[if IE 9]&gt;&lt;html class="ie9"&gt;&lt;![endif]--&gt;</pre></p>

<h2>Exemple d&#8217;utilisation</h2>

<p>Dans la feuille de style, on pourra utiliser (au hasard) :
<pre>#sidebar { width: 200px; }
.ie6 #sidebar { margin-left: -3px; }</pre></p>

<h2>Mise à jour (17/02/2011)</h2>

<p>Voici les commentaires conditionnels utilisé par le framework <a href="http://html5boilerplate.com/">HTML5 Boilerplate</a> :
<pre>&lt;!doctype html&gt;</p>

<p>&lt;!-- paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/ --&gt;
&lt;!--[if lt IE 7 ]&gt; &lt;html lang="fr" class="ie6"&gt; &lt;![endif]--&gt;
&lt;!--[if IE 7 ]&gt;    &lt;html lang="fr" class="ie7"&gt; &lt;![endif]--&gt;
&lt;!--[if IE 8 ]&gt;    &lt;html lang="fr" class="ie8"&gt; &lt;![endif]--&gt;
&lt;!--[if IE 9 ]&gt;    &lt;html lang="fr" class="ie9"&gt; &lt;![endif]--&gt;
&lt;!--[if (gt IE 9)|!(IE)]&gt;&lt;!--&gt; &lt;html lang="fr"&gt; &lt;!--&lt;![endif]--&gt;</pre></p>

<h3 class='related_post_title'>Articles sur le même sujet</h3>

<ul class='related_post'><li><a href='http://css4design.com/tester-un-site-dans-plusieurs-navigateurs-mais-surtout-dans-ie6-avec-vista' title='Tester un site dans plusieurs navigateurs (mais surtout dans IE6 avec Vista)'>Tester un site dans plusieurs navigateurs (mais surtout dans IE6 avec Vista)</a></li><li><a href='http://css4design.com/un-seul-fichier-css-pour-cibler-ie6-et-ie7-avec-les-commentaires-conditionnels' title='Un seul fichier CSS pour cibler IE6 et IE7 avec les commentaires conditionnels'>Un seul fichier CSS pour cibler IE6 et IE7 avec les commentaires conditionnels</a></li><li><a href='http://css4design.com/test-drive-ie9-preview-sur-vista' title='«Test Drive» (IE9 preview) sur Vista'>«Test Drive» (IE9 preview) sur Vista</a></li><li><a href='http://css4design.com/une-feuille-de-style-et-des-hacks-css-pour-cibler-ie6-ie7-ou-ie8' title='Une Feuille de style et des « hacks CSS » pour cibler IE6, IE7 ou IE8'>Une Feuille de style et des « hacks CSS » pour cibler IE6, IE7 ou IE8</a></li><li><a href='http://css4design.com/le-petit-journal-de-l-integrateur-web-html5-et-css' title='HTML5 et CSS pour l&#039;intégrateur web'>HTML5 et CSS pour l&#039;intégrateur web</a></li></ul>
 <p><a href="http://css4design.com/?flattrss_redirect&amp;id=5690&amp;md5=8284940a47965b77477246da30833c6e" title="Flattr" target="_blank"><img src="http://css4design.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://css4design.com/ajouter-une-classe-css-dans-body-ou-html-pour-internet-explorer-ie6-ie7-ie8-ou-ie9/feed</wfw:commentRss>
		<slash:comments>18</slash:comments>
		<atom:link rel="payment" href="http://css4design.com/?flattrss_redirect&amp;id=5690&amp;md5=8284940a47965b77477246da30833c6e" type="text/html" />
	</item>
		<item>
		<title>Une Feuille de style et des « hacks CSS » pour cibler IE6, IE7 ou IE8</title>
		<link>http://css4design.com/une-feuille-de-style-et-des-hacks-css-pour-cibler-ie6-ie7-ou-ie8</link>
		<comments>http://css4design.com/une-feuille-de-style-et-des-hacks-css-pour-cibler-ie6-ie7-ou-ie8#comments</comments>
		<pubDate>Sun, 14 Mar 2010 20:38:27 +0000</pubDate>
		<dc:creator>Bruno Bichet</dc:creator>
				<category><![CDATA[HTML & CSS]]></category>
		<category><![CDATA[Intégration web]]></category>
		<category><![CDATA[Navigateurs]]></category>
		<category><![CDATA[Commentaires conditionnels]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Edito]]></category>
		<category><![CDATA[Google Chrome]]></category>
		<category><![CDATA[Hacks CSS]]></category>
		<category><![CDATA[IE6]]></category>
		<category><![CDATA[IE7]]></category>
		<category><![CDATA[IE8]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Navigateur]]></category>
		<category><![CDATA[Opera]]></category>
		<category><![CDATA[Safari]]></category>
		<category><![CDATA[Sélecteur]]></category>
		<category><![CDATA[Tutoriels]]></category>

		<guid isPermaLink="false">http://css4design.com/?p=5631</guid>
		<description><![CDATA[Les hacks CSS sont une utilisation peu conventionnelle des sélecteurs CSS pour s&#8217;adresser à un ou plusieurs navigateurs quand on doit servir une propriété ou une valeur CSS spécifique à un ou plusieurs navigateurs. Si IE6 fait la fine bouche devant sa soupe de balises, il peut être intéressant de lui servir le même plat mais dans une assiette différente (la comparaison est bancale). Ces hacks s&#8217;utilisent souvent pour cibler des versions spécifiques d&#8217;Internet Explorer (généralement IE6 et IE7). Toutefois, il en existe pour Firefox, Opéra, Safari, iPhone, etc. Par ailleurs, je n&#8217;utilise pas ces hacks CSS dans ma feuille [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 18px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcss4design.com%2Fune-feuille-de-style-et-des-hacks-css-pour-cibler-ie6-ie7-ou-ie8">
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcss4design.com%2Fune-feuille-de-style-et-des-hacks-css-pour-cibler-ie6-ie7-ou-ie8&amp;source=br1o&amp;style=normal&amp;service=bit.ly&amp;service_api=R_0c1ee4b64f105d1b2672690740a77d6a&amp;b=2" height="61" width="50" />
			</a>
		</div><p>Les <em>hacks CSS</em> sont une utilisation peu conventionnelle des sélecteurs CSS pour s&#8217;adresser à un ou plusieurs navigateurs quand on doit servir une propriété ou une valeur CSS spécifique à un ou plusieurs navigateurs. Si IE6 fait la fine bouche devant sa soupe de balises, il peut être intéressant de lui servir le même plat mais dans une assiette différente (la comparaison est bancale). Ces <em>hacks</em> s&#8217;utilisent souvent pour cibler des versions spécifiques d&#8217;Internet Explorer (généralement IE6 et IE7). Toutefois, il en existe pour Firefox, Opéra, Safari, iPhone, etc. Par ailleurs, je n&#8217;utilise pas ces <em>hacks CSS</em> dans ma feuille de style principale, mais uniquement dans une CSS réservée à IE via les commentaires conditionnels.<span id="more-5631"></span></p>

<h2>Comment utiliser les hacks CSS ?</h2>

<p>Dans l&#8217;article <a href="http://css4design.com/un-seul-fichier-css-pour-cibler-ie6-et-ie7-avec-les-commentaires-conditionnels">Un seul fichier CSS pour cibler IE6 et IE7 avec les commentaires conditionnels</a>, j&#8217;utilisais un <a href="http://css4design.com/commentaires-conditionnels-d-internet-explorer-vs-hacks-css">commentaire conditionnel</a> pour cibler les versions inférieures ou égales à IE7. Toutefois, IE9 est sur les rails et il est temps de le prendre en compte, d&#8217;autant plus que<a href="http://www.zdnet.fr/actualites/internet/0,39020774,39710877,00.htm"> Microsoft veut en faire un champion</a> des standards du web en terme de rendu CSS3 et HTML5.</p>

<p>L&#8217;idée derrière la feuille de style unique pour IE est de ne pas augmenter inutilement le nombre de requêtes pour charger une CSS pour chaque version d&#8217;Internet Explorer. En attendant de voir ce que nous réserve IE9, j&#8217;ai décidé de cibler les versions inférieures ou égales à IE8 en espérant que IE9 tienne ses promesses et en attendant de voir s&#8217;il va continuer à gérer les commentaires conditionnels (auquel cas nous pourrions cibler les version inférieures à IE9).</p>

<h3>Cibler les versions &lt;= à IE8</h3>

<p><pre>&lt;!--[if lte IE 8]&gt;
    &lt;link rel="stylesheet" href="css/ie.css" type="text/css" media="screen,projection" /&gt;
&lt;![endif]--&gt;</pre>
De cette manière, les règles CSS placées dans <em>ie.css</em> s&#8217;adressent uniquement à Internet Explorer ; les autres navigateurs considèrent ces commentaires conditionnels comme de simples commentaires HTML. Ça va sans dire mais encore mieux en le disant : les déclarations situées dans <em>style.css</em> s&#8217;appliquent <strong>aussi</strong> à Internet Explorer ce qui implique que l&#8217;appel à  <em>ie.css</em> doit se situer <strong>après</strong> <em>style.css</em> pour surcharger les déclarations qui posent problème.</p>

<p class="small">Note : il existe une forme de commentaires conditionnels qui permet de cibler tous les navigateurs sauf Internet Explorer : <code>&lt;!--[if !IE]&gt; &lt;!--&gt; IE Windows ne lira pas ça &lt;!--&gt; &lt;![endif]--&gt;</code></p>

<p>Dans cette feuille de style <em>ie.css</em>, si IE6 (et seulement lui) ne se comporte pas comme prévu devant <code>#header { margin-top: 0; }</code>, il suffira d&#8217;y ajouter <code><strong>* html</strong> #header { margin-top: -5px; }</code> pour régler le problème. Si le problème concerne IE6 et IE7 et que IE8 se comporte de manière standard (c&#8217;est à dire que la règle située dans <em>style.css</em> suffit), il faudra utiliser les hacks de la manière suivante :
<pre>* html #search .submit { margin-top: -10px; } // IE6
*+html #search .submit { margin-top: -14px; } // IE7</pre>
En revanche, si vous avez également besoin d&#8217;une valeur différente pour IE8, il faudra prendre soin d&#8217;ajouter la règle CSS <code>#search .submit { margin-top: -7px; }</code> au-dessus des deux autres, soit :
<pre>&#35;search .submit { margin-top: -7px; }         //Toutes les versions d'IE
* html #search .submit { margin-top: -10px; } // Surcharge pour IE6 seulement
*+html #search .submit { margin-top: -14px; } // Surcharge pour IE7 seulement</pre></p>

<h2>Mettez vos frameworks CSS à jour</h2>

<p>Les <a href="http://css4design.com/choisir-un-frameworks-css">frameworks CSS</a> proposent souvent une feuille de style spécifique à Internet Explorer. Le plus souvent, le <em>hack</em> utilisé pour cibler IE7 est de la forme <code>html&gt;body</code> qui n&#8217;est pas pris en charge par IE6. Or, si l&#8217;on cible les versions &lt;= à IE8, ce <em>hack</em> est obsolète puisqu&#8217;il est compris par IE8. Pour y remédier, j&#8217;utilise <code>*+html</code> qui n&#8217;est compris que par IE7.</p>

<p>Ainsi, dans le fichier <em>ie.css</em> de <a href="http://www.blueprintcss.org/">Blueprint</a>, il sera nécessaire de modifier la ligne <code>html&gt;body p code { <em>white-space: normal; }</code> par <code></em>+html p code { *white-space: normal; }</code> pour éviter que IE8 ne s&#8217;emmêle les pinceaux ;)</p>

<h2>24 hacks CSS à consommer avec modération</h2>

<p>Cette liste de 22 contournements a été compilée par <a href="http://paulirish.com/2009/browser-specific-css-hacks/">Paul Irish</a>. Elle présente le double intérêt de la quasi-exhausitivité et de distinguer les <em>hacks</em> jouant sur les sélecteurs de ceux qui concernent les attributs.</p>

<h2>Hacks sur les sélecteurs</h2>

<ol>
    <li>
<h3>IE6 et inférieurs</h3>
<pre>* html .test  { color: red }</pre>
</li>
    <li>
<h3>IE7</h3>
<pre>*:first-child+html .test { color: red }</pre>
</li>
    <li>
<h3>IE7, Firefox, Safari, Opera</h3>
<pre>html&gt;body .test { color: red }</pre>
</li>
    <li>
<h3>IE8, Firefox, Safari, Opera <small>(Tout sauf IE 6,7)</small></h3>
<pre>html&gt;/**/body .test { color: red }</pre>
</li>
    <li>
<h3>Opera 9.27 et inférieurs, Safari 2</h3>
<pre>html:first-child .test { color: red }</pre>
</li>
    <li>
<h3>Safari 2 &#8212; 3</h3>
<pre>html[xmlns*=""] body:last-child .test { color: red }</pre>
</li>
    <li>
<h3>safari 3+, Chrome 1+, Opera9+, Firefox 3.5+</h3>
<pre>body:nth-of-type(1) .test { color: red }</pre>
</li>
    <li>
<h3>Safari 3+, Chrome 1+, Opera9+, Firefox 3.5+</h3>
<pre>body:first-of-type .test { color: red }</pre>
</li>
    <li>
<h3>Safaris 3+, Chrome1+</h3>
<pre>   @media screen and (-webkit-min-device-pixel-ratio:0) {
            .test  { color: red }
    }</pre>
</li>
    <li>
<h3>iPhone / Webkit mobile</h3>
<pre>   @media screen and (max-device-width: 480px) {
            .test { color: red }
    }</pre>
</li>
    <li>
<h3>Safari 2 &#8212; 3.1</h3>
<pre>html[xmlns*=""]:root .test  { color: red }</pre>
</li>
    <li>
<h3>Safari 2 &#8212; 3.1, Opera 9.25</h3>
<pre>*|html[xmlns*=""] .test { color: red }</pre>
</li>
    <li>
<h3>Safari &#8212; Chrome</h3>
<pre>.test { [color: #000000; }</pre>
</li>
    <li>
<h3>Tout sauf IE6 &#8212; 8</h3>
<pre>:root *&gt; .test { color: red  }</pre>
</li>
    <li>
<h3>IE7</h3>
<pre>*+html .test { color: red }</pre>
</li>
    <li>
<h3>Uniquement Firefox. 1+</h3>
<pre>.test,  x:-moz-any-link  { color: red }</pre>
</li>
    <li>
<h3>Firefox 3.0+</h3>
<pre>.test,  x:-moz-any-link, x:default  { color: red }</pre>
</li>
</ol>

<h2>Hacks sur les attributs</h2>

<ol>
    <li>
<h3>IE6</h3>
<pre>.test { _color: blue }</pre>
</li>
    <li>
<h3>IE6, IE7</h3>
<pre>.test { *color: blue /* or #color: blue */ }</pre>
</li>
    <li>
<h3>Tout sauf IE6</h3>
<pre>.test { color/**/: blue }</pre>
</li>
    <li>
<h3>IE6, IE7, IE8</h3>
<pre>.test { color: blue\9 }</pre>
</li>
    <li>
<h3>IE7, IE8</h3>
<pre>.test { color/*\**/: blue\9 }</pre>
</li>
    <li>
<h3>IE6, IE7 &#8212; fonctionne comme !important</h3>
<pre>.test { color: blue !ie } /* la chaine après <code>!</code> peut être n'importe quoi */</pre>
</li>
        <li>
<h3>IE8</h3>
<pre>.test { color: #0000FF\0; }</pre>
</li>
</ol>

<h3 class='related_post_title'>Articles sur le même sujet</h3>

<ul class='related_post'><li><a href='http://css4design.com/livre-css-avancees-vers-html5-et-css3' title='Notes de lecture &#8212; Livre CSS avancées, vers HTML5 et CSS3'>Notes de lecture &#8212; Livre CSS avancées, vers HTML5 et CSS3</a></li><li><a href='http://css4design.com/le-petit-journal-de-l-integrateur-web-html5-et-css' title='HTML5 et CSS pour l&#039;intégrateur web'>HTML5 et CSS pour l&#039;intégrateur web</a></li><li><a href='http://css4design.com/un-seul-fichier-css-pour-cibler-ie6-et-ie7-avec-les-commentaires-conditionnels' title='Un seul fichier CSS pour cibler IE6 et IE7 avec les commentaires conditionnels'>Un seul fichier CSS pour cibler IE6 et IE7 avec les commentaires conditionnels</a></li><li><a href='http://css4design.com/tester-un-site-dans-plusieurs-navigateurs-mais-surtout-dans-ie6-avec-vista' title='Tester un site dans plusieurs navigateurs (mais surtout dans IE6 avec Vista)'>Tester un site dans plusieurs navigateurs (mais surtout dans IE6 avec Vista)</a></li><li><a href='http://css4design.com/le-petit-journal-du-web-janvier-2011-typographie-css-photoshop-et-developpement-web' title='Le petit journal du Web &#8212; Janvier 2011 (Typographie, CSS, Photoshop et développement web)'>Le petit journal du Web &#8212; Janvier 2011 (Typographie, CSS, Photoshop et développement web)</a></li></ul>
 <p><a href="http://css4design.com/?flattrss_redirect&amp;id=5631&amp;md5=c7b71daedcbf03b36eb927c7a79a65e3" title="Flattr" target="_blank"><img src="http://css4design.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://css4design.com/une-feuille-de-style-et-des-hacks-css-pour-cibler-ie6-ie7-ou-ie8/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		<atom:link rel="payment" href="http://css4design.com/?flattrss_redirect&amp;id=5631&amp;md5=c7b71daedcbf03b36eb927c7a79a65e3" type="text/html" />
	</item>
		<item>
		<title>Feuille de style CSS conditionnelle avec Conditional CSS</title>
		<link>http://css4design.com/feuille-de-style-css-conditionnelle-avec-conditional-css</link>
		<comments>http://css4design.com/feuille-de-style-css-conditionnelle-avec-conditional-css#comments</comments>
		<pubDate>Wed, 11 Mar 2009 21:29:37 +0000</pubDate>
		<dc:creator>Bruno Bichet</dc:creator>
				<category><![CDATA[Intégration web]]></category>
		<category><![CDATA[Navigateurs]]></category>
		<category><![CDATA[Commentaires conditionnels]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[IE6]]></category>
		<category><![CDATA[Navigateur]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.css4design.com/?p=2685</guid>
		<description><![CDATA[Conditional-CSS est un programme écrit en php4 et php5 (au choix) qui permet d&#8217;utiliser des commentaires pour cibler une dizaine de navigateurs par leur nom et leur version, à la manière des commentaires conditionnels ciblant les différentes versions d&#8217;Internet Explorer. Les commentaires conditionnels de Conditional-CSS peuvent s&#8217;appliquer à l&#8217;ensemble d&#8217;une règle CSS ou à une seule de ses propriétés. Voici un exemple d&#8217;utilisation : /* Conditional-CSS example */ a.button_active, a.button_unactive { display: inline-block; [if lte Gecko 1.8] display: -moz-inline-stack; [if lte Konq 3.1] float: left; height: 30px; [if IE 5.0] margin-top: -1px; text-decoration: none; outline: none; [if IE] text-decoration: expression(hideFocus='true'); [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 18px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcss4design.com%2Ffeuille-de-style-css-conditionnelle-avec-conditional-css">
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcss4design.com%2Ffeuille-de-style-css-conditionnelle-avec-conditional-css&amp;source=br1o&amp;style=normal&amp;service=bit.ly&amp;service_api=R_0c1ee4b64f105d1b2672690740a77d6a&amp;b=2" height="61" width="50" />
			</a>
		</div><p><a href="http://www.conditional-css.com/">Conditional-CSS</a> est un programme écrit en php4 et php5 (au choix) qui permet d&#8217;utiliser des commentaires pour cibler une dizaine de navigateurs par leur nom et leur version, à la manière des <a href="http://www.css4design.com/commentaires-conditionnels-d-internet-explorer-vs-hacks-css">commentaires conditionnels</a> ciblant les différentes versions d&#8217;Internet Explorer.<span id="more-2685"></span></p>

<p>Les commentaires conditionnels de <em>Conditional-CSS</em> peuvent s&#8217;appliquer à l&#8217;ensemble d&#8217;une règle CSS ou à une seule de ses propriétés. Voici un exemple d&#8217;utilisation :</p>

<pre><code>/* Conditional-CSS example */
a.button_active, a.button_unactive {
    display: inline-block;
    [if lte Gecko 1.8] display: -moz-inline-stack;
    [if lte Konq 3.1] float: left;
    height: 30px;
    [if IE 5.0] margin-top: -1px;
    text-decoration: none;
    outline: none;
    [if IE] text-decoration: expression(hideFocus='true');
}
</code></pre>

<p>Voici les navigateurs pris en charge par le script :</p>

<ul>
<li>Internet Explorer</li>
<li>Internet Explorer Mac</li>
<li>Gecko (Firefox etc)</li>
<li>Webkit (Safari etc)</li>
<li>Opera</li>
<li>Konqueror</li>
<li>Safari Mobile (iPhone, iPod)</li>
<li>IE Mobile</li>
<li>PSP Web browser</li>
</ul>

<p>Même si je ne suis pas fan de ce genre de technique &#8212; qui automatise d&#8217;une certaine manière les <a href="http://www.css4design.com/commentaires-conditionnels-d-internet-explorer-vs-hacks-css">hacks CSS</a> souvent décriés &#8212; force est de reconnaitre que <a href="http://www.sprymedia.co.uk/">l&#8217;auteur de c-css</a> à fait du beau travail. Je garde l&#8217;adresse sous le tapis de souris : on ne sait jamais ;)</p>

<h3 class='related_post_title'>Articles sur le même sujet</h3>

<ul class='related_post'><li><a href='http://css4design.com/une-feuille-de-style-et-des-hacks-css-pour-cibler-ie6-ie7-ou-ie8' title='Une Feuille de style et des « hacks CSS » pour cibler IE6, IE7 ou IE8'>Une Feuille de style et des « hacks CSS » pour cibler IE6, IE7 ou IE8</a></li><li><a href='http://css4design.com/fonctions-metier-integrateur-web' title='Quelques notes sur les fonctions de l&#8217;intégrateur web et de l&#8217;intégratrice web'>Quelques notes sur les fonctions de l&#8217;intégrateur web et de l&#8217;intégratrice web</a></li><li><a href='http://css4design.com/fonction-php-filemtime-cacher-les-fichiers-css-et-js' title='Fonction PHP filemtime() pour cacher les fichiers CSS et JS'>Fonction PHP filemtime() pour cacher les fichiers CSS et JS</a></li><li><a href='http://css4design.com/un-seul-fichier-css-pour-cibler-ie6-et-ie7-avec-les-commentaires-conditionnels' title='Un seul fichier CSS pour cibler IE6 et IE7 avec les commentaires conditionnels'>Un seul fichier CSS pour cibler IE6 et IE7 avec les commentaires conditionnels</a></li><li><a href='http://css4design.com/classes-css-wordpress-images' title='Classes CSS générées par WordPress pour les images'>Classes CSS générées par WordPress pour les images</a></li></ul>
 <p><a href="http://css4design.com/?flattrss_redirect&amp;id=2685&amp;md5=cb5a39c35af4bceb02604ad3845d6e07" title="Flattr" target="_blank"><img src="http://css4design.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://css4design.com/feuille-de-style-css-conditionnelle-avec-conditional-css/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		<atom:link rel="payment" href="http://css4design.com/?flattrss_redirect&amp;id=2685&amp;md5=cb5a39c35af4bceb02604ad3845d6e07" type="text/html" />
	</item>
		<item>
		<title>Contribution au guide stylistique pour HTML et CSS</title>
		<link>http://css4design.com/contribution-guide-stylistique-html-css</link>
		<comments>http://css4design.com/contribution-guide-stylistique-html-css#comments</comments>
		<pubDate>Mon, 03 Nov 2008 06:41:34 +0000</pubDate>
		<dc:creator>Bruno Bichet</dc:creator>
				<category><![CDATA[HTML & CSS]]></category>
		<category><![CDATA[3615 MyLife]]></category>
		<category><![CDATA[Commentaires conditionnels]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[IE]]></category>

		<guid isPermaLink="false">http://www.css4design.com/?p=2309</guid>
		<description><![CDATA[Contribution personnelle à la mise en place d'un guide stylistique (bonnes pratiques et convention de codage et de nommage) concernant HTML et CSS.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 18px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcss4design.com%2Fcontribution-guide-stylistique-html-css">
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcss4design.com%2Fcontribution-guide-stylistique-html-css&amp;source=br1o&amp;style=normal&amp;service=bit.ly&amp;service_api=R_0c1ee4b64f105d1b2672690740a77d6a&amp;b=2" height="61" width="50" />
			</a>
		</div><p>Florent Verschelde <a href="http://forum.alsacreations.com/topic-14-38057-1.html">lance le projet</a> de rédiger un guide stylistique (charte rédactionnelle ou conventions de codage) pour les langages HTML et surtout CSS sous l&#8217;égide d&#8217;<a href="http://www.alsacreations.com/">Alsacreations</a>. Une description de ce projet est disponible dans ce <a href="http://web.covertprestige.info/styleguide/wip-appel.html">document</a>. Voici ma modeste contribution à cette première étape du projet qui consiste en deux séries de questions pour sonder les professionnels du web sur leurs habitudes de travail en matière de mise en forme du code.<span id="more-2309"></span></p>

<h3>Comment j&#8217;écris mon HTML</h3>

<ol>
<li><dl>
<dt>Quelle version de HTML ou XHTML utilisez-vous ?</dt>
<dd>Même si je m&#8217;applique à écrire du XHTML 1.0 strict, j&#8217;utilise le doctype XHTML 1.0 Transitional qui permet une certaine souplesse quand on travaille sur des documents susceptibles d&#8217;accueillir toutes sortes de fioritures comme des <code>target=_blank</code> ou des <code>iframe</code> en veux-tu en voilà ;)</dd>
</dl></li>
<li><dl>
<dt>Respectez-vous des règles strictes pour l’écriture des balises et attributs HTML même en HTML 4.01 ?</dt>
<dd>Oui, je me conforme aux exigeances imposées par le <a href="http://www.la-grange.net/w3c/xhtml1/#diffs">XHTML strict 1.0</a> : écriture des balises en minuscules, attributs entre guillemets, attributs <code>selected</code> ou <code>checked</code> doublés (<code>selected="selected"</code> ou <code>checked="checked"</code>), auto-fermeture des balises <code>img</code>, <code>br</code> ou <code>input</code>, etc.</dd>
</dl></li>
<li><dl>
<dt>Quel usage faites-vous de la validation du code HTML ?</dt>
<dd>Je prends soin de valider mes pages web régulièrement dans une optique de <em>débuggage</em> du code plutôt que pour la validation elle-même qui ne garantit pas que le document soit lisible par un être humain.</dd>
</dl></li>
<li><dl>
<dt>Quel usage faites vous des commentaires HTML ?</dt>
<dd>
<p>Essentiellement pour mettre en valeur les parties principales de la page et indiquer la fin des blocs structurels. J&#8217;utilise aussi les lignes vides pour séparer certaines parties du code pour améliorer la lisibilité :</p>

<pre><code>&lt;!-- Début de #sidebar-top
contient #bloc-1 pour le formulaire de login
et #bloc-2 pour les news --&gt;

    &lt;div id="sidebar-top" class="aside"&gt;

        &lt;div id="bloc-1"&gt;
            &lt;p&gt;bla bla&lt;/p&gt;
        &lt;/div&gt;&lt;!-- /#bloc-1 --&gt;

        &lt;div id="bloc-2"&gt;
            &lt;p&gt;bla bla&lt;/p&gt;
        &lt;/div&gt;&lt;!-- /#bloc-2 --&gt;

    &lt;/div&gt;&lt;!-- fin #sidebar-top .aside --&gt;

&lt;!-- // fin de #sidebar-top --&gt;

&lt;!-- Début de #sidebar-bottom
contient #bloc-3 pour la pub
et #bloc-4 pour l'inscription à la newsletter --&gt;
</code></pre>
</dd>
</dl></li>
<li><dl>
<dt>Quels sont les éléments HTML que vous utilisez le plus ? Y a-t-il une logique précise pour l&#8217;utilisation de tel ou tel élément (un P plutôt qu’un DIV, par exemple) ?</dt>
<dd>En règle général, j&#8217;essaie de suivre la logique interne du contenu pour que la page ressemble à quelque chose même si les feuilles de styles sont désactivées : j&#8217;abuse des listes ordonnées ou non, des listes de définition, des paragraphes, etc. L&#8217;idée est de donner du relief à la page web pour faire ressortir la structure des idées.</dd>

<dd>Toutefois, il m&#8217;arrive d&#8217;utiliser une <code>div</code> à la place d&#8217;un <code>p</code> lorsque le texte à baliser ne contient qu&#8217;une ligne et/ou qu&#8217;il est isolé sémantiquement parlant. C&#8217;est le cas de la <em>baseline</em> notamment.</dd>

<dd>
<p>Dans certains cas, il peut m&#8217;arriver d&#8217;ajouter un <code>span</code> :</p>

<pre><code>&lt;div id="baseline"&gt;&lt;span&gt;Ma baseline est top&lt;/span&gt;&lt;/div&gt;
</code></pre>
</dd>
</dl>

<p>L&#8217;avantage ? Dans certaines mises en forme, ça permet de donner une largeur explicite à la balise <code>div</code>, tout en jouant à volonté sur le <code>padding</code> du <code>span</code> sans casser la mise en page à cause d&#8217;une mauvaise interprétation d&#8217;un <a href="http://www.redmelon.net/tstme/box_model/">modèle de boite</a> <a href="http://www.quirksmode.org/css/box.html">pas toujours intuitif</a>.</p></li>
<li><dl>
<dt>Quel usage faites-vous des éléments génériques DIV et SPAN ?</dt>
<dd>Même si cela semble aller à l&#8217;encontre de ma réponse précédente, je commence par structurer ma page dans les grandes lignes avec la position des différents &laquo;&nbsp;blocs&nbsp;&raquo; à l&#8217;esprit. Comme il s&#8217;agit souvent de découper un <em>template</em> réalisé sous Photoshop, il serait hypocrite de faire comme si seul le sens avait de l&#8217;importance&#8230; Je place donc mes <code>div</code> dans mon document HTML puis je les reportent dans mon fichier CSS.</dd>

<dd>Les balises <code>div</code> me servent surtout à <code>div</code>iser le contenu en blocs gérés ensuite via la feuille de style : création de colonnes, application de <em>background</em>, etc. J&#8217;essaie de garder une logique &laquo;&nbsp;sémantique&nbsp;&raquo; à mes découpages, même si la plupart du temps, il faut bien avouer que certains bloc sont réunis uniquement à des fins de présentation ou de position dans le code&#8230;</dd>

<dd>J&#8217;utilise assez peu la balise <code>span</code> : elle me sert le plus souvent à donner une couleur différente à une portion de texte ou à intégrer les <a href="http://microformateurs.org/">microformats</a>.</dd>
</dl></li>
<li><dl>
<dt>Avez-vous une convention de nommage pour les classes et identifiants ?</dt>
<dd>Je suis en pleine transition sur cette question. Je me mets doucement à utiliser les futures balises du <a href="http://www.w3.org/html/wg/html5/#sections">HTML5</a> en tant qu&#8217;identifiants ou classes pour structurer mes pages web : <em>#header</em>, <em>#footer</em>, <em>.nav</em>, <em>.article</em>, <em>.aside</em>, <em>h1</em>, <em>h2</em>&#8230;, <em>.section</em>, etc.</dd>

<dd>Pour les identifiants ou classes composés de deux termes ou plus, j&#8217;utilise le tiret : #sidebar-top ou #main-content-bottom, par exemple.</dd>

<dd>Comme vous pouvez le remarquer, j&#8217;utilise plutôt des termes anglo-saxons, généralement plus concis et surtout sans accent : que donnerait en effet une classe <code>.palais-des-congres</code> ^_^v</dd>
</dl></li>
<li><dl>
<dt>Dans quels cas utilisez-vous plutôt les classes ou plutôt les identifiants?</dt>
<dd>
<p>Tout dépend du document, mais je privilégie les classes autant que possible. Ainsi, pour atteindre     les élement <em>menu</em>, j&#8217;utilise plus volontiers :</p>

<pre><code>#header .menu {...}
#sidebar-1 .menu {...}
</code></pre>
</dd>
</dl>

<p>plutôt que :</p>

<pre><code>    #menu-1 {...}
    #menu-2 {...}
</code></pre>

<p>Ce qui permet d&#8217;avoir des éléments communs non dupliqués pour la classe <em>.menu</em>. Toutefois, en fonction des projets, la deuxième solution est parfois préférable. Question de souplesse.</p></li>
</ol>

<h3>Comment j&#8217;écris mes CSS</h3>

<ol>
<li><dl>
<dt>Quel usage faites-vous de la validation CSS ?</dt>
<dd>Je n&#8217;utilise que très rarement la validation pour mes feuilles de styles : les fautes de syntaxes sont généralement rédhibitoires (le comportement voulu n&#8217;apparait pas) et je sais généralement quand j&#8217;utilise une propriété &laquo;&nbsp;propriétaire&nbsp;&raquo;&#8230;</dd>
</dl></li>
<li><dl>
<dt>Comment utilisez-vous les commentaires en CSS ? Avez-vous des «styles» précis pour différents types de commentaires (capitales, étoiles ou autres symboles dans le commentaire, etc.) ?</dt>
<dd>
<p>Un exemple vaut mieux qu&#8217;un long discours :</p>

<pre><code>/*-----------------------------------------------------------------------
Nom de la feuille de style : styles.css
Date création : le 02/11/2008
Description : Feuille de style principale pour le projet xxx
Sommaire :
@reset
@utilitaires
@document
-----------------------------------------------------------------------*/

/*-----------------------------------------------------------------------
                                     @RESET
-----------------------------------------------------------------------*/

@import "css/risette.css";

/*-----------------------------------------------------------------------
                                    @UTILITAIRES
-----------------------------------------------------------------------*/
.prout {
    voice-family: announcer, male;
}

/*-----------------------------------------------------------------------
                                    @DOCUMENT
-----------------------------------------------------------------------*/
#container {
    margin: 0 toto;
}

    #header { /* ie.css */
        height: 75px;
    }
        #logo {
            background: url(img/logo.png) no-repeat;
        }
</code></pre>
</dd>
</dl></li>
<li><dl>
<dt>Utilisez-vous des sélecteurs «verbeux» (le plus précis possibles et reprenant le contexte d’utilisation de l’élément), ou au contraire les plus courts possibles ? Ou bien une solution intermédiaire ?</dt>
<dd>
<p>Quand je ne suis pas le seul à intervenir sur le projet (la plupart du temps) je suis assez &laquo;&nbsp;verbeux&nbsp;&raquo; :</p>

<pre><code>#header #logo h1 {...}
</code></pre>
</dd>
</dl>

<p>ou</p>

<pre><code>    h1#logo {...}
</code></pre>

<p>Voire</p>

<pre><code>    #logo {...}
</code></pre>

<p>plutôt que</p>

<pre><code>    h1 {...}
</code></pre>

<p>Note : pour des <a href="http://performance.survol.fr/2008/10/performance-des-selecteurs-css-encore-un-mot/">questions de performance</a>, il est préférable d&#8217;utiliser la forme <code>#h1-logo {...}</code> qui semble la syntaxe préférée des navigateurs.</p></li>
<li><dl>
<dt>Comment utilisez-vous les espaces, retours à la ligne, lignes vides et indentations ? Pouvez-vous fournir un exemple-type ?</dt>
<dd>
<p>Voici un exemple assez représentatif de mes habitudes en la matière  :</p>

<pre><code>#container {
    width: 950px;
    margin: 0 auto;
    font: 1.2em/1.5 Helvetica, Arial, sans-serif;
}

    #header {
        width: 950px;
        height: 95px;
        background: transparent url() no-repeat center;
    }

    #main-content {
        overflow: hidden; /* zoom: 1; dans ie.css */
    }
        #content {
            float: left;
            width: 700px;
            margin-right: 20px;
        }
        #sidebar {
            float: left;
            width: 230px;
        }

    #footer {
        width: 950px;
        clear: both;
    }
</code></pre>
</dd>
</dl>

<p>J&#8217;ai pris l&#8217;habitude de mettre un espace entre les deux-points et la valeur pour des raisons de lisibilité. Par ailleurs, je laisse toujours le point-virgule à la fin de la dernière déclaration. De nombreux intégrateurs et développeurs trouvent plus lisible d&#8217;écrire :</p>

<pre><code>#content {float:left;width:700px;margin-right:20px;}
#sidebar {float:left;width:230px;}
</code></pre>

<p>Leur argument principal est que cette disposition permet de voir plus de sélecteurs et d&#8217;économiser des lignes. Je tiens à rappeller que de nombreux logiciels (Dreamweaver, TopStyle Light, etc.) disposent d&#8217;une telle vue. Sans compter des services comme <a href="http://cleancss.com/">cleancss</a> qui le font automatiquement !</p></li>
<li><dl>
<dt>Regroupez-vous les blocs de déclarations (sélecteurs + leurs propriétés) de manière logique ou prévisible? Quelle est la logique utilisée, et dans quel ordre les placez-vous ?</dt>
<dd>
<p>J&#8217;essaie de suivre au mieux la structure du document HTML lui-même. Comme le montre l&#8217;exemple ci-dessus, sauf si je dois regrouper des déclarations pour leur attribuer des propriétés communes. Dans ce cas, je les place comme suit :</p>

<pre><code>#header,
#footer {
    width: 100%;
}

#header {
    padding: 3em;
}
#content {
    width: 950px;
}
#footer{
    padding: 1em 3em;
}
</code></pre>
</dd>
</dl></li>
<li><dl>
<dt>Utilisez-vous des indentations multiples (jusqu’à plusieurs niveaux d’indentation) pour, par exemple, refléter la structure du code HTML ?</dt>
<dd>Oui, voir l&#8217;exemple donné plus haut ;)</dd>
</dl></li>
<li><dl>
<dt>Utilisez-vous les propriétés de raccourci ? Si oui, les utilisez-vous systématiquement et en priorité, ou seulement lorsque cela permet de gagner quelques déclarations (propriété + valeur) ?</dt>
<dd>j&#8217;utilise <a href="http://www.456bereastreet.com/archive/200502/efficient_css_with_shorthand_properties/">les raccourcis</a> le plus souvent possible, notamment pour les propriétés <code>font</code>, <code>background</code>, <code>margin</code>, <code>padding</code>, <code>list-style</code> et <code>border</code>.</dd>
</dl></li>
<li><dl>
<dt>Respectez-vous un ordre précis pour les propriétés CSS (ordre alphabétique, ordre «logique», etc.) ? Si besoin, pouvez-vous le détailler ?</dt>
<dd>Je place d&#8217;abord les propriétés les plus impactantes sur le design comme <code>float</code>, <code>width</code>, <code>height</code>, etc. et je place ensuite les plus longues à la fin : <code>border</code>, <code>list-style</code>,  <code>font</code>, <code>background</code>, etc.</dd>

<dd>Ca tombe bien, car ces dernières sont souvent des propriétés plus visuelles que structurelles, ce qui permet de séparer le fond de la forme au sein même des déclarations CSS !</dd>
</dl></li>
<li><dl>
<dt>Dans une feuille de styles relativement longue (plus de quelques dizaines de ligne, et jusqu’à des centaines ou milliers de lignes), comment organisez-vous les différents styles ?</dt>
<dd>Si le nombre de page est faible mais que la feuille de style CSS est très longue, j&#8217;utilise les commentaires pour séparer les différentes parties.</dd>

<dd>Si le nombre de page est important, je fais une feuille de style par page après avoir réunis les éléments communs dans <em>styles.css</em>, soit : <em>index.css</em> pour <em>index.php</em>, <em>inscription.css</em> pour <em>inscription.php</em> ou 404.css pour 404.php, etc.</dd>
</dl></li>
<li><dl>
<dt>Utilisez-vous plusieurs feuilles de styles pour un projet de «petit» site (moins de dix pages-type). Utilisez-vous plusieurs feuilles de styles pour des projets plus conséquents? Comment séparez-vous les différents styles: par type de propriétés CSS, par type de page, etc. ?</dt>
<dd>J&#8217;ai essayé plusieurs méthodes pour devenir pragmatique : je fais au mieux en fonction du projet, du délai et du nombre de personnes susceptibles d&#8217;intervenir sur le fichier. Un découpage des CSS comme <em>typography.css</em>, <em>layout.css</em>, <em>html.css</em>, <em>color.css</em>, etc. suppose des habitudes de travail en commun et des connaissances similaires en CSS, ce qui n&#8217;est pas toujours le cas quand on travaille en équipe. De fait, le découpage par page (cf. réponse 9) est souvent mieux compris donc les pertes de temps et les erreurs sont moins nombreuses.</dd>
</dl></li>
<li><dl>
<dt>Utilisez-vous des hacks CSS ?</dt>
<dd>Oui et non. Voir plus bas ;)</dd>
</dl></li>
<li><dl>
<dt>Utilisez-vous les commentaires conditionnels pour Internet Explorer? Si oui, comment procédez-vous?</dt>
<dd>
<p>En général, j&#8217;utilise un <a href="http://www.css4design.com/commentaires-conditionnels-d-internet-explorer-vs-hacks-css">commentaire conditionnel</a> pour cibler les versions inférieures à Internet Explorer 8 :</p>

<!--[if lt IE 8]>
    <link rel="stylesheet" type="text/css" href="ie.css" />
<![endif]-->
</dd>
</dl>

<p>Ensuite, <strong>à l&#8217;intérieur de ie.css</strong>, j&#8217;utilise des <a href="http://www.css4design.com/un-seul-fichier-css-pour-cibler-ie6-et-ie7-avec-les-commentaires-conditionnels">hacks CSS pour cibler IE6 ou IE7</a> :</p>

<pre><code>div { Pour s'adresser à toutes les versions inférieures à IE8 }
* html div { Pour s'adresser à IE6 }
html&gt;body div { Pour s'adresser à IE7 }
</code></pre>

<p>En supposant bien sûr que IE8 se comporte à l&#8217;avenir selon les standards du web. Dans le cas contraire, en fonction des cas, il faudra soit mettre à niveau le commentaire conditionnel (lte IE 8) et trouver un hack CSS spécifique à IE8 différent à la fois de IE6 et IE7, soit lier une feuille de style spécifique pour IE8 en plus de celle prévue pour les versions inférieures d&#8217;Internet Explorer&#8230;</p></li>
</ol>

<h3>En bref</h3>

<p>J&#8217;ai pris un réel plaisir à me pencher sur ces questions et comme je ne voudrais pas être le seul à en profiter, je vous invite à participer à ce projet, que vous soyez professionnels ou amateurs éclairés ! L&#8217;important est que vous pratiquiez régulièrement les langages HTML et CSS pour avoir développé quelques habitudes et que vous ayez envie de les partager.</p>

<h3 class='related_post_title'>Articles sur le même sujet</h3>

<ul class='related_post'><li><a href='http://css4design.com/resolu-les-folles-journees-de-l-integrateur-html-et-ses-petits-tracas' title='[résolu] Les folles journées de l&#039;intégrateur HTML et ses petits tracas&#8230;'>[résolu] Les folles journées de l&#039;intégrateur HTML et ses petits tracas&#8230;</a></li><li><a href='http://css4design.com/pour-retablir-le-flux-apres-un-float-vous-etes-plutot-hr-br-ou-div' title='Pour rétablir le flux après un float, vous êtes plutôt HR, BR ou DIV ?'>Pour rétablir le flux après un float, vous êtes plutôt HR, BR ou DIV ?</a></li><li><a href='http://css4design.com/exercice-de-style-css-et-html-table-vs-div' title='Exercice de style CSS et HTML : table vs div'>Exercice de style CSS et HTML : table vs div</a></li><li><a href='http://css4design.com/quelques-notes-sur-xhtml-et-css-au-fil-de-l-eau' title='Quelques notes sur XHTML et CSS, au fil de l&#8217;eau&#8230;'>Quelques notes sur XHTML et CSS, au fil de l&#8217;eau&#8230;</a></li><li><a href='http://css4design.com/le-petit-journal-du-web-les-fruits-de-la-veille-ont-garde-leur-fraicheur' title='Le petit journal du web &#8212; Les fruits de la veille ont gardé toute leur fraicheur'>Le petit journal du web &#8212; Les fruits de la veille ont gardé toute leur fraicheur</a></li></ul>
 <p><a href="http://css4design.com/?flattrss_redirect&amp;id=2309&amp;md5=d25be8e4fa147674b01db7ef57c56e64" title="Flattr" target="_blank"><img src="http://css4design.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://css4design.com/contribution-guide-stylistique-html-css/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		<atom:link rel="payment" href="http://css4design.com/?flattrss_redirect&amp;id=2309&amp;md5=d25be8e4fa147674b01db7ef57c56e64" type="text/html" />
	</item>
		<item>
		<title>IE6 &#8212; Gérer la transparence du format PNG 24 bits</title>
		<link>http://css4design.com/ie6-gerer-la-transparence-du-format-png-24-bits</link>
		<comments>http://css4design.com/ie6-gerer-la-transparence-du-format-png-24-bits#comments</comments>
		<pubDate>Mon, 20 Oct 2008 21:38:47 +0000</pubDate>
		<dc:creator>Bruno Bichet</dc:creator>
				<category><![CDATA[HTML & CSS]]></category>
		<category><![CDATA[Intégration web]]></category>
		<category><![CDATA[Javascript & PHP]]></category>
		<category><![CDATA[AlphaImageLoader]]></category>
		<category><![CDATA[Commentaires conditionnels]]></category>
		<category><![CDATA[Filtre]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[IE6]]></category>
		<category><![CDATA[Image]]></category>
		<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[Opacité]]></category>
		<category><![CDATA[PNG]]></category>
		<category><![CDATA[Transparent]]></category>
		<category><![CDATA[Tutoriels]]></category>

		<guid isPermaLink="false">http://www.css4design.com/?p=2100</guid>
		<description><![CDATA[Pour afficher la transparence des images au format PNG 24 bits RVBA dans Internet Explorer 6 (IE6) il faut utiliser le filtre AlphaImageLoader, soit directement dans la feuille de style CSS avec la propriété filter ou behavior (pour charger un comportement htc) ou automatiquement avec Javascript.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 18px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcss4design.com%2Fie6-gerer-la-transparence-du-format-png-24-bits">
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcss4design.com%2Fie6-gerer-la-transparence-du-format-png-24-bits&amp;source=br1o&amp;style=normal&amp;service=bit.ly&amp;service_api=R_0c1ee4b64f105d1b2672690740a77d6a&amp;b=2" height="61" width="50" />
			</a>
		</div><p>Le <a href="http://www.libpng.org/pub/png/">format PNG</a> autorise jusqu&#8217;à 256 niveaux de transparence qui ne sont pas pris en charge par Internet Explorer 6. La <a href="http://www.yoyodesign.org/doc/accessites/graceful-degradation-progressive-enhancement/">dégradation grâcieuse</a> n&#8217;étant pas toujours possible, je me suis rafraichis la mémoire sur les différentes manières d&#8217;utiliser le filtre <em>AlphaImageLoader</em>. J&#8217;ai fini par tomber sur une solution globale pour gérer cette transparence même en présence d&#8217;un <em>background-repeat</em> ou d&#8217;un <em>background-position</em> ! (Cet article est en quelque sorte la suite de <a href="http://www.css4design.com/opacite-avec-css-et-effet-de-trame-avec-un-gif-transparent">Opacité CSS et effet de trame</a> avec GIF/PNG transparent.)<span id="more-2100"></span></p>

<h2>Le format PNG</h2>

<p>Le <acronym>PNG</acronym> est format d&#8217;enregistrement d&#8217;image destiné à remplacer le <a href="http://fr.wikipedia.org/wiki/Graphics_Interchange_Format">format GIF</a> dans sa version 8 bits. La version 24 bits en RVBa &#8212; qui comprend plus de 16 millions de couleurs &#8212; autorise jusqu&#8217;à 256 niveaux de transparence très utiles en webdesign pour superposer deux images dont celle du dessus laisse transparaitre celle du dessous.</p>

<p>Malheureusement, IE6 ne comprend rien à ces différents niveaux de transparence : il faut ruser, c&#8217;est usant. Certains préconisent la dégradation grâcieuse : utiliser la transparence dans les navigateurs qui la prennent en charge et servir autre chose au dernier de la classe : un PNG 8 bits avec une seule couleur de transparence, fusionner les deux images censées se superposer, voire même utiliser une image légèrement différente.</p>

<p>Après tout, les visiteurs ne sont pas toujours des développeurs web utilisant plusieurs versions de navigateurs pour traquer la moindre différence de rendu. Si vous pouvez vous le permettre, foncez ! Dans le cas contraire, il faudra recourir à des solutions plus ou moins fonctionnelles selon que l&#8217;image en question se trouve placée en <code>background</code> d&#8217;un élément (une <code>div</code>, par exemple) ou dans une balise <code>img</code>. Si votre image transparente est placée sur un fond uni, il reste la possible de modifier l&#8217;image par voie logicielle :</p>

<h2>Modifier le chunk (segment) bKGD des png</h2>

<p>Un image au format PNG est composée de <a href="http://www.libpng.org/pub/png/spec/1.2/PNG-Chunks.html">différents segments</a> (chunks) dont le fameux bKGD qui spécifie une couleur de fond par défaut. A noter que les agents utilisateurs (navigateurs, logiciels, etc.) ne sont pas tenus de respecter cette couleur et peuvent en utiliser une autre. Dans IE6, cette couleur se rapproche d&#8217;un gris-vert tirant sur le turquoise&#8230;</p>

<p>Certains logiciels comme <a href="http://entropymine.com/jason/tweakpng/">TweakPNG</a> permettent de <a href="http://userbarscity.armatronic.com/forum/index.php?showtopic=277">modifier la valeur de bKGD</a>. Si vous disposez d&#8217;un fond de couleur uni, il suffit d&#8217;y mettre la couleur du fond sur laquelle est placé votre image contenant des zones transparentes.</p>

<p>Dans le cas contraire, les filtres Microsoft sont nos amis :</p>

<h2>Le filtre `AlphaImageLoader` de Microsoft</h2>

<p>Internet Explorer (depuis la version 5.5) inclut un <a href="http://msdn.microsoft.com/en-us/library/ms532969.aspx">mécanisme de filtres propriétaires</a> <code>filter</code> dont <em>AlphaImageLoader</em> qui gère la transparence des png 24 bits. L&#8217;utilisation du filtre diffère selon que l&#8217;image est appelé via la balise <code>img</code> ou en tant que <code>background</code> d&#8217;un autre élément.</p>

<h3>Appliqué sur une balise `img`</h3>

<p>Applique le filtre sur les images dont la classe CSS est <code>.img_png</code> à l&#8217;intérieur d&#8217;une feuille de style réservée à IE6 avec les <a href="http://www.css4design.com/commentaires-conditionnels-d-internet-explorer-vs-hacks-css">commentaires conditionnels</a>. Il suffit de renseigner la source de <code>monImageTransparente.png</code> dans la variable <code>src</code> :
<pre><code>
.img_png {
    filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='pix/monImageTransparente.png', sizingMethod='image');
}
</code></pre></p>

<h3>Appliqué sur une image en `background`</h3>

<p>Pour les navigateurs tenant compte de la transparence, vous aurez la règle CSS :
<pre><code>
.div_png {
    width: 100px;
    height: 150px;
    background: url(../pix/monImageTransparente.png) no-repeat;
}
</code></pre>
Pour Internet Explorer 6, il faudra utiliser :
<pre><code>
.div_png {
    width: 100px;
    height: 150px;
    background: none;
    filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='pix/monImageTransparente.png', sizingMethod='scale');
}
</code></pre>
Notez l&#8217;attribut <em>sizingMethod</em> qui peut recevoir les valeurs <em>image</em>, <em>scale</em> ou <em>crop</em> (via l&#8217;excellente <a href="http://forum.alsacreations.com/faq/faq-96-Obtenir-la-transparence-PNG-avec-Internet-Explorer-6.html">FAQ du forum</a> d&#8217;Alsacréations.) :</p>

<ul>
    <li><strong>image </strong>&#8211; Réduit ou élargit le bloc pour correspondre aux dimensions de l&#8217;image (valeur par défaut),</li>
    <li><strong>scale </strong>&#8211; Etire l&#8217;image aux dimensions du bloc,</li>
    <li><strong>crop</strong> &#8212; Rogne l&#8217;image pour qu&#8217;elle tienne dans le bloc.</li>
</ul>

<h3>Quelques contraintes</h3>

<ol>
<li><p>La source de l&#8217;image doit être relative au document HTML qui l&#8217;affiche et non à la feuille de style CSS qui la réclame. De sorte qu&#8217;une image se trouvant dans un dossier <em>images</em> appelée dans un fichier CSS se trouvant dans un dossier <em>css</em> ne devra plus se trouver sur le chemin <em>../pix/monImageTransparente.png</em> mais sur <em>pix/monImageTransparente.png</em>.</p></li>
<li><p>Les liens contenus dans un élément HTML possédant une images de fond transparente ne sont plus cliquables, les champs <code>input</code> ne sont plus accessibles et le texte n&#8217;est plus sélectionnable. Une manière générale d&#8217;y remédier est d&#8217;ajouter une déclaration du type :
<pre><code>
.div_png a,
.div_png input {
    position: relative;
    z-index: 1;
}
</code></pre>
Pour plus d&#8217;information sur cette question, lire le <a href="http://forum.alsacreations.com/topic-4-37488-1-Filter-microsoft-alphaloader-et-input-type-button-.html">fil de discussion</a> paru sur le forum d&#8217;Alsacréations et la <a href="http://web.covertprestige.info/test/47-alphaimageloader-absolute.html">synthèse</a> rédigée par <a href="http://webenberry.com/">Frank Galey</a>.</p></li>
<li><p>Il n&#8217;est pas possible d&#8217;utiliser les propriétés <em>background-repeat</em> et <em>background-position</em> avec une image PNG transparente en <code>background</code>.</p></li>
<li><p>Il est difficile d&#8217;utiliser des événements de style <em>rollover</em> pour permuter des images de fond au passage de la souris.</p></li>
</ol>

<h2>Passez-moi l&#8217;<a href="http://www.gatellier.be/css-pseudo-classes-internet-explorer/">expression</a> !</h2>

<p>C&#8217;est assez contraignant. Heureusement, le web est rempli de gens de bonnes volonté qui se sont retroussé les manches pour nous offrir des solutions sur un plateau. Voyez plutôt :
<pre><code>
* html img,
* html .png {
    position:relative;
    behavior: expression((this.runtimeStyle.behavior="none")&amp;&amp;(this.pngSet?this.pngSet=true:(this.nodeName == "IMG" &amp;&amp; this.src.toLowerCase().indexOf('.png')&gt;-1?(this.runtimeStyle.backgroundImage = "none",
this.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + this.src + "', sizingMethod='image')",
this.src = "transparent.gif"):(this.origBg = this.origBg? this.origBg :this.currentStyle.backgroundImage.toString().replace('url("','').replace('")',''),
this.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + this.origBg + "', sizingMethod='crop')",
this.runtimeStyle.backgroundImage = "none")),this.pngSet=true)
);
}
</code></pre>
Trouvé sur <a href="http://www.komodomedia.com/2007/11/css-png-image-fix-for-ie/">komodomedia</a> via <a href="http://www.babylon-design.com/site/index.php/2007/11/13/204-png-transparents-ie6-en-css-sans-javascript">babylon-design</a>.</p>

<p>Le <code>* html</code> est là uniquement pour cibler IE6. Vous pourrez donc vous en passer si vous utilisez une feuille de style dédiée à ce navigateur. Ne fonctionne pas si Javascript est désactivé. Nécessite une image transparente de 1px de côté (<em>transparent.gif</em>).</p>

<p>Note : il sera peut-être nécessaire d&#8217;ajouter un <code>z-index: 1;</code> pour éviter les problèmes de liens, d&#8217;éléments de formulaire ou de sélection de texte évoqués plus haut.</p>

<h2>Une solution globale avec iepngfix</h2>

<p>Il existe de nombreux scripts permettant d&#8217;automatiser avec plus ou moins de bonheur cette gestion de la transparence des images PNG. Ils mettent tous en oeuvre le filtre <em>AlphaImageLoader</em> soit dans un fichier Javascript, soit dans un <a href="http://www.journaldunet.com/developpeur/tutoriel/dht/061222-ie-htc-html-components-behaviors.shtml">fichier HTC</a>. Parmi tous les scripts existants, j&#8217;ai retenu <a href="http://www.twinhelix.com/css/iepngfix/">iepngfix</a> de <a href="http://www.twinhelix.com/">TwinHelix</a> que m&#8217;a conseillé <a href="http://case.oncle-tom.net/">Oncle Tom</a> sur <a href="http://twitter.com/oncletom/statuses/957668242">Twitter</a>.</p>

<p>Ce composant HTC gère la plupart des contraintes énoncées plus haut, y compris l&#8217;absence de prise en compte de <em>background-repeat</em> et <em>background-position</em> dans <a href="http://www.twinhelix.com/test/">iepngfix version 2.0 Alpha 3</a>.</p>

<p>Le script est très simple à utiliser :</p>

<ol>
<li><p>Copiez les fichiers *iepngfix.htc* and *blank.gif* dans le dossier de votre site web,</p></li>

<li><p>Copiez la déclaration CSS suivante dans votre feuille de style ou votre fichier HTML :</p>
<pre>
    img, div {
        behavior: url(iepngfix.htc);
    }
</pre>
<p>Vous pouvez placer dans ce sélecteur CSS toutes les balises HTML, les identifiants ou les classes pour lesquels vous désirer activer la gestion de la transparence des PNG. Séparez-les simplement par une virgule.</p></li>

<li><p>N&#8217;oubliez pas que le chemin vers les fichiers *iepngfix.htc* et *blank.gif* est relatif au document HTML et non à la feuille de style CSS.</p></li>

<li><p>Si votre site est composé de sous-dossier, n&#8217;hésitez pas à ouvrir le fichier *iepngfix.htc* dans un éditeur de texte pour modifier la variable `blankImg` afin de la faire pointer vers votre pixel transparent. Par exemple : `IEPNGFix.blankImg = &#8216;/images/blank.gif&#8217;;`</p>

<p>Cette fois encore, le chemin doit être relatif au document HTML. Si vous désirez activer la prise en charge des propriétés *background-repeat* et *background-position* assurez-vous d&#8217;inclure le fichier Javascript *iepngfix_tilebg.js* dans votre document HTML :</p>
<pre>
&lt;script src="iepngfix_tilebg.js" type="text/javascript"&gt;&lt;/script&gt;
</pre>
</li>
<li><p>Dans certains cas, il sera nécessaire d&#8217;envoyer le bon <a href="http://fr.wikipedia.org/wiki/Type_MIME">type MIME</a> à Internet Explorer 6. L&#8217;auteur du script a prévu un fichier *iepngfix.php* qui inclut le fichier *iepngfix.htc* tout en renvoyant le type MIME `text/x-component` associé aux fichiers `.htc` :</p>
<pre>
    img, div, a, input {
        behavior: url(/css/resources/iepngfix.php);
    }
</pre>
</li>
<li><p>Pour améliorer les performances, soyez le plus sélectif possible : préférez un `#img_header` ou un `.img_png` à l&#8217;utilisation de la balise `img` seule, sauf bien sûr si toutes vos images ont besoin du script !</p>

<li><p>Il se peut que le fond gris-vert apparaisse brièvement lors du chargement de l&#8217;image. Si vous ne voulez pas ce comportement (notamment sur les grandes images), vous n&#8217;aurez qu&#8217;à revenir à une utilisation &laquo;&nbsp;manuelle&nbsp;&raquo; du filtre *AlphaImageLoader* comme indiqué dans la première partie.</p>

<p>N&#8217;hésitez pas à consulter le fichier *iepngfix.html* présent dans l&#8217;archive *.zip* qui apporte une palanquée d&#8217;informations, de trucs et d&#8217;astuces pour utiliser le script et remédier aux problèmes d&#8217;utilisation.</p></li>
</ol>

<h2>Une nouvelle solution globale avec DD_belatedPNG</h2>

<p><a href="http://dillerdesign.com/experiment/DD_belatedPNG/">DD_belatedPNG</a> semble faire l&#8217;unanimité autour de lui pour sa légèreté et son efficacité, y compris lorsqu&#8217;on l&#8217;utilise avec <code>background-position</code> ou <code>background-repeat</code>. Le script s&#8217;utilise très simplement :
<pre>
&lt;!--[if IE 6]&gt;
    &lt;script src="DD_belatedPNG.js"&gt;&lt;/script>
    &lt;script&gt;
        DD_belatedPNG.fix('.png_bg');
    &lt;/script&gt;
&lt;![endif]--&gt;
</pre>
La classe <code>.png_bg</code> n&#8217;est qu&#8217;un exemple et vous pourrez utiliser un ou plusieurs sélecteurs à votre convenance, tels que :
<pre>
&lt;script type="text/javascript"&gt;
// &lt;![CDATA[
             DD_belatedPNG.fix('.example1, .example2, img');
// ]]&gt;&lt;/script&gt;
</pre></p>

<h2>Conclusion</h2>

<p>Ce sujet semble inépuisable, ce qui n&#8217;est pas mon cas. Je laisse cet article en version <em>bêta</em> pendant quelques temps histoire de laisser décanter le sujet : il serait étonnant que des erreurs ou inexactitudes ne se soient pas glissées sous le tapis de souris ;)</p>

<h2>Ressources externes</h2>

<h3>Généralités sur le format PNG</h3>

<dl>
<dt>Gérer la transparence du PNG par voie logicielle</dt>
<dd>Ce logiciel permet d&#8217;accéder aux informations contenues dans un fichier PNG dont notamment le chunk (segment) bKGD pour modifier la couleur de fond sur laquelle s&#8217;applique la transparence (un fond gris/vert/turquoise par défaut dans ie6). Vous trouvez quelques explications concernant son utilisation sur</dd>

<dd>Logiciel très pratique et simple d&#8217;emploi pour améliorer la compression des images au format PNG. Il suffit de faire glisser les images que vous voulez améliorer et le PngOptimizer s&#8217;occupe du reste. Possède quelques options pour manipuler les <em>chunks</em> ou garder une version de l&#8217;image d&#8217;origine.</dd>

<dd>C&#8217;est peu connu, mais <a href="http://en.wikipedia.org/wiki/Portable_Network_Graphics#Ancillary_chunks">les spécifications</a> du format PNG 8 bits autorisent plusieurs couleurs dans le segment Alpha, ce qui permet de spécifier plusieurs couleurs transparentes en utilisant un logiciel approprié comme <a href="http://www.adobe.com/fr/products/fireworks/">Fireworks</a>. Voilà une bonne technique pour s&#8217;autoriser une dégradation grâcieuse des images transparentes sous Internet Explorer 6 !</dd>

<dd>Un peu hors-sujet par rapport à la transparence des PNG, je signale l&#8217;existence d&#8217;un plugin pour Photoshop qui permet d&#8217;optimiser le poids des images PNG : le plugin installé par défaut dans Photoshop ne rend pas vraiment justice aux possibilités de compression de ce format.</dd>

<dt>Quelques scripts</dt>
<dd>Version 1.0 et version 2.0 Alpha 3 du script iepngfix.  Gère les <em>background-repeat</em> et <em>background-position</em> dans la version <em>Alpha</em> à l&#8217;aide d&#8217;un fichier Javascript supplémentaire.</dd>

<dd>Ce script est proposé par <a href="http://poleweb.blogspot.com/">Yves Van Goethem</a>. Nombreuses options disponibles réservées à un public averti ;)</dd>

<dd>Fichier Javascript gérant la plupart des pièges posés par l&#8217;application du filtre <code>AlphaImageLoader</code>.</dd>

<dd>Avec Unit PNG Fix pas besoin de définir des classes ou de cibler vos éléments. Fonctionne avec les balises img ou sur les background-image. Très léger. <span class="small">Merci à <a href="http://13sportif.free.fr/">13sportif</a> pour le lien.</span></dd>

<dd>Expression Javascript permettant de gérer la transparence des PNG en <code>img</code> ou en <code>background</code></dd>

<dd>Script très léger et pratique. S&#8217;applique à toutes les images PNG de votre document. Toutefois, certaines images restent en mode <em>téléchargement</em> alors quelles sont bien affichées, ce qui peut donner l&#8217;impression au visiteur que quelque chose ne tourne pas rond sur le site. Malgré tout, ce script vieillissant peut encore rendre quelques services : il m&#8217;a rappellé l&#8217;existence de l&#8217;attribut <code>defer="defer"</code> de la balise <code>script</code> qui permet de différer le chargement (ou l&#8217;application) du script en question. Voir cet <a href="http://www.websiteoptimization.com/speed/tweak/defer/">article très complet sur l&#8217;analyse de <em>defer</em></a>.</dd>

<dd>Propose une version modifiée du script précédent pour les champs de formulaires `</dd>

<dt><input type="image" />`</dt>
<dd>Encore un Javascript à se mettre sous la souris ! Crée une balise <code>div</code> dans laquelle est affichée l&#8217;image traitée par le filtre DirectX :</dd>

<dd>Plus ou moins la même chose avec un composant HTC.</dd>

<dd>Une solution originale en PHP.</dd>

<dt>Autres ressources sur la transparence des PNG</dt>
<dd>La blonde propose avec pédagogie un récapitulatif des différentes méthodes pour gérer cette transparence sur 256 niveaux.</dd>

<dd>Présente de nombreuses solutions et contournement pour afficher les images transparentes.</dd>

<dd>La FAQ du forum Alsacréations sur comment obtenir la transparence des PNG avec Internet Explorer 6</dd>

<dd>Tutoriel pour pallier les effets secondaires du filtre AlphaImageLoader en cas de positionnement absolu.</dd>

<dd>Mise en garde d&#8217;Eric Daspet sur l&#8217;utilisation des filtres : <q cite="http://performance.survol.fr/2008/07/ne-pas-filtrer-les-pngs/">Si vous l’utilisez pour une petite icône de présentation qui apparaît vingt fois dans votre page, c’est vingt exécutions du filtres qui sont faites. À chaque exécution du filtre le rendu est bloqué, en attente. Sur Yahoo! Search en retirant AlphaImageLoader de la feuille CSS c’est jusqu’à 100ms qu’ils ont gagné (information donnée par Stoyan Stefanov sur sa dernière présentation). </q></dd>

<dd>Article très instructif sur la transparences du format PNG et l&#8217;application de <code>AlphaImageLoader</code></dd>
</dl>

<h3 class='related_post_title'>Articles sur le même sujet</h3>

<ul class='related_post'><li><a href='http://css4design.com/css-toolbox' title='Trucs et astuces CSS'>Trucs et astuces CSS</a></li><li><a href='http://css4design.com/ajouter-une-classe-css-dans-body-ou-html-pour-internet-explorer-ie6-ie7-ie8-ou-ie9' title='Ajouter une classe CSS dans BODY ou HTML pour Internet Explorer (IE6 &#8212; IE9)'>Ajouter une classe CSS dans BODY ou HTML pour Internet Explorer (IE6 &#8212; IE9)</a></li><li><a href='http://css4design.com/opacite-avec-css-et-effet-de-trame-avec-un-gif-transparent' title='Opacité CSS et effet de trame avec GIF/PNG transparent'>Opacité CSS et effet de trame avec GIF/PNG transparent</a></li><li><a href='http://css4design.com/une-feuille-de-style-et-des-hacks-css-pour-cibler-ie6-ie7-ou-ie8' title='Une Feuille de style et des « hacks CSS » pour cibler IE6, IE7 ou IE8'>Une Feuille de style et des « hacks CSS » pour cibler IE6, IE7 ou IE8</a></li><li><a href='http://css4design.com/css-navigateurs-10-problemes-de-compatibilite-recurrents' title='CSS &amp; Navigateurs &#8212; 10 problèmes de compatibilité récurrents'>CSS &#038; Navigateurs &#8212; 10 problèmes de compatibilité récurrents</a></li></ul>
 <p><a href="http://css4design.com/?flattrss_redirect&amp;id=2100&amp;md5=ad4fa203bafabb6830e530342f1fcf46" title="Flattr" target="_blank"><img src="http://css4design.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://css4design.com/ie6-gerer-la-transparence-du-format-png-24-bits/feed</wfw:commentRss>
		<slash:comments>22</slash:comments>
		<atom:link rel="payment" href="http://css4design.com/?flattrss_redirect&amp;id=2100&amp;md5=ad4fa203bafabb6830e530342f1fcf46" type="text/html" />
	</item>
		<item>
		<title>Un seul fichier CSS pour cibler IE6 et IE7 avec les commentaires conditionnels</title>
		<link>http://css4design.com/un-seul-fichier-css-pour-cibler-ie6-et-ie7-avec-les-commentaires-conditionnels</link>
		<comments>http://css4design.com/un-seul-fichier-css-pour-cibler-ie6-et-ie7-avec-les-commentaires-conditionnels#comments</comments>
		<pubDate>Thu, 17 Apr 2008 15:05:10 +0000</pubDate>
		<dc:creator>Bruno Bichet</dc:creator>
				<category><![CDATA[HTML & CSS]]></category>
		<category><![CDATA[Intégration web]]></category>
		<category><![CDATA[Commentaires conditionnels]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Hacks CSS]]></category>
		<category><![CDATA[IE6]]></category>
		<category><![CDATA[IE7]]></category>
		<category><![CDATA[IE8]]></category>
		<category><![CDATA[Internet Explorer]]></category>

		<guid isPermaLink="false">http://www.css4design.com/?p=309</guid>
		<description><![CDATA[Les hacks CSS, c&#8217;est pas bien ; les commentaires conditionnels, c&#8217;est mieux. Pour autant, je ne vois pas d&#8217;inconvénient à utiliser quelques hacks à l&#8217;intérieur d&#8217;une feuille de style réservée à Internet Explorer à l&#8217;aide des commentaires conditionnels. En effet, pourquoi ajouter une requête inutile en ciblant chaque version de IE quand on peut régler le problème une fois pour toute ? L&#8217;idée, c&#8217;est de ne prévoir qu&#8217;une seule feuille de style pour IE pour placer les déclarations spécifiques aux versions 6 et à 7 : Dans ie.css Pour s&#8217;adresser à IE6 : * html div { blablabla } Et [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 18px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcss4design.com%2Fun-seul-fichier-css-pour-cibler-ie6-et-ie7-avec-les-commentaires-conditionnels">
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcss4design.com%2Fun-seul-fichier-css-pour-cibler-ie6-et-ie7-avec-les-commentaires-conditionnels&amp;source=br1o&amp;style=normal&amp;service=bit.ly&amp;service_api=R_0c1ee4b64f105d1b2672690740a77d6a&amp;b=2" height="61" width="50" />
			</a>
		</div><p>Les hacks CSS, c&#8217;est pas bien ; les <a href="http://www.css4design.com/commentaires-conditionnels-d-internet-explorer-vs-hacks-css">commentaires conditionnels</a>, c&#8217;est mieux. Pour autant, je ne vois pas d&#8217;inconvénient à utiliser <a href="http://www.logiste.be/wordpress/2007/12/05/quels-hacks-css-utilisez-vous/">quelques hacks</a> à l&#8217;intérieur d&#8217;une feuille de style réservée à Internet Explorer à l&#8217;aide des commentaires conditionnels. En effet, pourquoi ajouter une requête inutile en ciblant chaque version de <abbr title="Internet Explorer">IE</abbr> quand on peut régler le problème une fois pour toute ?<span id="more-223"></span></p>

<p>L&#8217;idée, c&#8217;est de ne prévoir qu&#8217;une seule feuille de style pour <abbr title="Internet Explorer">IE</abbr> pour placer les déclarations spécifiques aux versions 6 et à 7 :</p>

<h3>Dans ie.css</h3>

<p>Pour s&#8217;adresser à IE6 :
<pre>* html div {
blablabla
}</pre>
Et à IE7 :
<pre>html&gt;body div {
blablabla
}</pre>
IE6 et IE7 étant ciblés naturellement par le commentaire conditionnel suivant :
<pre>&lt;!--[if lt IE 8]&gt;
&lt;link rel="stylesheet" type="text/css" href="ie.css" media="screen" /&gt;
&lt;![endif]--&gt;</pre>
Espérons que IE8 sera bien conforme aux recommandations du W3C !</p>

<p>Idée inspiré par l&#8217;organisation des feuilles de style du framework CSS <a href="http://code.google.com/p/blueprintcss/">Blueprint</a> que j&#8217;ai eu l&#8217;occasion de présenter dans <a href="http://www.css4design.com/frameworks-css-reset-css-design-from-scratch">cette traduction</a>. Sans oublier le billet de <a href="http://www.k1der.net/country/post/2008/03/31/organiser-ses-css/">Country</a> qui a déclenché l&#8217;envie d&#8217;en faire un billet ;)</p>

<p><strong>Note :</strong> Mise à jour de cette technique pour prendre en compte IE8 dans le fichier <em>ie.css</em> et liste des hacks CSS dans l&#8217;article <a rel="bookmark" href="http://css4design.com/une-feuille-de-style-et-des-hacks-css-pour-cibler-ie6-ie7-ou-ie8">Une Feuille de style et des « hacks CSS » pour cibler IE6, IE7 ou IE8</a></p>

<h3 class='related_post_title'>Articles sur le même sujet</h3>

<ul class='related_post'><li><a href='http://css4design.com/une-feuille-de-style-et-des-hacks-css-pour-cibler-ie6-ie7-ou-ie8' title='Une Feuille de style et des « hacks CSS » pour cibler IE6, IE7 ou IE8'>Une Feuille de style et des « hacks CSS » pour cibler IE6, IE7 ou IE8</a></li><li><a href='http://css4design.com/ajouter-une-classe-css-dans-body-ou-html-pour-internet-explorer-ie6-ie7-ie8-ou-ie9' title='Ajouter une classe CSS dans BODY ou HTML pour Internet Explorer (IE6 &#8212; IE9)'>Ajouter une classe CSS dans BODY ou HTML pour Internet Explorer (IE6 &#8212; IE9)</a></li><li><a href='http://css4design.com/le-petit-journal-de-l-integrateur-web-html5-et-css' title='HTML5 et CSS pour l&#039;intégrateur web'>HTML5 et CSS pour l&#039;intégrateur web</a></li><li><a href='http://css4design.com/livre-css-avancees-vers-html5-et-css3' title='Notes de lecture &#8212; Livre CSS avancées, vers HTML5 et CSS3'>Notes de lecture &#8212; Livre CSS avancées, vers HTML5 et CSS3</a></li><li><a href='http://css4design.com/le-petit-journal-du-web-janvier-2011-typographie-css-photoshop-et-developpement-web' title='Le petit journal du Web &#8212; Janvier 2011 (Typographie, CSS, Photoshop et développement web)'>Le petit journal du Web &#8212; Janvier 2011 (Typographie, CSS, Photoshop et développement web)</a></li></ul>
 <p><a href="http://css4design.com/?flattrss_redirect&amp;id=223&amp;md5=ee91cecbb46e46b62b330cda15d1ca5b" title="Flattr" target="_blank"><img src="http://css4design.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://css4design.com/un-seul-fichier-css-pour-cibler-ie6-et-ie7-avec-les-commentaires-conditionnels/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<atom:link rel="payment" href="http://css4design.com/?flattrss_redirect&amp;id=223&amp;md5=ee91cecbb46e46b62b330cda15d1ca5b" type="text/html" />
	</item>
		<item>
		<title>Pour rétablir le flux après un float, vous êtes plutôt HR, BR ou DIV ?</title>
		<link>http://css4design.com/pour-retablir-le-flux-apres-un-float-vous-etes-plutot-hr-br-ou-div</link>
		<comments>http://css4design.com/pour-retablir-le-flux-apres-un-float-vous-etes-plutot-hr-br-ou-div#comments</comments>
		<pubDate>Fri, 22 Jun 2007 00:02:06 +0000</pubDate>
		<dc:creator>Bruno Bichet</dc:creator>
				<category><![CDATA[HTML & CSS]]></category>
		<category><![CDATA[Commentaires conditionnels]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[DIV]]></category>
		<category><![CDATA[Float]]></category>
		<category><![CDATA[Flottants]]></category>
		<category><![CDATA[HR]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Tutoriels]]></category>
		<category><![CDATA[XHTML]]></category>

		<guid isPermaLink="false">http://www.css4design.com/blog-reloaded/?p=103</guid>
		<description><![CDATA[Dans le prolongement du billet précédent concernant une mise en pages CSS avec la propriété float, je me suis intéressé aux différentes manières de styler la balise hr pour rétablir le flux après en avoir sorti des éléments en les faisant flotter à gauche ou à droite. J&#8217;utilise généralement hr avec le traditionnel clear: both et visibility: hidden et je jongle ensuite avec les marges ou la hauteur pour espacer les éléments. Or, depuis que j&#8217;utilise le reset.css d&#8217;Eric Meyer, j&#8217;ai tendance à supprimer les marges de tout ce qui bouge, mais cette chère règle horizontale reste récalcitrante à la [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 18px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcss4design.com%2Fpour-retablir-le-flux-apres-un-float-vous-etes-plutot-hr-br-ou-div">
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcss4design.com%2Fpour-retablir-le-flux-apres-un-float-vous-etes-plutot-hr-br-ou-div&amp;source=br1o&amp;style=normal&amp;service=bit.ly&amp;service_api=R_0c1ee4b64f105d1b2672690740a77d6a&amp;b=2" height="61" width="50" />
			</a>
		</div><p>Dans le prolongement du billet précédent concernant une <a hreflang="fr" href="http://www.css4design.com/quelques-notes-autour-du-design-fluide-avec-3-colonnes-du-collectif-alsacreations">mise en pages CSS avec la propriété float</a>, je me suis intéressé aux différentes manières de styler la balise <em>hr</em> pour rétablir le flux après en avoir sorti des éléments en les faisant flotter à gauche ou à droite. J&#8217;utilise généralement <em>hr</em> avec le traditionnel  <em>clear: both</em> et <em>visibility: hidden</em> et je jongle ensuite avec les marges ou la hauteur pour espacer les éléments. Or, depuis que j&#8217;utilise le <a hreflang="en" href="http://meyerweb.com/eric/thoughts/2007/05/01/reset-reloaded/">reset.css</a> d&#8217;Eric Meyer, j&#8217;ai tendance à supprimer les marges de tout ce qui bouge, mais cette chère <em>règle horizontale</em> reste récalcitrante à la remise à zéro <em>cross browser</em>&#8230;<span id="more-106"></span></p>

<h3>Un HR cross-browser cachère</h3>

<p>Il existe heureusement des solutions pour palier les insuffisances du dernier de la classe. <a hreflang="fr" href="http://forum.alsacreations.com/faq/faq-63-Styler-la-balise-lthr-gt-sous-Internet-Explorer.html">L&#8217;une d&#8217;entre elles</a> repose sur l&#8217;application d&#8217;un <em>margin-top</em> et <em>margin-bottom</em> négatif :</p>

<p>hr {
height: 1px;
margin: -0.5em 0;
padding: 0;
color: #F00;
background-color: #F00;
border: 0;
}</p>

<p>J&#8217;ajoute à celà les propriétés <em>clear: both</em> et <em>visibility: hidden</em>, je mets la hauteur à zéro et je supprime les couleurs pour obtenir un <em>spacer</em> de bon aloi. Les valeurs de <em>margin</em> ne convenant pas dans mon cas, j&#8217;ai tâtonné pour trouver une valeur satisfaisante :
<pre>hr {
     height: 0;
     margin: -1.2ex 0;
     padding: 0;
     border: 0;
     clear: both;
     visibility: hidden;
 }</pre>
Une autre solution trouvée cette fois sur <a hreflang="fr" href="http://www.ultra-fluide.com/ressources/css/css-hacks.htm#hr">ultra-fluide</a> transforme le <em>hr</em> en bloc pour mieux maitriser son comportement dans le but de créer une ligne rouge horizontale de 1 pixel d&#8217;épaisseur sans marge :
<pre>hr {
     display:  block;
     height: 1px;
     margin: 0;
     _margin: -7px 0;
     padding: 0;
     color: #F00;
     background-color: #F00;
     border: 0;
 }</pre>
Pour mes besoins, j&#8217;applique la recette précédente :
<pre>hr {
     display: block;
     height: 0;
     margin: 0;
     _margin: -7px 0;
     padding: 0;
     border: 0;
     visibility: hidden;
 }</pre>
Il y a bien ce <em>_margin</em> qui peut être gênant, mais il reste toujours la possibilité de le caser dans une feuille de style dédiée à IE avec les <a hreflang="fr" href="http://www.css4design.com/commentaires-conditionnels-d-internet-explorer-vs-hacks-css">commentaires conditionnels</a>.</p>

<p>La différence avec la méthode précédente est qu&#8217;une fois transformé en <em>block</em> (l&#8217;auteur de l&#8217;astuce ayant habilement déterminé que le <em>hr</em> se comportait par certains côtés comme un élément en ligne) le <em>margin: 0</em> suffit à supprimer les marges pour les navigateurs modernes. le <em>_margin: -7px 0</em> s&#8217;adressant plus spécifiquement à IE6. Reste à savoir comment se comporte IE7 dans les mêmes circonstances.</p>

<h4>Deux, c&#8217;est trop</h4>

<p>Ces deux techniques fonctionnent assez bien pour donner le même rendu aux traits horizontaux ou pour rétablir le flux. Malheureusement pour moi, j&#8217;ai deux blocs imbriqués contenant des <em>float: left</em> et <em>float: right</em>, ce qui implique deux <em>hr</em> l&#8217;un en dessous de l&#8217;autre :
<pre>             &lt;/div&gt;&lt;!-- end .pix --&gt;
             &lt;hr class="spacer" /&gt;
         &lt;/div&gt;&lt;!-- end .contents --&gt;
         &lt;hr class="spacer" /&gt;
     &lt;/div&gt;&lt;!-- end #container --&gt; &lt;/body&gt;</pre>
Ces deux <em>hr</em> successifs m&#8217;ennuient (un peu) car en l&#8217;absence de prise en charge des feuilles de style, je me retrouve avec deux vilains traits de séparation. Et puis, si je me suis mis à utiliser le <em>reset.css</em>, c&#8217;est pour éviter au maximum d&#8217;utiliser des CSS spécifiques à certains navigateurs, alors, bon&#8230;</p>

<p>Je tiens à préciser que j&#8217;utilise généralement <em>clear: both</em> sur le blocs eux-mêmes au lieu de créer un <em>spacer</em> superflu. Mais curieusement, les blocs en question se retrouvaient sous les colonnes latérales&#8230; la technique utilisée pour créer les colonnes latérales reposant également sur la propriété <em>float</em>, j&#8217;ai le sentiment qu&#8217;au bout d&#8217;un moment on se retrouve dans la situation où il devient interdit d&#8217;interdire à un bloc d&#8217;avoir des voisins à droite ou à gauche : les <em>spacers</em> indépendants deviennent indispensables.</p>

<h4>C&#8217;était mieux avant ?</h4>

<p>Avant d&#8217;utiliser les <em>hr</em> pour rétablir le flux, j&#8217;utilisais une <samp>&lt;div class=&nbsp;&raquo;spacer&nbsp;&raquo;&gt;&lt;/div&gt;</samp> qui fonctionnait furieusement bien malgré l&#8217;absence de sémantique associée :x</p>

<h3>Styler la balise BR</h3>

<p>J&#8217;ai essayé d&#8217;utiliser la balise <em>br</em> en lui associant un <em>clear: both</em>. Tout a l&#8217;air de fonctionner, mais si le flux est bien rétabli sous Firefox, IE6 ne passe pas le test de la bordure : elle n&#8217;encadre pas l&#8217;ensemble de la <em>div</em> comme si un <em>clear: both</em> n&#8217;avait pas d&#8217;effet sur un <em>br</em>&#8230;</p>

<p>C&#8217;est dommage parce que lorsqu&#8217;il s&#8217;agit simplement de rétablir le flux et non de créer une séparation entre deux contenus, cette balise <em>br</em> aurait presque été sémantique : un retour à la ligne&#8230; Que demander de mieux (oué, que ça fonctionne sous IE6, je sais&#8230;) ?</p>

<p>Je garde cette solution sous le coude pour tests complémentaires. En attendant, j&#8217;ai trouvé sur <a hreflang="fr" href="http://www.dimension-internet.com/images/gabarits/2colsSidebar_rHeaderFooter.html">dimension-internet</a> un gabarit utilisant la balise <em>br</em> pour rétablir le flux :
<pre>br.clearfloat {
     clear: both;
     height: 0;
     font-size: 1px;
     line-height: 0px;
 }</pre></p>

<h3>La rustine</h3>

<p>En désespoir de cause, je me suis résolu à utiliser <samp>&lt;div class=&nbsp;&raquo;spacer&nbsp;&raquo;&gt;&lt;/div&gt;</samp> lorsqu&#8217;il s&#8217;agit seulement de rétablir le flux, et <samp>&lt;div class=&nbsp;&raquo;spacer&nbsp;&raquo;&gt;&lt;hr /&gt;&lt;/div&gt;</samp> lorsque j&#8217;ai besoin de séparer aussi des contenus :
<pre>.spacer {
     clear: both;
 }
.spacer hr {
     display: none;
 }</pre>
Ce n&#8217;est pas super <a hreflang="fr" href="http://microformateurs.org/">CHIC</a>, mais au moins la feuille de style est allégée et ne nécessite ni <em>hacks</em> ni commentaires conditionnels. Si j&#8217;utilise souvent ces derniers, ça m&#8217;ennuie de les mettre en place pour une ou deux déclarations seulement. Bien évidemment, j&#8217;utilise et je recommande fortement l&#8217;usage du <em>hr</em> pour rétablir le flux lorsqu&#8217;un espacement est souhaité entre deux blocs, ou mieux encore, l&#8217;application du <em>clear: both</em> sur les blocs eux-mêmes.</p>

<h3>Quelques mots sur la remise à zéro des éléments HTML</h3>

<p>Au cours de mes recherche sur <em>hr</em>, je suis tombé sur une intervention de Florent V. qui <a hreflang="fr" href="http://forum.alsacreations.com/posting.php?action=newp&amp;tid=25546&amp;fid=23&amp;p=1&amp;q=193535">fait part de ses réserves</a> quant à l&#8217;utilisation d&#8217;une remise à zéro des éléments. L&#8217;utilisation d&#8217;un <em>reset</em> présente selon lui deux écueils. D&#8217;une part, il serait facile d&#8217;oublier de styler une balise et d&#8217;autre part, il ne serait pas souhaitable de vouloir tout maîtriser : un peu de <em>lâcher prise</em> serait bienvenue.</p>

<p>Si je partage cette dernière opinion, je ne suis pas totalement d&#8217;accord avec la première : les balises HTML ne sont pas en nombre infini, et au pire, en cas d&#8217;oubli, il est facile de palier le problème. Pour ma part, en complément de <em>reset.css</em>, j&#8217;utilise un fichier <em>html.css</em> pour donner un nouveau style &laquo;&nbsp;par défaut&nbsp;&raquo; aux éléments HTML.</p>

<p>Ce fichier est similaire à la partie /* basics <em>/ de l&#8217;<a hreflang="fr" href="http://larlet.fr/css/style.css">exemple fourni</a> par <a hreflang="fr" href="http://www.biologeek.com/journal/">david larlet de biologeek</a>. Notons que la partie /</em> reset */ de ce fichier ne reprend qu&#8217;une partie du <a hreflang="en" href="http://meyerweb.com/eric/thoughts/2007/05/01/reset-reloaded/">reset.css d&#8217;Eric Meyer</a>.</p>

<h4>Faire <em>reset</em>, c&#8217;est rigolo tout le temps ?</h4>

<p>Il y a évidemment des cas où l&#8217;utilisation d&#8217;un <em>reset</em> est à prendre avec des pincettes : lorsque vous intervenez sur une partie d&#8217;une page déjà construite, ou dans une moindre mesure, lorsque d&#8217;autres personnes sont susceptibles d&#8217;intervenir. Je ne conseillerais pas non plus l&#8217;utilisation de la remise à zéro dans le cadre d&#8217;une formation : si vous commencez l&#8217;étude des CSS, il vaut peut-être mieux connaître les bases avant de faire table rase ;)</p>

<h3>En guise de conclusion</h3>

<p>En tout état de cause, si la théorie nous dicte la bonne conduite à tenir, force est de constater que la pratique nous joue parfois des tours de cochons ^_^</p>

<p><strong>Mise à jour du 28/02/08 :</strong> la deuxième partie intitulée <a href="http://www.css4design.com/retablir-le-flux-apres-des-elements-flottants-en-css-sans-balise-html-supplementaire">Rétablir le flux après des éléments flottants en CSS sans balise HTML supplémentaire</a> vient de sortir.</p>

<h3 class='related_post_title'>Articles sur le même sujet</h3>

<ul class='related_post'><li><a href='http://css4design.com/retablir-le-flux-apres-des-elements-flottants-en-css-sans-balise-html-supplementaire' title='Rétablir le flux après des éléments flottants en CSS sans balise HTML supplémentaire'>Rétablir le flux après des éléments flottants en CSS sans balise HTML supplémentaire</a></li><li><a href='http://css4design.com/exercice-de-style-css-et-html-table-vs-div' title='Exercice de style CSS et HTML : table vs div'>Exercice de style CSS et HTML : table vs div</a></li><li><a href='http://css4design.com/programme-formation-html-css' title='Quelques notes &#8212; Programme de formation HTML &amp; CSS'>Quelques notes &#8212; Programme de formation HTML &#038; CSS</a></li><li><a href='http://css4design.com/design-css-liquide-ou-fluide-encadre-d-images-repetees-sans-table' title='Design CSS liquide (ou fluide) encadré d&#039;images répétées&#8230; sans table'>Design CSS liquide (ou fluide) encadré d&#039;images répétées&#8230; sans table</a></li><li><a href='http://css4design.com/quelques-notes-sur-la-bibliotheque-javascript-ie7-de-dean-edwards' title='Quelques notes sur la bibliothèque Javascript IE7 de Dean Edwards'>Quelques notes sur la bibliothèque Javascript IE7 de Dean Edwards</a></li></ul>
 <p><a href="http://css4design.com/?flattrss_redirect&amp;id=106&amp;md5=8f2fa813daaac67046d4ef2e92d03207" title="Flattr" target="_blank"><img src="http://css4design.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://css4design.com/pour-retablir-le-flux-apres-un-float-vous-etes-plutot-hr-br-ou-div/feed</wfw:commentRss>
		<slash:comments>20</slash:comments>
		<atom:link rel="payment" href="http://css4design.com/?flattrss_redirect&amp;id=106&amp;md5=8f2fa813daaac67046d4ef2e92d03207" type="text/html" />
	</item>
		<item>
		<title>Twitter : Signal social, microblogging et moblogging</title>
		<link>http://css4design.com/twitter-signal-social-microblogging-et-moblogging-web-20</link>
		<comments>http://css4design.com/twitter-signal-social-microblogging-et-moblogging-web-20#comments</comments>
		<pubDate>Sat, 14 Apr 2007 16:00:29 +0000</pubDate>
		<dc:creator>Bruno Bichet</dc:creator>
				<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Commentaires conditionnels]]></category>
		<category><![CDATA[Réseaux sociaux]]></category>

		<guid isPermaLink="false">http://www.css4design.com/blog-reloaded/?p=77</guid>
		<description><![CDATA[Dans la série je suis un garçon influençable, en voici la preuve : comme tout le monde, j&#8217;ai entendu parler de Twitter qui permet de laisser des traces de ce qu&#8217;on est en train de faire. Ce site se situe à à mi-chemin entre le microblogging , le moblogging et le signal social. Votre status est visible par tous sur la page d&#8217;accueil de Twitter pour participer au Zeitgeist ; par vos amis pour garder le contact ; ou bien encore sous la forme d&#8217;un widget à placer sur un blog pour permettre à vos lecteurs de suivre votre vie [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 18px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcss4design.com%2Ftwitter-signal-social-microblogging-et-moblogging-web-20">
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcss4design.com%2Ftwitter-signal-social-microblogging-et-moblogging-web-20&amp;source=br1o&amp;style=normal&amp;service=bit.ly&amp;service_api=R_0c1ee4b64f105d1b2672690740a77d6a&amp;b=2" height="61" width="50" />
			</a>
		</div><p><img class="il" src="/images/billet/twitter/twitter-signal-social.png" alt="Ce que je fais sur Twitter ?" /> Dans la série <em>je suis un garçon influençable</em>, en voici la preuve : comme tout le monde, j&#8217;ai entendu parler de <a hreflang="en" href="http://twitter.com/">Twitter</a> qui permet de laisser des traces de ce qu&#8217;on est en train de faire. Ce site se situe à à mi-chemin entre le <em>microblogging </em>, le <a hreflang="en" href="http://en.wikipedia.org/wiki/Moblog">moblogging</a> et le <a hreflang="fr" href="http://www.signal-social.fr/">signal social</a>. Votre <em>status</em> est visible par tous sur la page d&#8217;accueil de Twitter pour participer au <em>Zeitgeist</em> ; par vos amis pour garder le contact ; ou bien encore sous la forme d&#8217;un <em>widget</em> à placer sur un blog pour permettre à vos lecteurs de suivre votre vie quotidienne&#8230; ou pas. C&#8217;est vous qui écrivez, c&#8217;est vous qui choisissez !<span id="more-85"></span></p>

<p><img class="imgFullWidth" src="/images/billet/twitter/ce-que-je-fais.png" alt="Ce que je fais sur Twitter ?" /></p>

<p>Je trouvais l&#8217;idée sympathique, mais sans plus. Jusqu&#8217;à ce que je lise <a hreflang="fr" href="http://www.vinch.be/2007/04/11/twitter-je-me-prends-au-jeu/">le billet de Vinch</a>. Et hop ! me voilà sur <a hreflang="en" href="http://en.wikipedia.org/wiki/Twitter">Twitter</a>. Je lis, je m&#8217;inscris, et je suis là, à choisir une couleur de fond pas trop criarde pour le <em>widget Flash</em>.</p>

<h3>Comment ça marche ?</h3>

<p>L&#8217;inscription terminée, je commence à tester. Le site affiche mon avatar, mon pseudo (avec un lien vers <a hreflang="fr" href="http://twitter.com/br1o">ma page publique</a>), mon status (ce que je suis en train de faire), et le temps passé depuis mon dernier gazouillis (c&#8217;est comme ça que l&#8217;on peut traduire Twitter).</p>

<p><img class="imgFullWidth" src="/images/billet/twitter/my-friends.png" alt="Mes amis et moi sur Twitter" /></p>

<p><img class="il" src="/images/billet/twitter/twitter-vinch.png" alt="Vinch sur Twitter" /> Sur le widget Flash, il ne reste plus que le status. Deux flèches permettent d&#8217;afficher les status précédents et suivants. Le tout dans un petit bloc ni beau ni moche dont on peut choisir la couleur.</p>

<p>J&#8217;allais passer sans m&#8217;en rendre compte du côté obscur, quand je suis tombé sur la version brute de fonderie du <em>widget</em> : un honnête Javascript à copier-coller où je veux.</p>

<p>Pour résumer, le script <em>splitte</em> le texte du status et le temps passé depuis ma dernière utilisation, puis écrit le résultat avec <em>innerHTML</em> dans deux balises <em>span</em> qu&#8217;il suffit de styler &#8211; ou de changer !</p>

<p>Pour ma part, j&#8217;ai utilisé la balise <em>blockquote</em> pour l&#8217;affichage du status que je considère comme une citation, et une balise <em>p</em> pour le temps passé depuis la dernière mise à jour.</p>

<p>L&#8217;affichage du temps est réalisé par le script (simple copié-collé), de sorte que j&#8217;ai pu le personnaliser. J&#8217;aurais pu tout aussi bien le supprimer, mais il ne serait rien resté du concept Twitter déjà minimaliste ;)</p>

<p>J&#8217;ai été agréablement surpris par l&#8217;absence totale de publicité sur cette version <em>Low Tech</em> : on dirait vraiment que c&#8217;est moi qui l&#8217;ai fait ;)</p>

<p><img class="imgFullWidth" src="/images/billet/twitter/mon-twitter.png" alt="Affichage de mon twitter sur mon blog" /></p>

<p>En revanche, je suis moins satisfait par les temps de réponse du script qui ont tendance à ralentir le chargement de la page de temps à autre.</p>

<h3>Pourquoi ça marche ?</h3>

<p>Le succès grandissant de Twitter et le <a hreflang="en" href="http://www.technorati.com/search/twitter">buzz énorme</a> sur le service ont provoqué moult réactions plus ou moins favorables aux gazouilleurs. Twitter divise la blogosphère :</p>

<ul>
    <li> Une grande partie trouve que ça ne sert strictement à rien, et qu&#8217;il est même indécent d&#8217;étaler sa vie quotidienne dans ce qu&#8217;elle a de plus banale ou triviale. A ceux-là, je rappellerais seulement le slogan qui accompagna la Twingo en son temps : <em>à nous d&#8217;inventer la vie qui va avec&#8230;</em> Et toc ;)</li>
    <li> Beaucoup trouvent ça inutile donc indispensable. Ce sont souvent des blogueurs qui relayent l&#8217;information sans trop s&#8217;engager eux-mêmes. Mais au moins ne dénigrent-ils pas un service qu&#8217;ils n&#8217;ont pas vraiment testé&#8230;</li>
    <li> D&#8217;autres encore, dont je suis, essaient de comprendre le phénomène de l&#8217;intérieur tout en s&#8217;amusant :)</li>
    <li> Et enfin, une majorité de blogueurs ou non-blogueurs trouvent dans Twitter le moyen de diversifier encore plus les moyens de communication pour rester en contact avec leur tribu. Ce qui est l&#8217;objectif premier du site.</li>
    <li>etc.</li>
</ul>

<h3>C&#8217;est pas tout de l&#8217;installer, mais je fais quoi avec ?</h3>

<p>Pour l&#8217;instant, parmi toutes les utilisations possibles, je n&#8217;ai pas encore vraiment choisi : 140 caractères c&#8217;est court (à peu près la taille d&#8217;un SMS). En même temps, ça peut être motivant de faire passer un message en si peu de lettres :</p>

<ul>
    <li>Mon humeur du moment (mais je doute que ça intéresse du monde),</li>
    <li>Ce que je suis en train de faire (idem),</li>
    <li>Des Haikus (tiens pourquoi pas),</li>
    <li>Des citations (idem),</li>
    <li>Le site que je suis en train de visiter (pas bête),</li>
    <li>Le bon plan de derrière les fagot (idem),</li>
    <li>De l&#8217;auto-promotion (ouééééé, noooooon),</li>
    <li> &#8230;</li>
</ul>

<p>Finalement les idées ne manquent pas. Si de votre côté vous voulez rallonger la liste, n&#8217;hésitez pas à <em>squatter</em> les commentaires.</p>

<h3>Trucs et astuces pour Twitter tranquille</h3>

<p>Il est possible de faire des liens. Mais comme tous les caractères sont comptés il ne reste pas beaucoup de place pour le corps du message. J&#8217;utilise donc <a hreflang="en" href="http://tinyurl.com/">tinyurl</a> qui échange mes longues URL contre des plus courtes. C&#8217;est toujours ça de gagné.</p>

<h4>Je peux Twitter de partout&#8230;</h4>

<p>Outre l&#8217;interface du site lui-même, il existe une <a hreflang="en" href="http://lud.icro.us/post-twitter-updates-from-firefox/">extension Firefox</a> très astucieuse pour <em>twitter</em> tout en surfant. Par ailleurs, en activant l&#8217;option idoine sur le site, et en invitant le contact <em>twitter@twitter.com</em>, je peux utiliser mes 140 caractères sur GTalk ! Malgré tout, je pense rester sur l&#8217;interface du site car l&#8217;affichage du nombre de caractères restants lors de la saisie est une aide précieuse quand on a tendance à déborder&#8230;</p>

<h4>&#8230; mais pas sur Internet Explorer</h4>

<p>En vérifiant mon Twitter sur IE6, je me suis rendu compte qu&#8217;il ne gazouillait pas. En attendant de régler le problème, j&#8217;ai copié-collé le code HTML résultant du script en ciblant le dernier de la classe via les <a hreflang="fr" href="http://www.css4design.com/index.php/2006/07/18/28-commentaires-conditionnels-d-internet-explorer-vs-hacks-css">commentaires conditionnels</a>, et j&#8217;ai mis deux citations en attendant.</p>

<h3>Un éco-système riche et innovant</h3>

<p>Twitter a inspiré des initiatives nombreuses et parfois étonnantes :</p>

<ul>
    <li> <a hreflang="en" href="http://Twittervision.com/">twittervision</a> propose <strong>une carte du monde affichant en temps réel les utilisateurs</strong> en train de gazouiller. C&#8217;est assez bluffant : la carte se déplace sous vos yeux (en 1280 x 1024) et affiche une infobulle à l&#8217;endroit où le Twitterer <em>twitte</em>.</li>
    <li> Le moteur de recherche <a hreflang="en" href="http://twitterment.umbc.edu/">twitterment</a> affiche les résultats sur deux colonnes. La première affiche les gazouillis associés à votre mot-clé, et la seconde fournit des <strong>indications statistiques sur la tendance horaire ou journalière d&#8217;apparition du mot-clé</strong>, une carte Google (inaccessible à l&#8217;heure où j&#8217;écris), et quelques mots-clés en relation avec le vôtre pour élargir votre recherche.Vous pourrez aussi comparer la fréquence d&#8217;apparition de deux mots-clés. Deux nuages de tags vous renseigneront sur les termes qui montent et ceux qui descendent pour avoir une idée du <em>Zeitgeist Twitterien</em>.</li>
    <li> Pour mettre <strong>un peu de sémantique dans cette joyeuse anarchie</strong>, <a href="http://teketen.blogspot.com/">Gorka Julio</a> propose de mettre en place un <a hreflang="en" href="http://twitternanoformats.wikispaces.com/">nanoformat pour Twitter</a> sur une page wikispaces. En voilà une idée qu&#8217;elle est bonne ! Je dirais même que c&#8217;est le genre d&#8217;idée qui, si elle marche et si le phénomène Twitter continue sur sa lancée, pourrait permettre de structurer le web. <strong><em>Save the web, save Twitter ?</em></strong> Pourquoi pas :)</li>
</ul>

<h3>C&#8217;est pas tout mais faut y aller, maintenant !</h3>

<p>Maintenant que le vin est tiré, il faut le boire. Je verrais bien à l&#8217;usage quoi faire de Twitter. Certainement un mélange de tout ce que j&#8217;ai évoqué plus haut.</p>

<p>Reste la dimension &laquo;&nbsp;sociale&nbsp;&raquo; de Twitter que je découvre à peine et que je vous invite à découvrir vous aussi : Twitter, c&#8217;est trop bien pour que seuls les ados en profitent.</p>

<h3>Pour conclure, voici quelques liens de blogueurs qui parlent de Twitter</h3>

<h4>Ils sont plutôt favorables :</h4>

<ul>
    <li>Chez <a hreflang="fr" href="http://www.vinch.be/2007/04/11/twitter-je-me-prends-au-jeu/">Vinch</a></li>
    <li>Chez <a hreflang="fr" href="http://climbtothestars.org/archives/2007/03/15/twitter-cest-quoi-explications/">Stéphanie Booth</a></li>
    <li>Chez <a hreflang="fr" href="http://xtof.viabloga.com/news/voulez-vous-twitter-avec-moi-ce-soir">xtof</a></li>
    <li>Chez <a hreflang="en" href="http://www.lifehack.org/articles/lifehack/5-ways-to-use-twitter-for-good.html">lifehack</a></li>
    <li>Chez LLM, mais c&#8217;est <a hreflang="fr" href="http://www.loiclemeur.com/france/2007/04/bientt_la_mort__2.html">Ouriel Oyahon</a> qui régale ;)</li>
</ul>

<h4>Ils sont plutôt contre :</h4>

<ul>
    <li>Chez <a hreflang="fr" href="http://altaide.typepad.com/jacques_froissant_altade/2007/04/la_folie_twitte.html">Jacques Froissant</a></li>
    <li>Chez <a hreflang="fr" href="http://fredericdevillamil.com/articles/2007/03/21/twitter-la-branlette-2-0">Frederic de Villamil</a></li>
</ul>

<h3 class='related_post_title'>Articles sur le même sujet</h3>

<ul class='related_post'><li><a href='http://css4design.com/quels-sont-les-services-web-2-0-que-j-ai-utilises-aujourdhui' title='Quels sont les services web 2.0 que j&#039;ai utilisés aujourd’hui ?'>Quels sont les services web 2.0 que j&#039;ai utilisés aujourd’hui ?</a></li><li><a href='http://css4design.com/moi-aussi-j-ai-quitte-netvibes' title='Moi aussi, j&#039;ai quitté Netvibes&#8230;'>Moi aussi, j&#039;ai quitté Netvibes&#8230;</a></li><li><a href='http://css4design.com/43-things-what-do-you-want-to-do-with-your-life' title='43 Things : what do you want to do with your life?'>43 Things : what do you want to do with your life?</a></li><li><a href='http://css4design.com/l-experience-utilisateur-au-centre-de-l-ergonomie-des-sites-web' title='L&#039;expérience utilisateur et l&#039;ergonomie des sites web'>L&#039;expérience utilisateur et l&#039;ergonomie des sites web</a></li><li><a href='http://css4design.com/css-naked-day-copaing-lyon-blog-css2-pratique-du-design-web' title='CSS Naked Day + Copaing + Lyon Blog + CSS2 Pratique&#8230;'>CSS Naked Day + Copaing + Lyon Blog + CSS2 Pratique&#8230;</a></li></ul>
 <p><a href="http://css4design.com/?flattrss_redirect&amp;id=85&amp;md5=3b507f7ae15795a9625acbdf0c9e8040" title="Flattr" target="_blank"><img src="http://css4design.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://css4design.com/twitter-signal-social-microblogging-et-moblogging-web-20/feed</wfw:commentRss>
		<slash:comments>14</slash:comments>
		<atom:link rel="payment" href="http://css4design.com/?flattrss_redirect&amp;id=85&amp;md5=3b507f7ae15795a9625acbdf0c9e8040" type="text/html" />
	</item>
		<item>
		<title>L&#039;expérience utilisateur et l&#039;ergonomie des sites web</title>
		<link>http://css4design.com/l-experience-utilisateur-au-centre-de-l-ergonomie-des-sites-web</link>
		<comments>http://css4design.com/l-experience-utilisateur-au-centre-de-l-ergonomie-des-sites-web#comments</comments>
		<pubDate>Sun, 08 Apr 2007 00:29:12 +0000</pubDate>
		<dc:creator>Bruno Bichet</dc:creator>
				<category><![CDATA[Ergonomie & Accessibilité]]></category>
		<category><![CDATA[Traductions]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Commentaires conditionnels]]></category>
		<category><![CDATA[Conception de site web]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Ergonomie]]></category>
		<category><![CDATA[Hacks CSS]]></category>
		<category><![CDATA[Hover]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Standards web]]></category>
		<category><![CDATA[Web 2.0]]></category>

		<guid isPermaLink="false">http://www.css4design.com/blog-reloaded/?p=74</guid>
		<description><![CDATA[Pour faire bonne impression sur les visiteurs, il suffit d&#8217;anticiper leurs besoins. Dans ce domaine, ce sont souvent les détails qui comptent le plus. Améliorer l&#8217;expérience utilisateur et adapter les fonctionnalités d&#8217;un site web en fonction des attentes de chacun permet de satisfaire : ceux qui veulent consulter un site web ergonomique offrant un contenu facilement accessible ; ceux qui veulent un design attractif ; et enfin, ceux qui veulent le grand jeu avec Ajax à tous les étages. Ce billet est ma traduction du dernier article d&#8217;Aaron Gustafson Ruining the user experience paru sur A List Apart le 27 [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 18px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcss4design.com%2Fl-experience-utilisateur-au-centre-de-l-ergonomie-des-sites-web">
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcss4design.com%2Fl-experience-utilisateur-au-centre-de-l-ergonomie-des-sites-web&amp;source=br1o&amp;style=normal&amp;service=bit.ly&amp;service_api=R_0c1ee4b64f105d1b2672690740a77d6a&amp;b=2" height="61" width="50" />
			</a>
		</div><p><img src="/images/billet/ruining/ruining-user-experience.png" class="il" alt="Ruiner l'expérience utitilisateur ? Quelle idée ^^" title="Ruining the user experience" /> Pour faire  <em>bonne impression</em> sur les visiteurs, il suffit d&#8217;anticiper leurs besoins. Dans ce domaine, ce sont souvent les détails qui comptent le plus. Améliorer l&#8217;<em>expérience utilisateur</em> et adapter les fonctionnalités d&#8217;un site web en fonction des attentes de chacun permet de satisfaire : ceux qui veulent consulter un site web ergonomique offrant un contenu  facilement accessible ; ceux qui veulent un design attractif ; et enfin, ceux qui veulent le grand jeu avec <em>Ajax</em> à tous les étages. Ce billet est ma traduction du dernier article d&#8217;Aaron Gustafson  <a href="http://www.alistapart.com/articles/ruininguserexperience/" title="Ruining the User Experience">Ruining the user experience</a> paru sur <em>A List Apart</em> le 27 mars dernier.<span id="more-83"></span></p>

<h2>Ruiner l&#8217;expérience utilisateur</h2>

<p>Pendant un récent voyage d&#8217;affaire à <em>Seattle</em>, j&#8217;ai passé deux soirées à déguster la cuisine locale. Je me suis régalé à chaque repas, mais je garde de l&#8217;un deux un souvenir bien plus marqué. Mais pourquoi ?</p>

<p>Les deux restaurants présentaient de nombreux points communs : les plats étaient alléchants et présentés avec goût ; l&#8217;atmosphère était sympathique et chaleureuse ; les menus offraient un large choix de plats tout deux à un prix raisonnable, et le personnel était aux petits soins. Alors qu&#8217;est-ce qui fait que le second restaurant m&#8217;a laissé un bien meilleur souvenir que le premier ?</p>

<p>Comme souvent dans la vie, ce sont les détails qui comptent le plus. Prenez un verre d&#8217;eau, par exemple. Un serveur négligent peut le servir glacé, ou pire encore, vous laisser mourir de soif avant de vous resservir. Alors qu&#8217;un serveur bienveillant s&#8217;assurera que le niveau de l&#8217;eau ne descendra jamais plus bas que la moitié du verre ; les meilleurs vous feront la surprise de trouver le verre que vous venez de finir, rempli à ras bord une nouvelle fois.</p>

<p>Pour nous les ergonomes du web, Il y a beaucoup à apprendre d&#8217;une chose aussi simple qu&#8217;un verre d&#8217;eau.</p>

<h3>Qui est le client ?</h3>

<p>Quand vous êtes serveur dans un restaurant, vous savez que les gens viennent avec certains besoins et, parfois même, avec quelques attentes. Souvent, le verre d&#8217;eau est le &laquo;&nbsp;premier contact&nbsp;&raquo; avec le client. S&#8217;il est rempli rapidement, vous marquez un point, mais ce n&#8217;est que le début. En effet, certaines personnes boivent plus vite que d&#8217;autres et demandent à être resservies plus souvent. Certains clients ne boiront pas avant d&#8217;avoir les plats devant eux. D&#8217;autres encore ne toucheront pas à leur bouteille d&#8217;eau&#8230; ou demanderont peut-être un peu de thé glacé, ou encore autre chose. Au départ, vous ne pouvez vraiment pas savoir à qui vous avez à faire. Et lorsqu&#8217;il s&#8217;agit d&#8217;une table de 4, 6 ou même 10 personnes il vaut mieux s&#8217;être préparé à l&#8217;avance&#8230;</p>

<p>Sur le web, c&#8217;est la même chose. Nous faisons de beaux sites qui (nous l&#8217;espérons) font une excellente première impression, mais nous devons nous assurer que chaque point d&#8217;interactivité renforce cet avis favorable tout au long de la navigation, sinon nous risquons de dilapider le peu de crédit acquis au départ. Ce type de pensée à donné naissance au concept d&#8217;<a href="http://en.wikipedia.org/wiki/Progressive_enhancement" title="amélioration progressive.">amélioration progressive</a></p>

<p>Sur le web, nous ne savons rien à propos de la personne qui vient visiter notre site. Nous ne connaissons pas le navigateur utilisé. Nous ignorons si le serveur est interrogé depuis un téléphone portable. Nous ne savons pas si le clavier est préféré à la souris. Nous ne savons pas si Javascript (ou même CSS) est activé. Nous ne savons pas si la page doit être imprimée. Nous ne savons pas si l&#8217;utilisateur consulte le site à l&#8217;aide d&#8217;un lecteur d&#8217;écran. Nous ne savons vraiment rien&#8230;</p>

<p>Alors, que fait-on quand on ne sait rien ? On an-ti-ci-pe.</p>

<p>En tant que développeurs, nous devons pouvoir satisfaire les besoins de nos clients. Et si nous sommes assez pointus, nous pouvons régler leurs problèmes sans qu&#8217;ils ne se rendent compte de notre intervention.</p>

<h3>Une  douche froide ?</h3>

<p><a href="http://lala.com/" title="Lala.com">Lala.com</a> est un site bâti autour d&#8217;une communauté de gens qui aiment la musique. Le système facilite l&#8217;échange de <abbr title="Compact Disc">CD</abbr> dans toute la communauté par la poste.</p>

<p>Je ne dirais pas que leur <a href="http://www.alistapart.com/d/ruininguserexperience/lala-home.png" title="Figure 1-1. Lala homepage." rel="splash.image|lala">site web</a> est attractif, mais il est utilisable&#8230; sauf si Javascript est <a href="http://www.alistapart.com/d/ruininguserexperience/lala-home-no-js-old.png" title="Figure 1-2. Lala sans JavaScript, circa July 2006." rel="splash.image|lala">désactivé</a>.</p>

<p>Vous apprécierez le fait qu&#8217;il y a un message indiquant un <em>Chargement en cours</em> alors que rien ne se charge.</p>

<p>Pour régler le problème (la copie d&#8217;écran ci-dessus a été prise entre le moment où j&#8217;ai commencé à me servir du site comme exemple de ce qu&#8217;il ne fallait <strong>pas</strong> faire et la finalisation de l&#8217;article), tout ce qu&#8217;ils ont été capable de faire, c&#8217;est de ressortir ce <a href="http://www.alistapart.com/d/ruininguserexperience/no-js-message.png" title="Figure 1-3. Lala brings back fond memories." rel="splash.image|lala">vieux message</a> au parfum entêtant datant de la dernière guerre des navigateurs.</p>

<p>Le problème ici n&#8217;est pas que le site utilise Javascript, mais qu&#8217;il ne fonctionne pas sans. La raison ? Et bien, apparemment, les concepteurs se font plaisir en  <em>Ajax-isant</em> tout le contenu. Dans leur précipitation, ils ont entassés tous les trucs du <em>web 2.0</em> sous le capot et se sont aliénés une bonne partie des utilisateurs du <em>web 1.0</em>, et une part importante du marché des appareils mobiles. Et <a href="http://www.google.com/search?q=must+have+JavaScript+enabled&amp;start=0">ils ne sont pas les seuls</a>.</p>

<p>Pensez à ceci : vous êtes un utilisateur de Lala.com, vous êtes proche d&#8217;un magasin de disque et vous vous arrêtez sur l&#8217;album des <em>Fatals Picards</em> ["Arcade Fire" dans la version originale, NdT]. Vous n&#8217;avez pas réalisé qu&#8217;il était sorti et voulez l&#8217;ajouter à votre liste de souhaits avant de l&#8217;oublier. Si votre téléphone mobile ne supporte pas Javascript (ou si vous l&#8217;avez désactivé pour réduire le temps/coût de chargement), vous allez vous retrouver devant un écran qui vous donne des <a href="http://www.alistapart.com/d/ruininguserexperience/lala-mobile.png" title="Figure 1-4. Lala a-no-go." rel="splash.image|lala">informations pertinentes</a> sur Lala, suivies malheureusement du message indiquant que Javascript est nécessaire pour utiliser le site.</p>

<p>Vous ne pouvez pas accéder à votre liste de souhaits ou à quoi que ça soit d&#8217;autre, d&#8217;ailleurs. Même le champs de recherche (en bas de la page) ne fonctionne pas. Pour une application de type intranet, cela peut être acceptable, mais pour un site web grand public, c&#8217;est un désastre.</p>

<h3>Réfléchissez avant de servir</h3>

<p>Nous avons déjà établi qu&#8217;en tant que développeur web nous sommes généralement dans le brouillard quant aux desiderata de nos utilisateurs. Le mieux que nous puissions faire est d&#8217;anticiper ce que pourrait être leurs besoins et s&#8217;assurer qu&#8217;ils sont pris en compte à tout les niveaux pour apporter la meilleure expérience possible. C&#8217;est là que l&#8217;amélioration progressive entre en scène. Nous devons penser aux besoins des différents types d&#8217;utilisateurs et leur apporter une réponse.</p>

<ol>
    <li>
<h4>Niveau 1 : pas de fioriture</h4>
Certains utilisateurs veulent seulement accéder au contenu. Ils peuvent surfer depuis un appareil mobile, chercher à imprimer quelques informations, ou utiliser toutes sortes de périphériques d&#8217;assistance pour naviguer. Ils peuvent même avoir désactivé l&#8217;affichage des images. En gardant un marquage propre et bien-ordonné et en respectant la sémantique associée aux balises HTML, vous répondrez aux besoins de ces utilisateurs qui veulent consommer léger et afficher les pages rapidement, sans chichi.</li>
    <li>
<h4>Niveau 2 : faites joli</h4>
D&#8217;autres, aiment les belles vitrines (ou une tranche de citron). Pour eux, concevez un design graphique visuellement attractif. Vous pouvez même ajouter quelques fioritures visuelles (ou un peu de Flash) et ils seront contents. Aussi longtemps qu&#8217;il n&#8217;y a pas de confusion entre les éléments de décoration et le contenu de la page, que vous avez réalisé tout vos tests sur les navigateurs (ou que vous fournissez quelques styles basiques pour les médias alternatifs), ça devrait le faire.</li>
    <li>
<h4>Niveau 3 :  c&#8217;est la fête !</h4>
D&#8217;autres encore, veulent le grand jeu. Pour ceux-là, vous pouvez faire sauter le bouchon et créer une merveilleuse application web 2.0 avec fondu-enchainé, <em>widget</em> en veux-tu en-voilà, et Ajax en abondance.

Gardez toutefois à l&#8217;esprit, que ces niveaux ne sont pas toujours aussi clairement identifiables. Un palier intermédiaire entre les niveaux 1 et 2 sera peut-être nécessaire pour donner à <em>Netscape 4.x</em> et <em>IE5/Mac</em> quelques styles typographiques spécifiques. Ou vous pouvez avoir envie d&#8217;offrir des raffinements Javascript selon les navigateurs, ou encore injecter un peu de <em>crème au nougat</em> entre les niveaux 2 et 3&#8230;</li>
</ol>

<h3>Passer inaperçu</h3>

<p>Une fois que vous avez décidé des niveaux à prendre en compte, vous pouvez construire votre site.</p>

<p>Commencez par le contenu. Quelquefois, les webdesigners et les développeurs oublient que les gens viennent surtout pour ça. Travaillez-le avec amour sans noyer vos visiteurs sous les informations. N&#8217;empilez pas les blocs comme pour un buffet. La production du contenu demande toujours beaucoup de travail. Mettez-le en valeur.</p>

<p>Lorsque le  contenu est balisé, il est temps d&#8217;établir le <em>look and feel</em> du site. Concevez un design adapté à vos utilisateurs en utilisant pour chaque niveau les différentes techniques à votre disposition : cachez certains fichiers CSS aux navigateurs les plus anciens et donnez des styles spécifiques à ceux qui demandent un peu plus d&#8217;attention. Les <a href="http://msdn.microsoft.com/workshop/author/dhtml/overview/ccomment_ovw.asp" title="Les commentaires conditionnels">commentaires conditionnels</a> sont réellement <a href="http://www.brucelawson.co.uk/index.php/2005/future-proof-your-css-with-conditional-comments/" title="Donnez un futur à vos CSS avec les commentaires conditionnels">vos amis pour la vie</a> en la matière. Mais n&#8217;oubliez pas les vieilles recettes comme les <a href="http://www.ericmeyeroncss.com/bonus/trick-hide.html" title="hacks CSS pour cacher des règles à certains navigateurs">règles @import et les combinaisons pour les médias spécifiques</a> qui permettent d&#8217;offrir sélectivement un parfum différent pour les navigateurs collés au radiateur du fond de la classe.</p>

<p>Vérifiez la présentation de votre contenu à l&#8217;impression et son affichage sur les périphériques mobiles. A ce propos, envisagez-vous une mise en pages spécifique ou seulement un traitement basique en terme de couleur ou de typographie ? Quel sort réservez-vous aux images et aux formulaires ? Essayez d&#8217;anticiper les fonctionnalités qu&#8217;un utilisateur mobile voudrait, et ôtez le superflu ! Si vous utilisez la <em>pseudo-classe</em> <samp>:hover</samp> sur un lien, n&#8217;oubliez pas de considérer également la <em>pseudo-classe</em> <samp>:focus</samp>, et les utilisateurs de claviers ou d&#8217;appareils mobiles vous remercieront.</p>

<p>Lorsque le design est validé, ajoutez quelques étincelles avec une pincée de Javascript non-intrusif. Vous connaissez déjà les méthodes de détection pour savoir si un script peut fonctionner sur tel navigateur ? Considérez aussi comment <a href="http://sourcelabs.com/ajb/archives/2005/05/ajax_mistakes.html" title="Erreurs communes avec Ajax">vos scripts peuvent interférer avec les interactions communes aux navigateurs telles que &laquo;&nbsp;bookmarker&nbsp;&raquo; un lien ou utiliser le bouton retour</a>. Et n&#8217;oubliez pas l&#8217;interdépendance qui peut exister entre des scripts différents : votre site deviendrait-il inutilisable si un script fonctionnait et pas un autre ?</p>

<p>Si vous créez un <em>widget</em> ou autre interface de contrôle, générez le marquage additionnel quand avez déterminé qu&#8217;il  est prêt à être utilisé, et que tout le reste fonctionne encore. Et si vous <a href="http://www.quirksmode.org/archives/2005/07/benchmark_tests.html">séparez les CSS liées à votre widget de votre code Javascript</a> comme un <em>bon petit soldat des standards</em>, assurez-vous que les styles ne sont pas actifs tant que le script n&#8217;a pas indiqué que le <em>widget</em> peut être utilisé. Une <em>bonne pratique</em> est d&#8217;utiliser l&#8217;échange de classe (cf. Table 1) :</p>

<table style="border-bottom: 3px solid #b2b2b2; margin: 0pt 0pt 2em; text-align: left" summary="Exemples d'échange de classes CSS appliquées aux widgets">
<thead>
<th scope="col" style="border-style: solid solid solid none; border-color: rgb(204, 204, 204) rgb(204, 204, 204) rgb(204, 204, 204) -moz-use-text-color; border-width: 0pt 0pt 1px medium; padding: 0.5em 1em">Widget</th>
<th scope="col" style="border-style: solid; border-color: #cccccc; border-width: 0pt 0pt 1px 1px; padding: 0.5em 1em">Au repos</th>
<th scope="col" style="border-style: solid; border-color: #cccccc; border-width: 0pt 0pt 1px 1px; padding: 0.5em 1em">Activé</th>
</tr>
<tr>
<th scope="row" style="border-style: solid solid solid none; border-color: rgb(204, 204, 204) rgb(204, 204, 204) rgb(204, 204, 204) -moz-use-text-color; border-width: 0pt 0pt 1px medium; padding: 0.5em 1em">Navigation par onglets</th>
<td style="border-style: solid; border-color: #cccccc; border-width: 0pt 0pt 1px 1px; padding: 0.5em 1em"><code>.onglet</code></td>
<td style="border-style: solid; border-color: #cccccc; border-width: 0pt 0pt 1px 1px; padding: 0.5em 1em"><code>.onglet-on</code></td>
</tr>
<tr>
<th scope="row" style="border-style: solid solid solid none; border-color: rgb(204, 204, 204) rgb(204, 204, 204) rgb(204, 204, 204) -moz-use-text-color; border-width: 0pt 0pt 1px medium; padding: 0.5em 1em">Formulaire à soumission automatique</th>
<td style="border-style: solid; border-color: #cccccc; border-width: 0pt 0pt 1px 1px; padding: 0.5em 1em"><code>.auto-submit</code></td>
<td style="border-style: solid; border-color: #cccccc; border-width: 0pt 0pt 1px 1px; padding: 0.5em 1em"><code>.auto-submit.actif</code></td>
</tr>
</table>

<p>Au final, si vous envisagez d&#8217;utiliser <em>Ajax</em>, faites-le avec discernement : il n&#8217;est pas nécessaire de charger l&#8217;ensemble de la page via des appels asynchrones qui finissent par devenir une barrière entre l&#8217;utilisateur et votre contenu. Paradoxalement, cela peut entraîner une <a href="http://www.devwebsphere.com/devwebsphere/2006/04/the_hidden_cost.html" title="Augmentation de la charge serveur : les coûts cachés">augmentation de la charge serveur</a>, rendre votre <a href="http://searchenginewatch.com/showPage.html?page=sew_print&amp;id=3624222" title="Ajax et les moteurs de recherche">contenu invisible pour les moteurs de recherche</a>, et rendre votre site <a href="http://www.sitepoint.com/article/ajax-screenreaders-work" title="Ajax et les lecteurs d'écran">inutilisable pour quiconque utilise un lecteur d&#8217;écran</a> ou un mobile.</p>

<p>Ne me faites pas dire ce que je n&#8217;ai pas dit, <em>Ajax</em> a sa place, mais il est important de savoir laquelle, et plus encore, de savoir où elle n&#8217;est pas.</p>

<h3>Conclusion</h3>

<p>Anticipez les besoins de l&#8217;utilisateur avec précaution et occupez-vous d&#8217;eux en vous faisant remarquer le moins possible. C&#8217;est la clé pour laisser une première bonne impression. Comme avec un verre d&#8217;eau, vos utilisateurs ne devraient jamais avoir à réclamer pour être servi.</p>

<h4>Crédits et remerciements</h4>

<p>Traduit avec la permission de <a href="http://www.alistapart.com/" title="A List Apart Magazine">A List Apart Magazine</a> et de l&#8217;auteur.</p>

<p><em>Malgré tout le soin apporté à cette traduction, il est possible que des erreurs préjudiciables à la pensée de l&#8217;auteur se soient glissées : je vous conseille vivement de lire l&#8217;article original. Profitez-en pour me signalez les erreurs ou les contresens, ou tout simplement les améliorations que vous jugez utiles pour coller au plus près de l&#8217;article. <del>D&#8217;ailleurs, ce billet reste en version bêta quelques temps ;)</del></em></p>

<p><em>Merci à <a href="http://absolutvero.over-blog.com/">Véro</a> pour son coup de main quand j&#8217;étais &laquo;&nbsp;Lost in translation&nbsp;&raquo; ;) </em></p>

<p><em><strong>Note du 24/05/07 : </strong>Merci à <a href="http://blog.userland.fr/">Goulven</a> pour sa relecture et les améliorations qu&#8217;il a apportées à cette traduction.</em></p>

<p>PS : d&#8217;autres traductions d&#8217;articles sur les sujets du web sont disponibles dans la catégorie <a href="http://www.css4design.com/articles/traductions">Traductions</a>.</p>

<h3 class='related_post_title'>Articles sur le même sujet</h3>

<ul class='related_post'><li><a href='http://css4design.com/framework-jquery-pour-ecrire-du-javascript-non-intrusif' title='Framework JQuery pour écrire du Javascript non-intrusif'>Framework JQuery pour écrire du Javascript non-intrusif</a></li><li><a href='http://css4design.com/css-naked-day-copaing-lyon-blog-css2-pratique-du-design-web' title='CSS Naked Day + Copaing + Lyon Blog + CSS2 Pratique&#8230;'>CSS Naked Day + Copaing + Lyon Blog + CSS2 Pratique&#8230;</a></li><li><a href='http://css4design.com/quelques-notes-sur-xhtml-et-css-au-fil-de-l-eau' title='Quelques notes sur XHTML et CSS, au fil de l&#8217;eau&#8230;'>Quelques notes sur XHTML et CSS, au fil de l&#8217;eau&#8230;</a></li><li><a href='http://css4design.com/css-toolbox' title='Trucs et astuces CSS'>Trucs et astuces CSS</a></li><li><a href='http://css4design.com/le-petit-journal-du-web-les-fruits-de-la-veille-ont-garde-leur-fraicheur' title='Le petit journal du web &#8212; Les fruits de la veille ont gardé toute leur fraicheur'>Le petit journal du web &#8212; Les fruits de la veille ont gardé toute leur fraicheur</a></li></ul>
 <p><a href="http://css4design.com/?flattrss_redirect&amp;id=83&amp;md5=18cc9cbe0d6e957ac89198fa4f231be7" title="Flattr" target="_blank"><img src="http://css4design.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://css4design.com/l-experience-utilisateur-au-centre-de-l-ergonomie-des-sites-web/feed</wfw:commentRss>
		<slash:comments>14</slash:comments>
		<atom:link rel="payment" href="http://css4design.com/?flattrss_redirect&amp;id=83&amp;md5=18cc9cbe0d6e957ac89198fa4f231be7" type="text/html" />
	</item>
		<item>
		<title>Exercice de style CSS et HTML : table vs div</title>
		<link>http://css4design.com/exercice-de-style-css-et-html-table-vs-div</link>
		<comments>http://css4design.com/exercice-de-style-css-et-html-table-vs-div#comments</comments>
		<pubDate>Thu, 26 Oct 2006 02:12:17 +0000</pubDate>
		<dc:creator>Bruno Bichet</dc:creator>
				<category><![CDATA[HTML & CSS]]></category>
		<category><![CDATA[Background]]></category>
		<category><![CDATA[Colonnes]]></category>
		<category><![CDATA[Commentaires conditionnels]]></category>
		<category><![CDATA[Content Management System]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Dotclear]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Partenaires]]></category>
		<category><![CDATA[Tableaux]]></category>
		<category><![CDATA[Tutoriels]]></category>
		<category><![CDATA[XHTML]]></category>

		<guid isPermaLink="false">http://www.css4design.com/blog-reloaded/?p=45</guid>
		<description><![CDATA[L&#8217;utilisation des CSS à la place des tableaux pour concevoir une page web fait sa place dans la boite à outils du webdesigner. Or, s&#8217;il est relativement aisé de concevoir un site «full CSS» from scratch, c&#8217;est parfois un peu plus tricky de partir d&#8217;un site existant et d&#8217;en débarrasser la table. Après la lecture de ce billet, vous saurez comment j&#8217;ai divisé par deux le poids d&#8217;une page, rendu au code HTML son teint de rose, et facilité la digestion des navigateurs&#8230; tout en conservant 99% du look d&#8217;origine&#8230; La page à transformer provient d&#8217;un template SPIP dont l&#8217;étude [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 18px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcss4design.com%2Fexercice-de-style-css-et-html-table-vs-div">
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcss4design.com%2Fexercice-de-style-css-et-html-table-vs-div&amp;source=br1o&amp;style=normal&amp;service=bit.ly&amp;service_api=R_0c1ee4b64f105d1b2672690740a77d6a&amp;b=2" height="61" width="50" />
			</a>
		</div><p><img class="il" title="sivom-nautique" src="/images/billet/sivom-nautique.png" alt="sivom-nautique" />L&#8217;utilisation des CSS à la place des tableaux pour concevoir une page web fait sa place dans la boite à outils du webdesigner. Or, s&#8217;il est relativement aisé de concevoir un site «full CSS» <em>from scratch</em>, c&#8217;est parfois un peu plus <em>tricky</em> de partir d&#8217;un site existant et d&#8217;en débarrasser la <samp>table</samp>. Après la lecture de ce billet, vous saurez comment j&#8217;ai divisé par deux le poids d&#8217;une page, rendu au code HTML son teint de rose, et facilité la digestion des navigateurs&#8230; tout en conservant 99% du <em>look</em> d&#8217;origine&#8230;<span id="more-55"></span></p>

<p>La page à transformer provient d&#8217;un template <abbr title="Sytème de publication pour l'internet">SPIP</abbr> dont l&#8217;étude du code source nous fait remonter assez loin dans le temps pour nous dévoiler les joies de la géologie <em>htmlienne</em> ;) Alain, l&#8217;éditeur du site <a hreflang="fr" href="http://www.sivom-nautique.com/">sivom-nautique</a>, m&#8217;a demandé de jeter un œil sur la page d&#8217;accueil et de moderniser le gabarit HTML.</p>

<p class="small">Note : L&#8217;intégration du gabarit <em>live</em> n&#8217;étant pas prévue dans l&#8217;immédiat, les liens vers «l&#8217;original» mènent, dans la suite de cet article, vers une copie de la page qui peut présenter des différences par rapport à celle qui est en ligne.</p>

<p>La structure de la page en question s&#8217;appuie largement sur des tableaux, tandis que des balises <samp>div</samp> encadrent les titres et d&#8217;autres portions de texte. Par exemple la colonne de gauche est composée de <samp>&lt;div class=&nbsp;&raquo;bloc&nbsp;&raquo; style=&nbsp;&raquo;width: 145px;&nbsp;&raquo;&gt;&lt;div class=&nbsp;&raquo;titre_bloc&nbsp;&raquo;&gt; Dernières images &lt;/div&gt;&lt;div style=&nbsp;&raquo;max-width: 135px;&nbsp;&raquo; class=&nbsp;&raquo;cadrimage&nbsp;&raquo;&gt;</samp>&#8230;On voit ici que les styles CSS sont utilisés en ligne avec l&#8217;attribut <samp>style</samp>, alors qu&#8217;il existe une feuille de style externe <samp>perso.css</samp>. On remarquera que le titre <q>Dernières images</q> se trouve dans un <em>container</em> <samp>div</samp> dont la sémantique se rapproche dangereusement de zéro ;)</p>

<p><em>Dis papa, racontes-moi encore les tableaux ! &raquo;</em></p>

<h3 class='related_post_title'>Articles sur le même sujet</h3>

<ul class='related_post'><li><a href='http://css4design.com/css-toolbox' title='Trucs et astuces CSS'>Trucs et astuces CSS</a></li><li><a href='http://css4design.com/quelques-notes-sur-xhtml-et-css-au-fil-de-l-eau' title='Quelques notes sur XHTML et CSS, au fil de l&#8217;eau&#8230;'>Quelques notes sur XHTML et CSS, au fil de l&#8217;eau&#8230;</a></li><li><a href='http://css4design.com/frameworks-css-reset-css-design-from-scratch' title='Frameworks CSS + Reset CSS : design from scratch'>Frameworks CSS + Reset CSS : design from scratch</a></li><li><a href='http://css4design.com/quelques-notes-sur-la-bibliotheque-javascript-ie7-de-dean-edwards' title='Quelques notes sur la bibliothèque Javascript IE7 de Dean Edwards'>Quelques notes sur la bibliothèque Javascript IE7 de Dean Edwards</a></li><li><a href='http://css4design.com/5-reset-css-a-la-loupe-pour-une-remise-a-zero-des-valeurs-par-defaut-des-navigateurs' title='5 Reset CSS à la loupe pour une remise à zéro des valeurs par défaut des navigateurs'>5 Reset CSS à la loupe pour une remise à zéro des valeurs par défaut des navigateurs</a></li></ul>
 <p><a href="http://css4design.com/?flattrss_redirect&amp;id=55&amp;md5=b3feeb66f1ba1562bd43566f537185a9" title="Flattr" target="_blank"><img src="http://css4design.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://css4design.com/exercice-de-style-css-et-html-table-vs-div/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<atom:link rel="payment" href="http://css4design.com/?flattrss_redirect&amp;id=55&amp;md5=b3feeb66f1ba1562bd43566f537185a9" type="text/html" />
	</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using disk: enhanced (User agent is rejected)

Served from: css4design.com @ 2012-02-09 04:51:01 -->
