<?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; Hover</title>
	<atom:link href="http://css4design.com/tag/hover/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>Quelques notes sur la bibliothèque Javascript IE7 de Dean Edwards</title>
		<link>http://css4design.com/quelques-notes-sur-la-bibliotheque-javascript-ie7-de-dean-edwards</link>
		<comments>http://css4design.com/quelques-notes-sur-la-bibliotheque-javascript-ie7-de-dean-edwards#comments</comments>
		<pubDate>Mon, 28 Jan 2008 12:52:20 +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[Navigateurs]]></category>
		<category><![CDATA[Background]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Hover]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[IE7]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Navigateur]]></category>
		<category><![CDATA[PNG]]></category>
		<category><![CDATA[Quelques notes]]></category>
		<category><![CDATA[Tutoriels]]></category>
		<category><![CDATA[XHTML]]></category>

		<guid isPermaLink="false">http://www.css4design.com/quelques-notes-sur-la-bibliotheque-javascript-ie7-de-dean-edwards</guid>
		<description><![CDATA[Le quotidien de l&#8217;intégrateur HTML est parfois ponctué de vide existentiel lorsqu&#8217;il s&#8217;agit de livrer des pages web compatibles avec la majorité des navigateurs dont la liste se divise grosso modo en deux groupes : ceux qui intègrent au mieux les standards recommandés par le W3C en matière de rendu CSS (Firefox, Safari, Opera et Konqueror, etc.) et les autres, principalement les versions 5 et 6 d&#8217;Internet Explorer. Si le premier groupe nous donne satisfaction, il faut bien reconnaitre que le second reste scotché près du radiateur dès qu&#8217;on parle d&#8217;overflow, de min-height, de positionnement implicite avec right, bottom ou [...]]]></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%2Fquelques-notes-sur-la-bibliotheque-javascript-ie7-de-dean-edwards">
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcss4design.com%2Fquelques-notes-sur-la-bibliotheque-javascript-ie7-de-dean-edwards&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='/wp-content/uploads/2008/01/firefox-internet-explorer.jpg' alt='Avec le script IE7, IE est copain avec Firefox' />Le quotidien de l&#8217;intégrateur HTML est parfois ponctué de vide existentiel lorsqu&#8217;il s&#8217;agit de livrer des pages web compatibles avec la majorité des navigateurs dont la liste se divise <em>grosso modo</em> en deux groupes : ceux qui intègrent au mieux les standards recommandés par le <a href="http://www.w3.org/">W3C</a> en matière de rendu CSS (<a href="http://www.mozilla-europe.org/fr/products/firefox/">Firefox</a>, <a href="http://www.apple.com/fr/safari/">Safari</a>, <a href="http://www.opera.com/">Opera</a> et <a href="http://www.konqueror.org/">Konqueror</a>, etc.) et les autres, principalement les versions 5 et 6 d&#8217;<a href="http://www.microsoft.com/france/windows/products/winfamily/ie/">Internet Explorer</a>.<span id="more-194"></span></p>

<p>Si le premier groupe nous donne satisfaction, il faut bien reconnaitre que le second reste scotché près du radiateur dès qu&#8217;on parle d&#8217;<samp>overflow</samp>, de <samp>min-height</samp>, de positionnement implicite avec <samp>right</samp>, <samp>bottom</samp> ou <samp>left</samp> ou encore d&#8217;interactivité avec <samp>:hover</samp> sur autre chose qu&#8217;une ancre <samp>a</samp>&#8230;</p>

<p>Bref, toutes ces petites choses très utiles au cours de l&#8217;intégration CSS qui manquent cruellement à Internet Explorer. Sans parler de la prise en charge inexistante de certains sélecteurs CSS qui seraient très pratique pour éviter de spécifier une classe chaque fois que l&#8217;on veut atteindre un élément en fonction de sa position dans le DOM.</p>

<p>Dans la suite de cet article nous verrons que la bibliothèque Javascript IE7 peut nous aider à travailler plus efficacement avec Internet Explorer pour faciliter la mise en œuvre de &laquo;&nbsp;composés&nbsp;&raquo; HTML / CSS <em>cross-browser</em>.</p>

<h3>Est-ce vraiment nécessaire d&#8217;avoir un affichage identique quelque soit le navigateur ?</h3>

<p>Dans le flux de production habituel, la production d&#8217;un site web passe par la conception d&#8217;une charte graphique dont il conviendra de découper et d&#8217;agencer les morceaux à coup de balises HTML et de déclarations CSS.</p>

<p>L&#8217;image servant de référence quasi-absolue, il devient très difficile de défendre auprès de son commanditaire le point de vue selon lequel la sacrosainte charte graphique puisse présenter des différences &#8212; même minimes &#8212; d&#8217;un navigateur à l&#8217;autre, fut-ce d&#8217;un pixel !</p>

<p>Pour parvenir à ses fins, l&#8217;intégrateur web dispose de deux armes : le code HTML qui &#8212; s&#8217;il suit une ligne sémantique de bon aloi &#8212; devrait garder la même structure d&#8217;un bout à l&#8217;autre du projet, et les CSS qui servent de variable d&#8217;ajustement jusqu&#8217;à la fin.</p>

<p>Reste à trouver une méthode de travail qui limite à la fois les différences de rendu et le nombre de lignes de code à produire :</p>

<ul>
<li>
Les visionnaires conseillent de faire un site conforme aux standards en prenant un navigateur comme Firefox ou Opera comme référence pour le rendu CSS, et d&#8217;utiliser au maximum les possibilités offertes par&#8230;
<ul>
<li>les sélecteurs CSS,</li>
<li>la transparence PNG en 256 niveaux,</li>
<li>le calcul des largeurs minimales et maximales,</li>
<li>etc,</li>
</ul>

&#8230;puis de faire au mieux pour les navigateurs non conformes. Cette approche, pour intéressante qu&#8217;elle soit, n&#8217;est pas possible dans un contexte commercial car seule une poignée de visiteurs verrait le site web dans toute sa splendeur, tandis que la majorité n&#8217;en aurait qu&#8217;une version dégradée, fut-ce gracieusement&#8230;
</li>
<li>
Les réalistes proposent de n&#8217;utiliser que les propriétés disponibles sur la majorité des plate-formes, en prenant pour chaque fonctionnalité, le plus petit dénominateur commun en fonction du projet.

Cette approche permet de concilier le respect des standards (même s&#8217;il ne s&#8217;agit pas des toutes dernières recommandations) avec un rendu uniforme des pages en contrepartie d&#8217;une éventuelle limitation des fantaisies graphiques souhaitées par le client.

En effet, selon la maquette, le fait de ne pas pouvoir utiliser la transparence PNG, par exemple, peut avoir une incidence sur la rigidité de la structure HTML / CSS à cause des découpes d&#8217;images : on sera enclin à réunir plusieurs partie d&#8217;image en une seule, alors qu&#8217;avec la gestion de la transparence, il est sera plus souvent possible de &laquo;&nbsp;granulariser&nbsp;&raquo; les découpes.
</li>
<li>
Une troisième approche réalistico-visionnaire que l&#8217;on retrouve parfois sous l&#8217;acronyme MOSe (Mozilla, Opera, Safari enhancement) mélange les deux premières approches en cherchant le plus petit dénominateur commun pour assurer une large compatibilité, puis en introduisant des améliorations visibles uniquement dans les navigateurs modernes.

Cette dernière approche est celle qui offre une plus grande cohérence à vos pages web dans le temps, puisque qu&#8217;en suivant les recommandations au plus près, plus le temps passe et plus le souvenir des mauvais navigateurs s&#8217;estompe.

(Ceci est à rapprocher de l&#8217;annonce de la nouvelle balise meta mise en place à l&#8217;occasion de la sortie prochaine d&#8217;IE8 qui réintroduirait dans l&#8217;écosystème du web un pis-aller dont on commençait à peine à se débarrasser : la détection du navigateur pour savoir s&#8217;il doit basculer en mode standard ou non. Voir <a href="http://www.css4design.com/navigateurs-doctype-et-standards-mais-que-fait-le-captaine-quirk">ma petite note</a> sur le sujet.)
</li>
</ul>

<p><em>IE7.js : ce n&#8217;est pas de la magie, c&#8217;est de la technologie ! &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/menu-html-et-css-portes-coulissantes-et-item-current-en-php' title='Menu HTML et CSS, sliding doors et item current en PHP'>Menu HTML et CSS, sliding doors et item current en PHP</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/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/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/frameworks-css-reset-css-design-from-scratch' title='Frameworks CSS + Reset CSS : design from scratch'>Frameworks CSS + Reset CSS : design from scratch</a></li></ul>
 <p><a href="http://css4design.com/?flattrss_redirect&amp;id=194&amp;md5=0990d9957bed6e78054308fb3d91bfb6" 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/quelques-notes-sur-la-bibliotheque-javascript-ie7-de-dean-edwards/feed</wfw:commentRss>
		<slash:comments>24</slash:comments>
		<atom:link rel="payment" href="http://css4design.com/?flattrss_redirect&amp;id=194&amp;md5=0990d9957bed6e78054308fb3d91bfb6" type="text/html" />
	</item>
		<item>
		<title>Framework JQuery pour écrire du Javascript non-intrusif</title>
		<link>http://css4design.com/framework-jquery-pour-ecrire-du-javascript-non-intrusif</link>
		<comments>http://css4design.com/framework-jquery-pour-ecrire-du-javascript-non-intrusif#comments</comments>
		<pubDate>Thu, 26 Apr 2007 13:13:39 +0000</pubDate>
		<dc:creator>Bruno Bichet</dc:creator>
				<category><![CDATA[Javascript & PHP]]></category>
		<category><![CDATA[Coins arrondis]]></category>
		<category><![CDATA[Colonnes]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[Dotclear]]></category>
		<category><![CDATA[Ergonomie]]></category>
		<category><![CDATA[Hover]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Navigateur]]></category>
		<category><![CDATA[Tutoriels]]></category>

		<guid isPermaLink="false">http://www.css4design.com/blog-reloaded/?p=81</guid>
		<description><![CDATA[Pour ajouter un semblant d&#8217;interactivité aux pages web, il fallait auparavant chercher longtemps pour dénicher le bon bout de code Javascript cross-browsers qui va bien. Aujourd&#8217;hui, c&#8217;est le choix d&#8217;une librairie1 Javascript adaptée à nos besoins qui prend du temps. Les prétendants sont nombreux et la qualité est au rendez-vous : Prototype accompagné de script.aculo.us, Mootools et le petit Moofx, Dojo, Yahoo! UI Library, jQuery avec Interface, etc. Whoa! quel chemin parcouru depuis la fin du 2ème millénaire&#8230; En suivant les conseils de blogueurs influents, j&#8217;ai installé jQuery. Cette librairie récente bénéficie d&#8217;une popularité grandissante et d&#8217;une documentation tout simplement [...]]]></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%2Fframework-jquery-pour-ecrire-du-javascript-non-intrusif">
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcss4design.com%2Fframework-jquery-pour-ecrire-du-javascript-non-intrusif&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="Tutoriels jQuery en français sur http://jquery.info/" src="/images/billet/jquery.info.png" alt="JQuery, librairie Javascript. " /> Pour ajouter un semblant d&#8217;interactivité aux pages web, il fallait auparavant chercher longtemps pour dénicher le bon <em>bout de code</em> Javascript <em>cross-browsers</em> qui va bien. Aujourd&#8217;hui, c&#8217;est le choix d&#8217;une librairie<sup><a href="/framework-jquery-pour-ecrire-du-javascript-non-intrusif#note1">1</a></sup> Javascript adaptée à nos besoins qui prend du temps. Les prétendants sont nombreux et la qualité est au rendez-vous : <a title="Prototype is a JavaScript Framework that aims to ease development of dynamic web applications." hreflang="en" href="http://www.prototypejs.org/">Prototype</a> accompagné de <a title="It's about the user interface, baby!" hreflang="en" href="http://script.aculo.us/">script.aculo.us</a>, <a title="the compact javascript framework" hreflang="en" href="http://mootools.net/">Mootools</a> et le petit <a title="a super light weight javascript effects library" hreflang="en" href="http://moofx.mad4milk.net/">Moofx</a>, <a title="The javascript framework" hreflang="en" href="http://dojotoolkit.org/">Dojo</a>, <a title="a set of utilities and controls, written in JavaScript, for building richly interactive web applications" hreflang="en" href="http://developer.yahoo.com/yui/">Yahoo! UI Library</a>, <a title="The Write Less, Do More, JavaScript Library" hreflang="en" href="http://jquery.com/">jQuery</a> avec <a title="Interface is a collection of rich interface components which utilizes the lightweight JavaScript library jQuery" hreflang="en" href="http://interface.eyecon.ro/">Interface</a>, <a title="Liste impressionnante de bibliothèques Javascript" hreflang="en" href="http://edevil.wordpress.com/2005/11/14/javascript-libraries-roundup/">etc.</a> Whoa! quel chemin parcouru depuis la fin du 2<sup>ème</sup> millénaire&#8230;<span id="more-88"></span></p>

<p>En suivant les <a title="jQuery, une bibliothèque JavaScript simple et efficace" hreflang="fr" href="http://blog.alsacreations.com/2007/01/24/329-jquery-une-bibliotheque-javascript-simple-et-efficace">conseils</a> <a title="JQuery: Lange Beiträge in Kurzform" hreflang="de" href="http://blog.tomk32.de/2007/02/03/jquery-lange-beitrage-in-kurzform/">de</a> <a title="Là-haut, sur ma colline, laï laï laï laï" hreflang="fr" href="http://caralyon.free.fr/journal/">blogueurs</a> <a title="Billets sur la programmation web avec des technologies open-source, les standards, l'accessibilité" hreflang="fr" href="http://www.sutekidane.net/new-jquery-api-browser.html">influents</a>, j&#8217;ai installé jQuery. Cette librairie récente bénéficie d&#8217;une popularité grandissante et d&#8217;une documentation tout simplement exceptionnelle qui s&#8217;enrichit d&#8217;apports francophones, avec notamment une <a title="Liste de discussion francophone jQuery-fr@rezo.net" hreflang="fr" href="http://www.jquery.info/spip.php?article35">liste de diffusion spécialisée</a> et des <a title="Découvrir et utiliser jQuery, la librairie javascript du XXIIème siècle" hreflang="fr" href="http://www.jquery.info/">tutoriels</a> avec des morceaux d&#8217;exemples dedans.</p>

<p>Le fait que <a hreflang="fr" href="http://www.dotclear.net/">Dotclear2</a> <a hreflang="fr" href="http://callmepep.org/post/2006/11/21/jQuerys-in-da-house">intègre jQuery</a>, est un gage de qualité. Par ailleurs, lorsque la version 2 de Dotclear sera mise en production, je prédis qu&#8217;on trouvera de plus en plus de ressources sur jQuery en français, comme pour l&#8217;introduction de la biblithèque dans <a hreflang="fr" href="http://www.spip.net/fr">SPIP</a> qui a donnée naissance à <a hreflang="fr" href="http://www.jquery.info/">jquery.info</a> :)</p>

<p><em>Les bases de chez base &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/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/ameliorations-cosmetiques-et-ergonomiques-sur-ce-blog' title='Améliorations cosmétiques et ergonomiques sur ce blog'>Améliorations cosmétiques et ergonomiques sur ce blog</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><li><a href='http://css4design.com/le-petit-journal-du-web-novembre-2011' title='Le petit journal du web &#8212; WordPress, développement web, etc.'>Le petit journal du web &#8212; WordPress, développement web, etc.</a></li><li><a href='http://css4design.com/fonction-javascript-contre-bug-classes-multiples-internet-explorer-6' title='IE6 &#8212; 3 fonctions Javascript pour lutter contre le bug des classes multiples'>IE6 &#8212; 3 fonctions Javascript pour lutter contre le bug des classes multiples</a></li></ul>
 <p><a href="http://css4design.com/?flattrss_redirect&amp;id=88&amp;md5=f36aded4be79b1e7076705a19fcef754" 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/framework-jquery-pour-ecrire-du-javascript-non-intrusif/feed</wfw:commentRss>
		<slash:comments>30</slash:comments>
		<atom:link rel="payment" href="http://css4design.com/?flattrss_redirect&amp;id=88&amp;md5=f36aded4be79b1e7076705a19fcef754" 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>Menu HTML et CSS, sliding doors et item current en PHP</title>
		<link>http://css4design.com/menu-html-et-css-portes-coulissantes-et-item-current-en-php</link>
		<comments>http://css4design.com/menu-html-et-css-portes-coulissantes-et-item-current-en-php#comments</comments>
		<pubDate>Wed, 07 Mar 2007 23:58:18 +0000</pubDate>
		<dc:creator>Bruno Bichet</dc:creator>
				<category><![CDATA[Intégration web]]></category>
		<category><![CDATA[Javascript & PHP]]></category>
		<category><![CDATA[Background]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Ergonomie]]></category>
		<category><![CDATA[Hover]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Menu]]></category>
		<category><![CDATA[Onglets]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Portes coulissantes]]></category>
		<category><![CDATA[Tutoriels]]></category>
		<category><![CDATA[XHTML]]></category>

		<guid isPermaLink="false">http://www.css4design.com/blog-reloaded/?p=67</guid>
		<description><![CDATA[Ce mini tutoriel propose une technique simple pour afficher un effet de survol sur un bouton en permutant une image en background associée à un lien et faire en sorte que cet effet de survol reste une fois le bouton cliqué, de manière à signaler la page en cours. Le tout avec une pincée de HTML, une bonne dose de CSS et un soupçon de PHP. Le code HTML Le menu est constitué d&#8217;une liste non-ordonnée ul où chaque lien a contenu dans l&#8217;élément li est transformé en bloc display: block afin de recevoir une image de fond qui contient [...]]]></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%2Fmenu-html-et-css-portes-coulissantes-et-item-current-en-php">
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcss4design.com%2Fmenu-html-et-css-portes-coulissantes-et-item-current-en-php&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>Ce mini tutoriel propose une technique simple pour afficher un effet de survol sur un bouton en permutant une image en <em>background</em> associée à un lien et faire en sorte que cet effet de survol reste une fois le bouton cliqué, de manière à signaler la page en cours. Le tout avec une pincée de HTML, une bonne dose de CSS et un soupçon de PHP.<span id="more-74"></span></p>

<h3>Le code HTML</h3>

<p>Le menu est constitué d&#8217;une liste non-ordonnée <samp>ul</samp> où chaque lien <samp>a</samp> contenu dans l&#8217;élément <samp>li</samp> est transformé en bloc <samp>display: block</samp> afin de recevoir une image de fond qui contient les deux états du bouton. Cette image possède une largeur de <samp>100px</samp> pour une hauteur de <samp>50px</samp>. Les vingt-cinq premiers pixels de hauteur sont réservés à l&#8217;état &laquo;&nbsp;inactif&nbsp;&raquo;, tandis que les vingt-cinq pixels restants feront le bonheur de la pseudo-classe <samp>:hover</samp>.</p>

<p>Si vous ne connaissez pas cette technique, n&#8217;ayez pas PêUR ! Vous trouverez des exemples d&#8217;images en portes coulissantes sur cet excellent <a hreflang="fr" href="http://www.peutetreunereponse.net/article-5551133.html">blog consacré au HTML et aux CSS</a> ;)</p>

<h4>Qu&#8217;y a-t-il au menu ?</h4>

<p>Il s&#8217;agit d&#8217;une simple liste qui contient les liens auxquels j&#8217;ai associé un <samp>id</samp> (ici en gras) nécessaire pour l&#8217;application des styles CSS abordés plus bas.
<pre>&lt;div id="menu"&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a <strong>id="accueil"</strong> href="index.php"&gt;Accueil&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a <strong>id="page1"</strong> href="page1.php"&gt;page1&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a <strong>id="page2"</strong> href="page2.php"&gt;page2&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;</pre></p>

<h3>La feuille de style CSS pour le menu</h3>

<p>En ce qui concerne la feuille de style pour le menu, la seule chose à retenir, c&#8217;est le décalage de <samp>-25px</samp> pour l&#8217;état <samp>:hover</samp> qui affiche la partie de l&#8217;image réservée pour le survol. C&#8217;est ce même décalage qui permettra par la suite de signaler la rubrique en cours lorsque le bouton en question sera cliqué.
<pre>/* Style général du menu */
&#35;menu {
     margin: 0;
     padding: 0;
}
&#35;menu ul {
     list-style-type: none;
     margin: 0;
     padding: 0;
 }
&#35;menu ul li {
     float: left;
 }</p>

<p>/* Style global des liens */
a#index,
a#page1,
a#page2 {
     display: block;
     width: 100px;
     height: 25px;
}</p>

<p>/* Style particulier pour le background des liens
avec pour chacun : l'état inactif et actif */
a#index {
     background: url(images/bt_index.png) 0 0 no-repeat;
}
a#index<strong>:hover</strong> {
     background: url(images/bt_index.png) 0 <strong>-25px</strong> no-repeat;
}
a#page1 {
     background: url(images/bt_page1.png) 0 0 no-repeat;
}
a#page1:hover {
     background: url(images/bt_page1.png) 0 -25px no-repeat;
}
a#page2 {
     background: url(images/bt_page2.png) 0 0 no-repeat;
}
a#page2:hover {
     background: url(images/bt_page2 .png) 0 -25px no-repeat;
}</pre></p>

<h3>La petite fonction php qui va bien</h3>

<p><pre>&lt;?php
function currentPage($strPage) {
  if (strstr($_SERVER['PHP_SELF'], $strPage)) {
     echo '<strong>class="current_</strong>' . $strPage. '" ';
  } else {
     echo '';
  }
}
?&gt;</pre>
Cette fonction recherche la première occurence de la chaîne de caractère <samp>$strPage</samp> dans l&#8217;URL courante grâce à <samp>strstr()</samp>.</p>

<p>Ensuite la fonction <samp>echo()</samp> affiche une classe CSS composée de la concaténation du terme <em>current_</em> et de la chaîne <em>$strPage</em>. Si le terme <samp>$strPage</samp> n&#8217;existe pas dans l&#8217;URL, la fonction renvoit une chaine vide&#8230;</p>

<h4>Le menu HTML avec l&#8217;appel de la fonction</h4>

<p><pre>&lt;div id="menu"&gt;
     &lt;ul&gt;
         &lt;li&gt;&lt;a <strong>&lt;?php currentPage('index') ?&gt;</strong>id="accueil" href="index.php" &gt;Accueil&lt;/a&gt;&lt;/li&gt;
         &lt;li&gt;&lt;a <strong>&lt;?php currentPage('page1') ?&gt;</strong>id="page1" href="page1.php" &gt;page1&lt;/a&gt;&lt;/li&gt;
         &lt;li&gt;&lt;a <strong>&lt;?php currentPage('page2') ?&gt;</strong>id="page2" href="page2.php" &gt;page2&lt;/a&gt;&lt;/li&gt;
     &lt;/ul&gt;
&lt;/div&gt;</pre></p>

<h4>Le menu HTML après un clic sur le deuxième lien</h4>

<p><pre>&lt;div id="menu"&gt;
     &lt;ul&gt;
         &lt;li&gt;&lt;a id="accueil" href="index.php"&gt;Accueil&lt;/a&gt;&lt;/li&gt;
         &lt;li&gt;&lt;a <strong>class="current_page1"</strong> id="page1" href="page1.php" &gt;page1&lt;/a&gt;&lt;/li&gt;
         &lt;li&gt;&lt;a id="page2" href="page2.php"&gt;page2&lt;/a&gt;&lt;/li&gt;
     &lt;/ul&gt;
&lt;/div&gt;</pre></p>

<h3>La touche finale avec les liens <em>current</em></h3>

<p><pre>/* Styles particuliers issus de la fonction PHP pour les liens en cours */
&#35;menu a.current_index {
     background: url(images/bt_accueil.png) 0 -25px no-repeat;
}
&#35;menu a.<strong>current_page1</strong> {
     background: url(images/bt_page1.png) 0 -25px no-repeat;
}
&#35;menu a.current_page2 {
     background: url(images/bt_page2.png) 0 -25px no-repeat;
}</pre></p>

<h3>Conclusion</h3>

<p>Pas de quoi faire le kakou, c&#8217;est certain ;) mais cette petite fonction PHP remplit bien son office. J&#8217;avoue que cette petite merveille de <samp>strstr()</samp> y est pour beaucoup. Après <a hreflang="fr" href="http://fr.php.net/manual/fr/">quelques recherches sur PHP</a>, je me rends compte que ce langage possède un nombre extraordinaire de fonctions pour traiter les chaines de caractères qu&#8217;on dirait du <em>perl</em> !</p>

<p>Si de votre côté vous avez des petites fonctions PHP ou Javascript liées aux CSS qui prennent la poussière au fond d&#8217;un dossier, n&#8217;hésitez pas à leur donner une seconde vie en en faisant profiter les autres :)</p>

<p><em>Stay tuned and mind the gap!</em></p>

<p><span class="small"><strong>Note du 10/11/2007 :</strong> Afin d&#8217;éviter d&#8217;éventuels soucis de cascade CSS dues à la priorité des ID sur les classes, j&#8217;ai modifié les styles comme suit : <samp>#menu ul li a#index {&#8230;}</samp> est remplacé par <samp>a#index {&#8230;}</samp> (ce qui est largement suffisant) et je laisse <samp>#menu a.current_index {&#8230;}</samp> de manière à ce que le poids de la classe <samp>.current_index {&#8230;}</samp> soit plus important que <samp>a#index {&#8230;}</samp>.</span></p>

<p><span class="small">Voici un<a href="http://www.css4design.com/exemples/menu-current-php/"> exemple très moche mais fonctionnel</a> pour illustrer ce tutoriel. <a href="http://www.css4design.com/exemples/menu-current-php/menu-current-php.zip">Téléchargez le fichier zip</a> de l&#8217;exemple.</span></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-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/menu-a-onglet-avec-javascript-et-css' title='Menu à onglets avec javascript et css'>Menu à onglets avec javascript et css</a></li><li><a href='http://css4design.com/utiliser-les-portes-coulissantes-pour-realiser-un-effet-de-zoom-au-passage-de-la-souris' title='CSS et portes coulissantes pour un effet de zoom :hover'>CSS et portes coulissantes pour un effet de zoom :hover</a></li><li><a href='http://css4design.com/ameliorations-cosmetiques-et-ergonomiques-sur-ce-blog' title='Améliorations cosmétiques et ergonomiques sur ce blog'>Améliorations cosmétiques et ergonomiques sur ce blog</a></li></ul>
 <p><a href="http://css4design.com/?flattrss_redirect&amp;id=74&amp;md5=3718d6a5d701ef06dbee326b24178e66" 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/menu-html-et-css-portes-coulissantes-et-item-current-en-php/feed</wfw:commentRss>
		<slash:comments>26</slash:comments>
		<atom:link rel="payment" href="http://css4design.com/?flattrss_redirect&amp;id=74&amp;md5=3718d6a5d701ef06dbee326b24178e66" type="text/html" />
	</item>
		<item>
		<title>CSS et portes coulissantes pour un effet de zoom :hover</title>
		<link>http://css4design.com/utiliser-les-portes-coulissantes-pour-realiser-un-effet-de-zoom-au-passage-de-la-souris</link>
		<comments>http://css4design.com/utiliser-les-portes-coulissantes-pour-realiser-un-effet-de-zoom-au-passage-de-la-souris#comments</comments>
		<pubDate>Tue, 04 Jul 2006 11:46:31 +0000</pubDate>
		<dc:creator>Bruno Bichet</dc:creator>
				<category><![CDATA[HTML & CSS]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Hover]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Portes coulissantes]]></category>
		<category><![CDATA[Tutoriels]]></category>
		<category><![CDATA[XHTML]]></category>

		<guid isPermaLink="false">http://www.css4design.com/blog-reloaded/?p=24</guid>
		<description><![CDATA[Réaliser un effet de zoom sur une image nécessite généralement deux versions d&#8217;un même visuel : la première à 100%, et la deuxième à taille réduite. Les événements onmouseover et onmouseout pilotent traditionnellement le changement de source de l&#8217;image pour gérer la permutation. Image survolée avec deux images En Javascript &#60;img src="img1.gif" border="0" width="30" height="20" onmouseover="this.src='img2.gif'" onmouseout="this.src="img1.gif"&#62; En CSS Une deuxième solution consiste à utiliser CSS pour piloter cette permutation à l&#8217;aide de la pseudo-classe :hover appliquée une ancre de préférence pour pallier les insuffisances d&#8217;Internet Explorer en matière de rendu CSS. On obtient quelque chose comme : a.img1, a.img2 [...]]]></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%2Futiliser-les-portes-coulissantes-pour-realiser-un-effet-de-zoom-au-passage-de-la-souris">
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcss4design.com%2Futiliser-les-portes-coulissantes-pour-realiser-un-effet-de-zoom-au-passage-de-la-souris&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="effet de zoom rollover en une seule image" src="/images/billet/zoom.jpg" alt="zoom.jpg" /> Réaliser un effet de zoom sur une image nécessite généralement deux versions d&#8217;un même visuel : la première à 100%, et la deuxième à taille réduite. Les événements <em>onmouseover</em> et <em>onmouseout</em> pilotent traditionnellement le changement de source de l&#8217;image pour gérer la permutation.</p>

<p><span id="more-32"></span></p>

<h3>Image survolée avec deux images</h3>

<h4>En Javascript</h4>

<p><pre> &lt;img src="img1.gif" border="0" width="30" height="20" onmouseover="this.src='img2.gif'" onmouseout="this.src="img1.gif"&gt;</pre></p>

<h4>En CSS</h4>

<p>Une deuxième solution consiste à utiliser CSS pour piloter cette permutation à l&#8217;aide de la <em>pseudo-classe :hover</em> appliquée une ancre de préférence pour pallier les insuffisances d&#8217;<em>Internet Explorer</em> en matière de rendu CSS. On obtient quelque chose comme :
<pre>
a.img1, a.img2 {
    display: block;
    width: 30px;
    height: 20px;
}
a.img1 { background: url(img1Out.gif) no-repeat; }
a.img1:hover { background: url(img1Over.gif) no-repeat; }
</pre>
Dans la page, nous aurions ceci : <code>&lt;a class="img1" title="Description de mon image"&gt;&lt;/a&gt;</code></p>

<p>Ce lien vide peut gêner. Pour en faire un plat utile, je vous propose d&#8217;utiliser une technique inspirée de <a href="http://stopdesign.com/articles/replace_text/">Fahrner Image Replacement</a> (FIR). Il s&#8217;agit simplement d&#8217;indenter le texte pour le faire disparaitre de la fenêtre du navigateur :</p>

<p><pre>
a.img1, a.img2 {
    text-indent: -9999;
}</p>

<p>&lt;a class="img1" title="Description de mon image"&gt;Texte du lien&lt;/a&gt;
</pre></p>

<p>Ainsi, pas de lien vide et un peu de grain à moudre pour les moteurs de recherche ;)</p>

<h5><em>Preload</em> des images avec Javascript</h5>

<p>Ces deux premiers exemples simples à mettre en œuvre souffrent d&#8217;un léger défaut : les images destinées au survol de la souris mettent parfois du temps pour apparaitre. Pour régler ce problème, il suffit de déclarer vos images via Javascript pour les charger dans le <em>cache</em> du navigateur :
<pre> &lt;script type="text/javascript"&gt;
&lt;!--
    img1         = new Image(30,20)
    img1.src    = "img1.gif"
    img2         = new Image(30,20)
    img2.src    = "img2.gif"
 //--&gt;
&lt;/script&gt;</pre></p>

<h3>Avec CSS et une seule image</h3>

<p>Voyons maintenant comment faire avec une seule image et quelques déclarations dans une feuille de style CSS pour obtenir le même résultat.</p>

<p>J&#8217;ai repris le principe qui consiste à utiliser une image contenant les deux états d&#8217;un visuel. On l&#8217;utilise souvent pour faire les états <code>on/off</code> d&#8217;un bouton. Ici, la vignette réduite laissera la place à l&#8217;image agrandie au passage de la souris.</p>

<p class="ex"><a class="thickbox" href="/exemples/zoom/pix/foot2_boy.jpg"><img src="/exemples/zoom/pix/foot2_boy.jpg" alt="Exemple d'image en porte coulissantes" /></a></p>

<p>Précisez ensuite pour l&#8217;état <code>:hover</code> la position adéquate : <code>top left</code> ou <code>bottom right</code> selon la construction de l&#8217;image.</p>

<p><pre>
.foot a {
    background: url(pix/foot_boy.jpg) no-repeat top left;
}
.foot a:hover {
    background: url(pix/foot_boy.jpg) no-repeat bottom right;
}
</pre></p>

<h4>Des défauts ?</h4>

<p>Cette technique nécessite de nombreuses manipulations sous <em>Photoshop</em> pour préparer les images (comptez 30 secondes par image env.), mais Benoît me souffle dans l&#8217;oreillette qu&#8217;avec la librairie php <em>GD</em> on peut automatiser la procédure&#8230;</p>

<h4>La démo !</h4>

<p>Comme toujours, j&#8217;ai privilégié la démo au détriment du blabla. Affichez-donc la source de <a hreflang="fr" href="http://www.css4design.com/exemples/zoom/">effet de zoom en css</a> pour en savoir plus ;)</p>

<p>Vous trouverez des explications complémentaires concernant <em>Javascript</em> sur le site <a hreflang="fr" href="http://www.aidejavascript.com/article32.html">aidejavascript</a>.</p>

<p class="dl"><a href="http://www.css4design.com/exemples/zoom/zoom.zip">Télécharger le fichier .html ou .php et les images</a></p>

<h4 class="listLink">Linkographie. Portes coulissantes :</h4>

<dl class="linkArticle"> <dt><strong>D&#8217;autres applications pour les portes coulissantes</strong></dt> <dt> <a hreflang="fr" href="http://pompage.net/pompe/portescoulissantes/">http://pompage.net/pompe/portescoulissantes/</a> </dt> <dd> Excellente traduction d&#8217;un article de <em>Douglas Bowman</em> par <em>Samuel Latchman</em> sur la technique des portes coulissantes appliquées à la navigation par onglets </dd> <dt> <a hreflang="fr" href="http://www.ultra-fluide.com/ressources/css/menu-onglets.htm">http://www.ultra-fluide.com/ressources/css/menu-onglets.htm</a> </dt> <dd> Si vous préférez une autre approche du même article, voici la traduction de <em>Xavier Boully</em> </dd> <dt> <a hreflang="en" href="http://www.alistapart.com/articles/slidingdoors/">http://www.alistapart.com/articles/slidingdoors/</a> </dt> <dd> Et pour quelques octets de plus, voici l&#8217;original ! </dd> </dl>

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

<ul class='related_post'><li><a href='http://css4design.com/menu-html-et-css-portes-coulissantes-et-item-current-en-php' title='Menu HTML et CSS, sliding doors et item current en PHP'>Menu HTML et CSS, sliding doors et item current en PHP</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/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/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/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></ul>
 <p><a href="http://css4design.com/?flattrss_redirect&amp;id=32&amp;md5=7761cb2432de6cf9b08ba47ed54e4983" 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/utiliser-les-portes-coulissantes-pour-realiser-un-effet-de-zoom-au-passage-de-la-souris/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<atom:link rel="payment" href="http://css4design.com/?flattrss_redirect&amp;id=32&amp;md5=7761cb2432de6cf9b08ba47ed54e4983" type="text/html" />
	</item>
		<item>
		<title>Trucs et astuces CSS</title>
		<link>http://css4design.com/css-toolbox</link>
		<comments>http://css4design.com/css-toolbox#comments</comments>
		<pubDate>Wed, 21 Jun 2006 00:30:03 +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[Design élastique]]></category>
		<category><![CDATA[Formulaire]]></category>
		<category><![CDATA[GIF]]></category>
		<category><![CDATA[Graphisme]]></category>
		<category><![CDATA[Hacks CSS]]></category>
		<category><![CDATA[Header]]></category>
		<category><![CDATA[Hover]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[Menu]]></category>
		<category><![CDATA[Motifs]]></category>
		<category><![CDATA[Onglets]]></category>
		<category><![CDATA[Opacité]]></category>
		<category><![CDATA[Partenaires]]></category>
		<category><![CDATA[PNG]]></category>
		<category><![CDATA[Standards web]]></category>
		<category><![CDATA[Tableaux]]></category>
		<category><![CDATA[Template]]></category>
		<category><![CDATA[Transparent]]></category>
		<category><![CDATA[Tutoriels]]></category>
		<category><![CDATA[XHTML]]></category>

		<guid isPermaLink="false">http://www.css4design.com/blog-reloaded/?p=27</guid>
		<description><![CDATA[Cette page regroupe des trucs &#38; astuces CSS que j&#8217;ajoute régulièrement : bookmarkez, blogmarker, favorisez, bref faites tourner&#8230; Si vous cherchez plutôt des exemples de design CSS plus complets, les billets présents dans cette page consacrée au design web avec CSS devrait vous intéresser ;) Si vous avez vous aussi quelques astuces CSS à partager, n&#8217;hésitez pas à le faire dans les commentaires. La feuille blanche Raccourci pratique pour les bordures CSS Transparence Commentaires conditionnels d&#8217;IE vs hacks CSS Barre de défilement et décalage d&#8217;une page centrée Centrer un bloc horizontalement et verticalement dans la fenêtre du navigateur Centrer un [...]]]></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%2Fcss-toolbox">
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcss4design.com%2Fcss-toolbox&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>Cette page regroupe des trucs &amp; astuces CSS que j&#8217;ajoute régulièrement : bookmarkez, blogmarker, favorisez, bref faites tourner&#8230; Si vous cherchez plutôt des exemples de design CSS plus complets, les billets présents dans cette page consacrée au <a hreflang="fr" href="/articles/integration-web/xhtml-css">design web avec CSS</a> devrait vous intéresser ;)</p>

<p>Si vous avez vous aussi quelques astuces CSS à partager, n&#8217;hésitez pas à le faire dans les commentaires.</p>

<ul>
    <li> <a title="La feuille blanche" href="/css-toolbox#feuille">La feuille blanche</a></li>
    <li> <a title="Raccourci pratique pour les bordures CSS" href="/css-toolbox#bordure">Raccourci pratique pour les bordures CSS</a></li>
    <li> <a title="Transparence" href="/css-toolbox#transparence">Transparence</a></li>
    <li> <a title="Commentaires conditionnels d'IE vs hacks CSS" href="/css-toolbox#commentaires">Commentaires conditionnels d&#8217;IE vs hacks CSS</a></li>
    <li> <a title="Barre de défilement et décalage d'une page centrée" href="/css-toolbox#defilement">Barre de défilement et décalage d&#8217;une page centrée</a></li>
    <li> <a title="Centrer un bloc horizontalement et verticalement dans la fenêtre du navigateur" href="/css-toolbox#centrer1">Centrer un bloc horizontalement et verticalement dans la fenêtre du navigateur</a></li>
    <li> <a title="Centrer un bloc horizontalement dans la fenêtre du navigateur" href="/css-toolbox#centrer2">Centrer un bloc horizontalement dans la fenêtre du navigateur</a></li>
    <li> <a title="Modifier les caractéristiques des liens avec LoVe HAte" href="/css-toolbox#liens">Modifier les caractéristiques des liens avec LoVe HAte</a></li>
</ul>

<p><span id="more-26"></span></p>

<h3 id="feuille">La feuille blanche</h3>

<p>Document XHTML pour partir de bonnes bases :</p>

<pre><code>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
    &lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"&gt;
        &lt;head&gt;
            &lt;meta http-equiv="Content-Type" content="text/html" charset="utf-8" /&gt;
            &lt;meta http-equiv="Content-Language" content="fr" /&gt;
            &lt;title&gt;Un titre explicite contenant les mots-clés de la page&lt;/title&gt;
            &lt;link rel="icon" type="image/png" href="favicon.png" /&gt;
            &lt;script type="text/javascript" src="/js/jquery.js"&gt;&lt;/script&gt;
            &lt;link media="screen" rel="stylesheet" type="text/css" href="/style.css" /&gt;
            &lt;!--[if lt IE 7]&gt;
                &lt;script type="text/javascript" src="/js/ie7/IE7.js"&gt;&lt;/script&gt;
            &lt;![endif]--&gt;
            &lt;!--[if IE]&gt;
             &lt;link rel="stylesheet" type="text/css" href="/ie.css" /&gt;
            &lt;![endif]--&gt;
        &lt;/head&gt;
        &lt;body&gt;
       &lt;/body&gt;
&lt;/html&gt;
</code></pre>

<p>Consultez cet article d&#8217;<a href="http://openweb.eu.org/">OpenWeb</a> pour mieux connaitre les <a href="http://openweb.eu.org/articles/differentes_dtd/">différentes DTD</a> et les <a href="http://openweb.eu.org/articles/html_au_xhtml/">gabarits XHTML</a> prêt à l&#8217;emploi.</p>

<p>J&#8217;ajoute souvent un <a hreflang="fr" href="/5-reset-css-a-la-loupe-pour-une-remise-a-zero-des-valeurs-par-defaut-des-navigateurs">Reset CSS</a> au choix pour débuter la feuille de style :</p>

<ul>
    <li><a hreflang="fr" href="/5-reset-css-a-la-loupe-pour-une-remise-a-zero-des-valeurs-par-defaut-des-navigateurs#margin-padding-zero">Remise des marges à zéro avec le sélecteur universel</a></li>
    <li><a hreflang="fr" href="/5-reset-css-a-la-loupe-pour-une-remise-a-zero-des-valeurs-par-defaut-des-navigateurs#reset-css-reloaded">Reset CSS Reloaded</a></li>
    <li><a hreflang="fr" href="/5-reset-css-a-la-loupe-pour-une-remise-a-zero-des-valeurs-par-defaut-des-navigateurs#css-initial">INITIAL</a></li>
    <li><a hreflang="fr" href="/5-reset-css-a-la-loupe-pour-une-remise-a-zero-des-valeurs-par-defaut-des-navigateurs#yui-reset-css">YUI Reset CSS</a></li>
    <li><a hreflang="fr" href="/5-reset-css-a-la-loupe-pour-une-remise-a-zero-des-valeurs-par-defaut-des-navigateurs#undo-html-css">undohtml.css</a></li>
</ul>

<p>Lire l&#8217;indispensable article de <a hreflang="fr" href="http://www.blog-and-blues.org/weblog/2004/05/24/214-font-size-em">Blog &amp; Blues</a> pour plus d&#8217;informations sur la diminution de la taille par défaut de la police et l&#8217;utilisation de l&#8217;unité de mesure <samp>em</samp></p>

<p>Quelques informations supplémentaires au sujet de la remise à zéro des <em>margin</em> et <em>padding</em> pour tous les éléments sur <a hreflang="en" href="http://leftjustified.net/journal/2004/10/19/global-ws-reset/">leftjustified.net.</a></p>

<p>On a toujours besoin d&#8217;un peu d&#8217;interactivité sur nos pages web. La bibliothèque Javascript jQuery est idéal : empreinte légère, et facilité d&#8217;utilisation, plugins nombreux, communauté réactive. Lire cette <a href="http://www.css4design.com/framework-jquery-pour-ecrire-du-javascript-non-intrusif">introduction à jQuery</a> et cette <a href="http://www.css4design.com/1000-ressources-pour-wordpress-et-le-developpement-web#jquery">liste de 240 plugins pour jQuery</a>.</p>

<h3 id="bordure">Raccourci pratique pour les bordures CSS</h3>

<p>Ces deux propriétés CSS permettent de gérer l&#8217;épaisseur, le style, la couleur d&#8217;une bordure ainsi que les côtés où elle apparait.</p>

<pre><code>.bordure {
    border: 1px solid #DF001A;
    border-width: 0 0 3px 0;
}
</code></pre>

<p>Cet exemple affiche une bordure de 3 pixels au bas de l&#8217;élément dont la classe est <samp>bordure</samp>. La valeur de <samp>1px</samp> de la première déclaration CSS est surchargée par la valeur de la deuxième ligne.</p>

<p>Pour afficher une bordure de 1 pixel en haut et 3 pixels à gauche, il suffit de modifier la deuxième ligne comme ceci : <samp>border-width: 1px 0 0 3px;</samp></p>

<h3 id="transparence">Transparence</h3>

<pre><code>div.transparence {
    filter:alpha(opacity=50);
    -moz-opacity:  0.5;
    -khtml-opacity: 0.5;
    opacity: 0.5;
}
</code></pre>

<p>La gestion de l&#8217;opacité est un chemin semé d&#8217;embûches. Heureusement, il existe des chemins de traverse pour pallier le manque de support des propriété standards par les navigateurs.</p>

<p>J&#8217;ai trouvé les 3 premières lignes chez <a hreflang="fr" href="http://www.ac-graphic.net/13-la-transparence-css.php5">ac-graphic.net</a> et la quatrième chez <a hreflang="fr" href="http://www.babylon-design.com/site/index.php/2005/01/01/55-transparence-opacity-images-navigateurs">babylon-design. </a>La première ligne est destinée à IE, la deuxième à Firefox, la troisième est un standard en CSS3 ! et la dernière à Konqueror.</p>

<p>P.S. : Pour une compatibilité maximale, il est conseillé de mettre les 4 lignes ensemble.</p>

<h3 id="commentaires">Commentaires conditionnels d&#8217;IE vs hacks CSS</h3>

<p><pre>&lt;!--[if IE]&gt;
    &lt;style type="text/css"&gt;
        @import "/style/pour_ie.css";
    &lt;/style&gt;
&lt;![endif]--&gt;</pre>
Lire le <a hreflang="fr" href="/commentaires-conditionnels-d-internet-explorer-vs-hacks-css">billet consacré aux commentaires conditionnels</a>.</p>

<h3 id="defilement">Barre de défilement et décalage d&#8217;une page centrée</h3>

<p><pre>html {
    overflow-y: scroll;
    overflow: -moz-scrollbars-vertical;
}</pre>
La deuxième ligne est une propriété spécifique à Mozilla. Solution trouvée sur <a hreflang="fr" href="http://web.covertprestige.info/test/09-barre-defilement-et-decalage-page-centree-1.html">http://web.covertprestige.info/test/&#8230;</a></p>

<h3 id="centrer1">Centrer un bloc horizontalement et verticalement dans la fenêtre du navigateur</h3>

<p><pre>#page {
    position: absolute;
    left: 50%;
    top: 50%;
    width: 30em;
    height: 30em;
    margin: -15em 0 0 -15em;
    border: 1px solid #000;
    text-align: left;
    background-color: #990;
}</pre></p>

<h3 id="centrer2">Centrer un bloc horizontalement dans la fenêtre du navigateur</h3>

<p><pre>#page {
    position: relative; /* optionel mais utile par la suite <em>/
    width: 80%;
    margin: 0 auto;
    text-align: left; /</em> optionel : reliquat d'un bug sous ie5.5 */
}</pre></p>

<h3 id="liens">Modifier les caractéristiques des liens avec LoVe F HAte</h3>

<p><pre>a          { color: #CAB3A5; }
a:link     { color: #CAB3A5; }
a:visited  { color: #CAB3A5; }
a:focus    { color: #CAB3A5; }
a:hover    { color: #DB9D41; }
a:active   { color: #FFF; }</pre></p>

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

<ul class='related_post'><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/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/menu-html-et-css-portes-coulissantes-et-item-current-en-php' title='Menu HTML et CSS, sliding doors et item current en PHP'>Menu HTML et CSS, sliding doors et item current en PHP</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/ie6-gerer-la-transparence-du-format-png-24-bits' title='IE6 &#8212; Gérer la transparence du format PNG 24 bits'>IE6 &#8212; Gérer la transparence du format PNG 24 bits</a></li></ul>
 <p><a href="http://css4design.com/?flattrss_redirect&amp;id=26&amp;md5=d9df97fc74750538ca563247d156dbfb" 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/css-toolbox/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<atom:link rel="payment" href="http://css4design.com/?flattrss_redirect&amp;id=26&amp;md5=d9df97fc74750538ca563247d156dbfb" 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-08 11:11:39 -->
