<?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>Clearideaz &#187; Javascript</title>
	<atom:link href="http://clearideaz.com/tag/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://clearideaz.com</link>
	<description>webdesigner et intégrateur XHTML / CSS</description>
	<lastBuildDate>Mon, 19 Jul 2010 08:19:56 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>jQuery.eventManager, un plugin de gestion d&#8217;évènements</title>
		<link>http://clearideaz.com/2010/07/jquery-eventmanager-un-plugin-de-gestion-devenements/</link>
		<comments>http://clearideaz.com/2010/07/jquery-eventmanager-un-plugin-de-gestion-devenements/#comments</comments>
		<pubDate>Fri, 16 Jul 2010 08:06:07 +0000</pubDate>
		<dc:creator>Olivier G.</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[delegate]]></category>
		<category><![CDATA[évènements]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[plugins]]></category>

		<guid isPermaLink="false">http://clearideaz.com/?p=400</guid>
		<description><![CDATA[La méthode $.delegate de jQuery fonctionne sur le principe de la délégation d&#8217;évènements. La délégation permet notamment de pouvoir ajouter de nouveaux éléments dans le DOM dynamiquement (via Ajax par exemple) sans pour autant leur ré-attacher d&#8217;évènements préalablement défini. Elle assure également de meilleures performances.
Sur la plupart des projets, je m&#8217;amusais à déléguer des évènements [...]]]></description>
			<content:encoded><![CDATA[<p>La méthode <code>$.delegate</code> de jQuery fonctionne sur le principe de la délégation d&#8217;évènements. La délégation permet notamment de pouvoir ajouter de nouveaux éléments dans le DOM dynamiquement (via Ajax par exemple) sans pour autant leur ré-attacher d&#8217;évènements préalablement défini. Elle assure également de meilleures performances.</p>
<p>Sur la plupart des projets, je m&#8217;amusais à déléguer des évènements à des objets globaux. C&#8217;est ensuite au moment de l&#8217;appel à l&#8217;évènement que je filtrais le type d&#8217;action à effectuer. C&#8217;est un exercice plutôt fastidieux&#8230;</p>
<p>J&#8217;ai donc décidé de créer un plugin jQuery permettant de faciliter la gestion d&#8217;évènement via delegate. Il suffit pour cela de créer un objet recensant les objets globaux, les évènements attachés, le filtre, puis l&#8217;action a effectuer.</p>

<p>Voici un exemple d&#8217;objet :</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> eventList <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>
 <span style="color: #3366CC;">'div'</span> <span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span>
   <span style="color: #3366CC;">'mouseover'</span> <span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span>
     <span style="color: #3366CC;">'.sidebar'</span> <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span>elem<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
       $<span style="color: #009900;">&#40;</span>elem<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">addClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'over'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
     <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
     <span style="color: #003366; font-weight: bold;">default</span> <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>elem<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
       $<span style="color: #009900;">&#40;</span>elem<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'background-color'</span><span style="color: #339933;">:</span><span style="color: #3366CC;">'red'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
     <span style="color: #009900;">&#125;</span>
   <span style="color: #009900;">&#125;</span>
   <span style="color: #3366CC;">'mouseout'</span> <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      $<span style="color: #009900;">&#40;</span>elem<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'background-color'</span><span style="color: #339933;">:</span><span style="color: #3366CC;">'transparent'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span>
 <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>En clair, je délègue des évènements à un ou plusieurs objets de type <code>div</code>. Je lui attribue un évènement de type <code>mouseover</code>. Par défaut, au passage de la souris sur cette <code>div</code>, le fond de cet objet sera rouge. Si la div possède la classe <code>.sidebar</code>, alors je lui ajoute une classe <code>.over</code>. Enfin, lorsque je quitte un objet de type <code>div</code>, je lui affecte un fond transparent.</p>
<p>Une fois cet objet créé, il ne reste plus qu&#8217;à l&#8217;insérer dans un appel au plugin eventManager :</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#wrapper'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">eventManager</span><span style="color: #009900;">&#40;</span>eventList<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Dans cet appel, seules les div placées dans un objet ayant pour ID #wrapper seront affectés par les évènements à déléguer.</p>
<p>Je vous propose d&#8217;accèder à la démo pour vous faire une idée des possibilités offertes. Vous pourrez ensuite, si vous le souhaitez, télécharger le plugin sur <a href="http://github.com/clearideaz/jQuery.eventManager">mon espace Github</a>.</p>
<p><em>Édité le 19 juillet : <strong>Nouveauté sur le plugin,</strong> le code a été nettoyé, on peut se passer de &#8216;default&#8217; lorsqu&#8217;il n&#8217;y a pas de sélecteur filtre. Autre nouveauté, on peut désormais utiliser &laquo;&nbsp;this&nbsp;&raquo; au lieu de &laquo;&nbsp;elem&nbsp;&raquo; dans les fonctions de l&#8217;objet contenant les évènements. Merci beaucoup à <a title="Sunfox.org, le site qui te donne des tâches de rousseur" href="http://sunfox.org">Sunny</a> pour son aide !</em></p>
<ul class="demo">
<li><a title="Visualiser la démo du plugin jQuery.eventManager" href="http://clearideaz.com/demo/jQuery.eventManager/">Accéder à la démonstration</a></li>
<li><a title="Télecharger le plugin jQuery.eventManager sur Github" href="http://github.com/clearideaz/jQuery.eventManager/downloads">Télécharger le plugin</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://clearideaz.com/2010/07/jquery-eventmanager-un-plugin-de-gestion-devenements/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Détecter le support HTML5 du navigateur via Jquery</title>
		<link>http://clearideaz.com/2010/05/detecter-le-support-html5-du-navigateur-via-jquery/</link>
		<comments>http://clearideaz.com/2010/05/detecter-le-support-html5-du-navigateur-via-jquery/#comments</comments>
		<pubDate>Thu, 20 May 2010 18:05:35 +0000</pubDate>
		<dc:creator>Olivier G.</dc:creator>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[support]]></category>

		<guid isPermaLink="false">http://clearideaz.com/?p=313</guid>
		<description><![CDATA[Le site Dive into HTML5 a publié récemment un article détaillant les différentes méthodes de détection de fonctionnalités HTML5 sur les navigateurs via Javascript.
Utilisateur régulier de jQuery, j&#8217;ai décidé de porter ces scripts au sein de la fonction $.support.
Voici la liste des tests possibles : audio, audioMp3, audioVorbis, audioWav, audioAAC, canvas, canvasTxt, command, datalist, details, [...]]]></description>
			<content:encoded><![CDATA[<p>Le site <a title="Dive into HTML5 par Mark Pilgrim" href="http://diveintohtml5.org/everything.html" lang="en">Dive into HTML5</a> a publié récemment un article détaillant les différentes méthodes de détection de fonctionnalités HTML5 sur les navigateurs via Javascript.</p>
<p>Utilisateur régulier de <a href="http://jquery.com" title="Site officiel de la librairie Javascript jQuery" lang="en">jQuery</a>, j&#8217;ai décidé de porter ces scripts au sein de la fonction <a href="http://api.jquery.com/jQuery.support/" title="Documentation de la fonction support de jQuery" lang="en">$.support</a>.</p>
<p>Voici la liste des tests possibles : audio, audioMp3, audioVorbis, audioWav, audioAAC, canvas, canvasTxt, command, datalist, details, device, formConstraints, iframeSandbox, iframeSrcDoc, autofocus, placeholder, color, email, number, range, search, tel, url, date, time, datetime, datetime-local, month, week, meter, output, progress, time, video, videoCaptions, videoPoster, videoWebM, videoH264, videoTheora, contentEditable, dragAndDrop, fileAPI, geoLocation, history, localStorage, microdata, applicationCache, eventSource, sessionStorage, svg, svgInHtml, webSimpleDb, webSocket, openDatabase, webWorkers, undo.</p>
<p>Vous trouverez une démonstration des possibilités offertes par le script sur cette <a href="http://clearideaz.com/demo/jquerySupportHTML5/" title="HTML5 detection with jQuery Support" lang="en">page de test du support HTML5 de votre navigateur</a>.</p>
<p>Si vous souhaitez par exemple tester le support du SVG, insérez la ligne suivante au sein de votre fichier Javascript :</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$.<span style="color: #660066;">support</span>.<span style="color: #660066;">svg</span> <span style="color: #006600; font-style: italic;">// retourne false sur IE et true sur les versions récentes de Firefox</span></pre></div></div>

<p>Le script est léger : 8ko en version source et 3ko en version minifiée.</p>
<p>Vous pouvez télécharger l&#8217;extend jQuery sur <a href="http://github.com/clearideaz/jquerySupportHTML5" title="Espace Github de Clearideaz" lang="en">mon espace Github</a> </p>
<p>N&#8217;hésitez pas à me signaler le moindre bug.</p>
<p>Édit : correction d&#8217;un lien</p>
]]></content:encoded>
			<wfw:commentRss>http://clearideaz.com/2010/05/detecter-le-support-html5-du-navigateur-via-jquery/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Du Parallax avec jQuery et CSS</title>
		<link>http://clearideaz.com/2008/06/du-parallax-avec-jquery-et-css/</link>
		<comments>http://clearideaz.com/2008/06/du-parallax-avec-jquery-et-css/#comments</comments>
		<pubDate>Fri, 06 Jun 2008 09:12:00 +0000</pubDate>
		<dc:creator>Olivier G.</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[parallax]]></category>

		<guid isPermaLink="false">http://www.clearideaz.com/?p=15</guid>
		<description><![CDATA[<p>Le <a href="http://fr.wikipedia.org/wiki/D%C3%A9filement" title="Voir la définition de Scrolling Parallax sur Wikipédia">scrolling parallax</a> est une technique qui consiste a créer un pseudo-effet de 3D sur un environnement en 2D. Si vous avez déjà pu jouer aux premières versions de Sonic The Hedgehog, vous comprendrez de quoi je parle. Je me suis amusé, encore une fois avec JQuery, a créer un effet parallax sur une page d’accueil d’un site existant.</p> <p>J’ai repris la page d’accueil de <a href="http://www.silverbackapp.com" title="Se rendre sur le site SilverBack.com">SilverBackApp.com</a> qui utilise déjà un effet Parallax au redimensionnement du navigateur. La technique très subtile consiste a placer les différentes couches de fonds avec des background-position en pourcentage. En jouant justement sur ces valeurs relatives, on peut de ce fait créer un effet intéressant lorsque l’utilisateur redimensionne sa fenêtre.</p> <p>En partant de cette base, j’ai décidé de rajouter une couche Javascript. Le but est de changer la position du fond en fonction de la position de l’image. Pour cela, on va juste récupérer les positions du pointeur et utiliser ces valeurs pour déterminer le positionnement (en pixel cette fois) des différentes images.</p>]]></description>
			<content:encoded><![CDATA[<p>Le <a title="Voir la définition de Scrolling Parallax sur Wikipédia" href="http://fr.wikipedia.org/wiki/D%C3%A9filement">scrolling parallax</a> est une technique qui consiste a créer un pseudo-effet de 3D sur un environnement en 2D. Si vous avez déjà pu jouer aux premières versions de Sonic The Hedgehog, vous comprendrez de quoi je parle. Je me suis amusé, encore une fois avec JQuery, a créer un effet parallax sur une page d’accueil d’un site existant.</p>
<p>J’ai repris la page d’accueil de <a title="Se rendre sur le site SilverBack.com" href="http://www.silverbackapp.com">SilverBackApp.com</a> qui utilise déjà un effet Parallax au redimensionnement du navigateur. La technique très subtile consiste a placer les différentes couches de fonds avec des background-position en pourcentage. En jouant justement sur ces valeurs relatives, on peut de ce fait créer un effet intéressant lorsque l’utilisateur redimensionne sa fenêtre.</p>
<p>En partant de cette base, j’ai décidé de rajouter une couche Javascript. Le but est de changer la position du fond en fonction de la position de l’image. Pour cela, on va juste récupérer les positions du pointeur et utiliser ces valeurs pour déterminer le positionnement (en pixel cette fois) des différentes images.</p>

<p>On obtiendra avec jQuery ce type de code pour la div #frontvines</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;body&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">mousemove</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>event<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
   $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#frontvines&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span> 
      backgroundPosition<span style="color: #339933;">:</span> <span style="color: #009900;">&#40;</span>event.<span style="color: #660066;">clientX</span> <span style="color: #339933;">*</span> <span style="color: #CC0000;">1.1</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">'px 0px'</span>
   <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Sur la première ligne, on cherche l’évènement qui indique que l’utilisateur bouge sa souris sur la page. Dans la partie fonction, on place en paramètre la position du curseur pour la réutiliser ensuite pour modifier les propriétés de styles associées à la balise comportant l&#8217;id #frontvines. Pour observer le résultat, rendez-vous sur la page dédié à cette démonstration <a title="Accéder à la première démonstration" href="http://clearideaz.com/demo/05062008/">disponible ici</a>.</p>
<p>Pour aller plus loin, je me suis amusé, dans une <a title="Accéder à la seconde démonstration" href="http://clearideaz.com/demo/06062008/">seconde démonstration</a>, à réutiliser une photo de paysage pour y introduire du parallax. Le principe reste le même, je vous laisse le soin de télécharger le script sur <a title="Accéder à la seconde démonstration" href="http://clearideaz.com/demo/06062008/">la page de la seconde démonstration</a>, vous y trouverez la manière de procéder dans les commentaires du fichier Javascript.</p>
<h3>Quelques liens en rapport avec Parallax :</h3>
<h4>Effet parallax à l’aide de CSS ou de Javascript</h4>
<ul>
<li><a title="Se rendre sur le site Dumago.net" href="http://dumago.net/">Le futur site de service Dumago.net (CSS)</a></li>
<li><a title="Visiter le site Umaghetzeggen.nl" href="http://www.umaghetzeggen.nl/">Effet parallax aux mouvements de la souris sur Umaghetzeggen.nl (Javascript)</a></li>
<li><a title="Accéder au site Dromaeo.com" href="http://dromaeo.com/">Le site des tests de performances Javascript Dromaeo (CSS)</a></li>
<li><a title="Voir la demo sur le site Dvessel.com" href="http://www.dvessel.com/">Démo expérimentale de footer avec effet de vagues (CSS)</a></li>
</ul>
<h4>Utilisation de parallax sous Flash</h4>
<ul>
<li><a title="Se rendre sur le site ff0000.com" href="http://www.ff0000.com/">Une démo assez bluffante en Flash</a></li>
<li><a title="Se rendre sur le site EffectsCod.com" href="http://www.effectscode.com/ImageEffects/DepthField/XML/">Effet de rotation rendu grâce à parallax</a></li>
<li><a title="Aller sur le site de Aviary" href="http://a.viary.com/">Un header construit en parallax</a></li>
<li><a title="Visiter le site Freedent White" href="http://www.freedentwhite.com/index.php/page/fr">Le site Freedent White</a></li>
</ul>
<h4>Tutorial</h4>
<ul>
<li><a title="Voir le tutos à propos de parallax via CSS " href="http://www.sitepoint.com/blogs/2008/01/18/in-the-lab-doing-strange-things-to-css-backgrounds/">Un tutos sur Sitepoint.com sur les effet parallax en CSS</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://clearideaz.com/2008/06/du-parallax-avec-jquery-et-css/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Une carte Vélib grâce à l&#8217;API Google</title>
		<link>http://clearideaz.com/2008/05/carte-velib-grace-a-lapi-google-et-jquery/</link>
		<comments>http://clearideaz.com/2008/05/carte-velib-grace-a-lapi-google-et-jquery/#comments</comments>
		<pubDate>Fri, 02 May 2008 15:55:00 +0000</pubDate>
		<dc:creator>Olivier G.</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[map]]></category>
		<category><![CDATA[vélib]]></category>

		<guid isPermaLink="false">http://www.clearideaz.com/?p=14</guid>
		<description><![CDATA[Si vous habitez Paris ou si vous ne faites qu&#8217;y travailler (comme moi), vous avez surement déjà eu l&#8217;occasion d&#8217;utiliser le service Vélib. Le site officiel ou d&#8217;autres sites indépendants comme Roulib.fr proposent des cartes permettant d&#8217;afficher le nombre de vélos disponibles ou encore le nombre d&#8217;emplacements restants. Je vous propose de faire la même [...]]]></description>
			<content:encoded><![CDATA[<p>Si vous habitez Paris ou si vous ne faites qu&#8217;y travailler (comme moi), vous avez surement déjà eu l&#8217;occasion d&#8217;utiliser le service Vélib. Le <a href="http://www.velib.paris.fr/" title="Se rendre sur le site officiel du service Vélib">site officiel</a> ou d&#8217;autres sites indépendants comme <a href="http://www.roulib.fr" title="Visiter le site Roulib.fr">Roulib.fr</a> proposent des cartes permettant d&#8217;afficher le nombre de vélos disponibles ou encore le nombre d&#8217;emplacements restants. Je vous propose de faire la même chose grâce à l&#8217;<a href="http://code.google.com/apis/maps/documentation/" title="Voir la page de documentation concernant l'API de Google Maps">API de Google Map</a>.</p>
<p>Le principe est simple. On génère en local un fichier XML à partir du fichier distant présent sur le site officiel Vélib via <abbr title="Hypertext Preprocessor">PHP</abbr>. Une fois cette étape effectuée, on a plus qu&#8217;à charger le fichier xml à l&#8217;aide de <a href="http://fr.wikipedia.org/wiki/JavaScript" title="Se rendre sur la page Wikipédia concernant la définition du Javascript">Javascript.</a></p>
<p><a href="http://clearideaz.com/demo/04062008/" title="Se rendre sur la page de démo du script de la carte Vélib">La page de démonstration du script</a> utilise le framework <a href="http://www.jquery.com" title="Se rendre sur le site officiel de jQuery">jQuery</a> mais vous pourrez trouver dans l&#8217;<a href="http://clearideaz.com/demo/04062008/gmap-velib.zip" title="télécharger directement l'archive depuis cette page">archive</a> une version en javascript pur et une autre version associée à l&#8217;autre framework <a href="http://www.prototypejs.org/" title="Visiter le site officiel du framework Prototype">Prototype</a> (Merci d&#8217;ailleurs à <a href="http://www.sunfox.org/" title="Voir le fabuleux blog de mon escroc de collègue Sunny">Sunny</a> pour son aide <img src='http://clearideaz.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  )</p>
<p>Vous trouverez toutes les informations nécessaires dans les commentaires des différents fichiers javascript. N&#8217;oubliez pas d&#8217;aller <a href="http://code.google.com/apis/maps/signup.html" title="Se rendre sur le site Google Map pour obtenir une clé API">générer une clé API Google Map</a> sur le site dédié.</p>
<p>Pour pouvoir accéder à la carte et télécharger le script associé, rendez-vous sur <a href="http://clearideaz.com/demo/04062008/" title="Se rendre sur la page de démo du script de la carte Vélib">la page de démo du script de carte Vélib</a>. L&#8217;archive contient le script php pour générer les fichiers xml de la carte Vélib et des informations associées à chaque borne, les fichiers Javascript correspondants, la feuille de style <abbr title="Cascading Style Sheet">CSS</abbr> et les images requises.</p>
]]></content:encoded>
			<wfw:commentRss>http://clearideaz.com/2008/05/carte-velib-grace-a-lapi-google-et-jquery/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Les hacks c&#8217;est pas bien !</title>
		<link>http://clearideaz.com/2008/04/les-hacks-cest-pas-bien/</link>
		<comments>http://clearideaz.com/2008/04/les-hacks-cest-pas-bien/#comments</comments>
		<pubDate>Thu, 24 Apr 2008 13:35:00 +0000</pubDate>
		<dc:creator>Olivier G.</dc:creator>
				<category><![CDATA[HTML / CSS]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[htc]]></category>
		<category><![CDATA[ie]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[navigateurs]]></category>

		<guid isPermaLink="false">http://www.clearideaz.com/?p=27</guid>
		<description><![CDATA[<p>La tentation de recourir à des hacks est grande lorsque l'on commence à se lancer dans l'intégration d'un site web. Lorsque l’on s'aperçoit que la page développée s'affiche différemment d'un navigateur à l'autre, on se dit très souvent que c'est le navigateur (Internet Explorer pour ne pas le citer) qui interprète le code ou la feuille de style n'importe comment.</p> <p>Cette réaction est plus ou moins justifiée. Nous sommes tous conscients des lacunes du navigateur Microsoft et plus particulièrement des versions antérieures à la 7. Toutefois, ce n'est pas une raison pour charger sa feuille de style de propriétés invalides en prenant comme bouc émissaire le navigateur de Monsieur Redmond. </p> <p>Une feuille de style doit, au même titre que le document <abbr title="eXtensible HyperText Markup Language">XHTML</abbr>, passer l'épreuve du validateur <abbr title="World Wide Web Consortium">W3C</abbr>. Ce n'est pas en insérant des "_width:" ou encore de "%margin:" dans votre <abbr title="Cascading Style Sheet">CSS</abbr> que vous pourrez vous vantez de faire un site au codage propre. J'irais même jusqu'à dire que <strong>les hacks sont bons pour les fainéants la plupart du temps</strong>.</p> <p>Dernièrement, j'avais fais remarquer à un intégrateur remonté contre <abbr title="Internet Explorer">IE</abbr> que notre boulot perdrait de l'intérêt sans ces soucis de compatibilité. Même si j'affirmais cela ironiquement, je trouve passionnant de découvrir pourquoi telle propriété ne fonctionne pas de la même manière d'un navigateur à l'autre et surtout, comment y remédier.</p>]]></description>
			<content:encoded><![CDATA[<p>La tentation de recourir à des hacks est grande lorsque l&#8217;on commence à se lancer dans l&#8217;intégration d&#8217;un site web. Lorsque l’on s&#8217;aperçoit que la page développée s&#8217;affiche différemment d&#8217;un navigateur à l&#8217;autre, on se dit très souvent que c&#8217;est le navigateur (Internet Explorer pour ne pas le citer) qui interprète le code ou la feuille de style n&#8217;importe comment.</p>
<p>Cette réaction est plus ou moins justifiée. Nous sommes tous conscients des lacunes du navigateur Microsoft et plus particulièrement des versions antérieures à la 7. Toutefois, ce n&#8217;est pas une raison pour charger sa feuille de style de propriétés invalides en prenant comme bouc émissaire le navigateur de Monsieur Redmond. </p>
<p>Une feuille de style doit, au même titre que le document <abbr title="eXtensible HyperText Markup Language">XHTML</abbr>, passer l&#8217;épreuve du validateur <abbr title="World Wide Web Consortium">W3C</abbr>. Ce n&#8217;est pas en insérant des &laquo;&nbsp;_width:&nbsp;&raquo; ou encore de &laquo;&nbsp;%margin:&nbsp;&raquo; dans votre <abbr title="Cascading Style Sheet">CSS</abbr> que vous pourrez vous vantez de faire un site au codage propre. J&#8217;irais même jusqu&#8217;à dire que <strong>les hacks sont bons pour les fainéants la plupart du temps</strong>.</p>
<p>Dernièrement, j&#8217;avais fais remarquer à un intégrateur remonté contre <abbr title="Internet Explorer">IE</abbr> que notre boulot perdrait de l&#8217;intérêt sans ces soucis de compatibilité. Même si j&#8217;affirmais cela ironiquement, je trouve passionnant de découvrir pourquoi telle propriété ne fonctionne pas de la même manière d&#8217;un navigateur à l&#8217;autre et surtout, comment y remédier.</p>

<h3>Les hacks que l&#8217;on pourrait éviter</h3>
<h4>Les images PNG</h4>
<p>Prenons l&#8217;exemple du <abbr title="Portable Network Graphics">PNG</abbr>. Beaucoup de webmasters s&#8217;extasient devant les possibilités de ce format d&#8217;image. L&#8217;utilisation des <a href="http://blog.lablonde.fr/billets/25-la-couche-alpha-des-png-sous-internet-explorer.html" title="Voir un article traitant des possibilités et des caractéristiques du format PNG">différentes couches alpha de transparence</a> offre effectivement de nombreuses possibilités. Seulement voilà, ce format n&#8217;est pas pris en charge par les anciennes versions d’IE. Le hacker en herbe viendra me faire remarquer que l&#8217;on peut remédier à ce problème en utilisant la propriété CSS DX.Transform dans la feuille CSS ou dans un <a href="http://www.zeguigui.com/weblog/archives/2005/01/les_behaviors_m.php" title="Les behaviors, mais qu'est-ce donc ?">fichier .htc</a>. Cette utilisation pose plusieurs soucis :</p>
<ul>
<li>La feuille de style n&#8217;est pas valide W3C.</li>
<li>La feuille CSS n&#8217;est pas censée intégrer ce genre de propriétés ou faire appel à des fichiers chargeant du JavaScript.</li>
<li>Ce hack fait appel au moteur <a href="http://fr.wikipedia.org/wiki/DirectX" title="Voir l'article dédié à Direct X sur Wikipédia">Direct X</a> et selon la version, une simple image peut faire bugger le système d&#8217;exploitation, ce qui est, vous en conviendrez, un peu gênant&#8230;</li>
</ul>
<p>Si vous souhaitez vraiment utilisez le PNG sur Internet Explorer, appelez plutôt un fichier JavaScript pur pour arriver à vos fins.</p>
<p>Parfois, un simple découpage de l&#8217;illustration au format <abbr title="Graphics Interchange Format">GIF</abbr> ou même une image JPEG placée intelligemment peut offrir au visiteur le même effet. <strong>Le PNG n&#8217;est pas une fin en soit</strong>.</p>
<h4>Les pseudo-classes</h4>
<p>Concernant les pseudo-classes, évitez également de passer par un fichier .htc dans votre feuille de style pour intégrer le :hover sur une balise div ou un :target sur une tout autre balise. Encore une fois, si cette utilisation est requise, passez par de pures fonctions JavaScripts.</p>
<h4>Un problème de taille !</h4>
<p>Arrêtons de nous prendre le chou avec les débats philosophiques sur le <a href="http://www.tatane.info/index.php/le-hack-model-box-css" title="Un exemple d'article décrivant un hack de model box">model box</a> ou autre double-margin. Ces problèmes peuvent être aisément contournés. De plus, vous le verrez par vous même, quand on commence avec des hacks de placement ou d&#8217;ajustement de dimension, on en finit plus. <strong>Les hacks attirent les hacks</strong> <img src='http://clearideaz.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Comme vous pourrez le constater sur l&#8217;<a href="http://www.weblogr.fr/demo/23042008/test.html" title="Voir la démonstration sur la gestion des positionnements, padding et margin en CSS">exemple suivant</a>, les soucis de padding ou de margin peuvent parfois être causés par une simple propriété qui n’a pas lieu d&#8217;être. Pour être certain de contrôler pleinement votre mise en page, efforcez-vous de tester plusieurs méthodes de positionnement sans passer par les hacks et testez le résultat sur différents navigateurs. Il y aura toujours une méthode qui fasse plaisir à tout le monde <img src='http://clearideaz.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h3>Pour résumer</h3>
<p>Avant de se décider à utiliser un hack, il faut d&#8217;abord se questionner sur les autres alternatives valables. <strong>Dénigrer IE sans chercher plus loin n&#8217;amènera rien de bon</strong>. N&#8217;intégrez pas de fonctions JavaScripts dans votre feuille de style par le biais de fichiers .htc mais préférez un fichier JavaScript pur. N&#8217;abusez pas du format PNG et ne l&#8217;utilisez qu&#8217;en dernier recours. Privilégiez l&#8217;utilisation de &laquo;&nbsp;!important&nbsp;&raquo; aux notations bidons telles que &laquo;&nbsp;_width:&nbsp;&raquo; ou encore &laquo;&nbsp;%padding:&nbsp;&raquo;. Les hacks CSS c&#8217;est taboo, on en viendra tous à bout.</p>
<div id="encadre-article">
<h3>Quelques précisions s&#8217;imposent</h3>
<p>Au regard de cet article, on peut se demander ce qui est à ranger dans la catégorie des hacks ou non. Si je voulais résumer, j&#8217;engloberais les éléments qui ne valident pas la feuille CSS mais voici une petite liste détaillées :</p>
<ul>
<li>Dans un premier temps, j&#8217;inclus l&#8217;ensemble des propriétés mal orthographiées : &laquo;&nbsp;_width:&nbsp;&raquo;, &laquo;&nbsp;%padding:&nbsp;&raquo; par exemple.</li>
<li>Les inclusions de fichiers .htc pour faire appel à du javascript par exemple.</li>
<li>Les propriétés CSS non reconnues par le W3C tel que &laquo;&nbsp;opacity&nbsp;&raquo;.</li>
<li>Les propriétés en double pour une même classe ou ID (deux propriétés de taille pour un même bloc).</li>
<li>Les appels à Direct X dans la feuille de style.</li>
</ul>
<p>Et voici ce que je ne considère pas comme des hacks :</p>
<ul>
<li>Les sélecteurs non reconnus par tous les navigateurs mais valides W3C tel que &laquo;&nbsp;div &gt; p&nbsp;&raquo; (logique non?).</li>
<li>Les propriétés non reconnues par tous les navigateurs mais valides W3C. &laquo;&nbsp;min-height&nbsp;&raquo; en est un exemple.</li>
<li>Les feuilles de style appelées par des <a href="http://forum.alsacreations.com/faq/faq-53-Qu039est-ce-que-les-commentaires-conditionnels-.html" title="Qu'est-ce que les commentaires conditionnels?">commentaires conditionnels</a> (même si on s&#8217;en passerait bien&#8230;)</li>
</ul></div>
]]></content:encoded>
			<wfw:commentRss>http://clearideaz.com/2008/04/les-hacks-cest-pas-bien/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Viva jQuery et mon livre de chevet !</title>
		<link>http://clearideaz.com/2008/02/viva-jquery-et-mon-livre-de-chevet/</link>
		<comments>http://clearideaz.com/2008/02/viva-jquery-et-mon-livre-de-chevet/#comments</comments>
		<pubDate>Wed, 20 Feb 2008 08:56:00 +0000</pubDate>
		<dc:creator>Olivier G.</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[effets]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[plugins]]></category>

		<guid isPermaLink="false">http://www.clearideaz.com/?p=13</guid>
		<description><![CDATA[Plus je m&#8217;intéresse à jQuery et plus je me rend compte des possibilités étendues de ce framework javascript. Je suis parfois bluffé par les effets visuels qu&#8217;il peut générer. Sur Dragon Interactive, on a presque l&#8217;impression de visiter un site à base d&#8217;animations flash mais il n&#8217;en est rien. C&#8217;est l&#8217;utilisation judicieuse des fonctions fadeIn() [...]]]></description>
			<content:encoded><![CDATA[<p>Plus je m&#8217;intéresse à jQuery et plus je me rend compte des possibilités étendues de ce framework javascript. Je suis parfois bluffé par les effets visuels qu&#8217;il peut générer. Sur <a href="http://dragoninteractive.com" title="Se rendre sur le site de Dragon Interactive">Dragon Interactive</a>, on a presque l&#8217;impression de visiter un site à base d&#8217;animations flash mais il n&#8217;en est rien. C&#8217;est l&#8217;utilisation judicieuse des fonctions fadeIn() et fadeOut() qui donne cette sensation. <a title="Voir la liste officielle de plugins jQuery" href="http://plugins.jquery.com/">Bon nombre de plugins</a> viennent ajouter à ce framework d&#8217;autres fonctionnalités de la plus intéressante à la plus farfelue. Je suis récemment tombé sur <a title="Se rendre sur la page dédiée au plugin jCycle" href="http://www.malsup.com/jquery/cycle/">le plugin jCycle</a> qui permet des effets de transitions d&#8217;images assez intéressants.</p>
<p>De part l&#8217;intéret grandissant pour cette librairie javascript, j&#8217;ai décidé de casser ma tirelire pour m&#8217;acheter le livre <em>Premières applications Web 2.0 avec Ajax et PHP</em> de Jean-Marie Defrance et paru aux éditions Eyrolles. Ce n&#8217;est pas un ouvrage qui traite véritablement de la bibliothèque jQuery mais il consacre tout de même deux grands chapitres qui permettent d&#8217;apprivoiser la bête. A lire donc de toute urgence <img src='http://clearideaz.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><strong>Pour en savoir plus :</strong></p>
<ul>
<li><a href="http://www.jquery.com" title="Se rendre sur le site web du framework jQuery">Le site officiel de jQuery</a></li>
<li><a href="http://visualjquery.com/" title="Se rendre sur le site web Visual jQuery">Présentation des fonctions essentielles de jQuery</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://clearideaz.com/2008/02/viva-jquery-et-mon-livre-de-chevet/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Améliorer Internet Explorer (toutes versions)</title>
		<link>http://clearideaz.com/2007/12/ameliorer-internet-explorer-toutes-versions/</link>
		<comments>http://clearideaz.com/2007/12/ameliorer-internet-explorer-toutes-versions/#comments</comments>
		<pubDate>Fri, 14 Dec 2007 09:02:00 +0000</pubDate>
		<dc:creator>Olivier G.</dc:creator>
				<category><![CDATA[Astuces]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[dean]]></category>
		<category><![CDATA[edwards]]></category>
		<category><![CDATA[ie]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://www.clearideaz.com/?p=5</guid>
		<description><![CDATA[Dean Edwards est un génie. Internet Explorer a toujours été réputé pour être un navigateur très en retard sur les autres. Un grand nombre de sélecteurs et de propriétés CSS ne fonctionnent tout simplement pas sous les versions inférieures à IE7. C&#8217;est là que Dean Edwards entre en jeu. Ce programmeur a conçu une véritable [...]]]></description>
			<content:encoded><![CDATA[<p>Dean Edwards est un génie. Internet Explorer a toujours été réputé pour être un navigateur très en retard sur les autres. Un grand nombre de sélecteurs et de propriétés <abbr title="Cascading Style Sheets">CSS</abbr> ne fonctionnent tout simplement pas sous les versions inférieures à IE7. C&#8217;est là que Dean Edwards entre en jeu. Ce programmeur a conçu une véritable librairie permettant d&#8217;émuler par le biais de fonctions javascript, les fonctionnalités <abbr title="Cascading Style Sheets">CSS</abbr>&nbsp;2 absentes de IE. A l&#8217;origine, son objectif était de contrer la pratique des hacks <abbr title="Cascading Style Sheets">CSS</abbr> qui rendent les feuilles de style invalides. Mais il ne s&#8217;est pas arrêté là en implémentant certains sélecteur <abbr title="Cascading Style Sheets">CSS</abbr>&nbsp;3 dans le navigateur certifié Windaube. La dernière version sortie date de août 2005 donc je n&#8217;apporte pas une nouveauté, mais ce genre de trésor peut en intéresser un très grand nombre <img src='http://clearideaz.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Vous pouvez télécharger l&#8217;ensemble des fichiers sur <a hreflang="en" title="Se rendre sur le site internet personnel de Dean Edwards" href="http://dean.edwards.name/ie7/">son site internet personnel</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://clearideaz.com/2007/12/ameliorer-internet-explorer-toutes-versions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
