<?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>HTML &#8211; Les intégristes</title>
	<atom:link href="/tag/html/feed/" rel="self" type="application/rss+xml" />
	<link>/</link>
	<description></description>
	<lastBuildDate>Tue, 09 Feb 2021 15:28:58 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.0</generator>
	<item>
		<title>Comment utiliser les listes&#160;de définitions&#160;?</title>
		<link>/2009/12/28/comment-utiliser-les-listesde-definitions/</link>
					<comments>/2009/12/28/comment-utiliser-les-listesde-definitions/#comments</comments>
		
		<dc:creator><![CDATA[Eric Le Bihan]]></dc:creator>
		<pubDate>Mon, 28 Dec 2009 14:54:14 +0000</pubDate>
				<category><![CDATA[Front-end]]></category>
		<category><![CDATA[HTML]]></category>
		<guid isPermaLink="false">/?p=776</guid>

					<description><![CDATA[Je n&#8217;ai pas la prétention de répondre à cette question, mais j&#8217;aimerai vous faire partager mon interrogation. Si je relis les recommandations HTML 4.01 du W3C (Definition lists: the DL, DT, and DD elements), voilà ce qui est dit à ce sujet :
Les listes de définitions ne varient que légèrement par rapport à d&#8217;autres types de listes, ce type de liste est composé de deux parties : un terme et une description.
L&#8217;utilisation la plus appropriée est donc celle où un mot ou une expression : &#60;dt&#62; serait défini par une courte explication : &#60;dd&#62;, comme dans un dictionnaire&#160;[&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Je n&rsquo;ai pas la prétention de répondre à cette question, mais j&rsquo;aimerai vous faire partager mon interrogation. Si je relis les recommandations <abbr title="Hypertext Markup Language">HTML</abbr> 4.01 du <abbr "world wide web consortium">W3C</abbr> (<a href="http://www.w3.org/TR/html401/struct/lists.html#h-10.3">Definition lists: the DL, DT, and DD elements</a>), voilà ce qui est dit à ce sujet :</p>
<blockquote><p>Les listes de définitions ne varient que légèrement par rapport à d&rsquo;autres types de listes, ce type de liste est composé de deux parties : un terme et une description.</p></blockquote>
<p>L&rsquo;utilisation la plus appropriée est donc celle où un mot ou une expression : <code>&lt;dt&gt;</code> serait défini par une courte explication : <code>&lt;dd&gt;</code>, comme dans un dictionnaire ou un glossaire, par exemple.</p>
<p>Mais si nous allons plus loin, les recommandations donnent également l&rsquo;exemple d&rsquo;un dialogue ou le personnage serait défini par la balise <code>&lt;dt&gt;</code> et son dialogue par la balise : <code>&lt;dd&gt;</code>, mais uniquement dans les recommandations de html 4.01 et xhtml 1.0. Dans html 5, les listes de définitions ne doivent pas servir à mettre en forme un dialogue, puisqu&rsquo;initialement <a href="http://html5doctor.com/a-little-more-conversation-with-dialog/">la balise : <code>&lt;dialog&gt;</code> devait servir à cet effet</a>. Cette balise ayant été retirée en septembre dernier sans être (encore ?) remplacée. On reste dans l&rsquo;expectative&#8230;</p>
<p>Concrètement, quel usage est-il fait de la liste de définition dans les sites que nous consultons tous les jours ? Est-ce qu&rsquo;une liste de diffusion peut être utilisée pour un menu de navigation ? A mon sens non, puisqu&rsquo;il existe les listes ordonnées : <code>&lt;ol&gt;</code> et non ordonnées : <code>&lt;ul&gt;</code> qui me semblent plus appropriées. Est-ce qu&rsquo;une liste de diffusion peut remplacer un titre : <code>&lt;dt&gt; = &lt;h1&gt;</code> et un paragraphe : <code>&lt;dd&gt; = &lt;p&gt;</code> ? Réponse : non, mais c&rsquo;est souvent la solution que nous avons trouvé pour répondre aux demandes des services chargés du référencement qui souhaitaient structurer les pages des sites avec des balises : <code>&lt;h1&gt; à &lt;h6&gt;</code> mais éviter certaines parties annexes dans les plans de document (mise en avant de promotions, services, etc.)</p>
<p>La seule utilisation parfaitement adaptée que j&rsquo;ai pu trouver pour ces balises (hormis les exemples donnés par le W3C) concerne la structuration d&rsquo;une <abbr title="Foire aux questions">FAQ</abbr>. <code>&lt;dt&gt;</code> pour la question et <code>&lt;dd&gt;</code> pour la réponse.</p>
<p>Est-ce qu&rsquo;il ne faudrait pas créer un autre type de liste qui conviendrait mieux pour mettre en relation deux éléments comme acteur/personnage, auteur/titre de livre, action/résultat, etc. ? Ce qui, selon moi, n&rsquo;est manifestement pas le rôle de la liste de définition telle qu&rsquo;elle a été « pensée » initialement.</p>
]]></content:encoded>
					
					<wfw:commentRss>/2009/12/28/comment-utiliser-les-listesde-definitions/feed/</wfw:commentRss>
			<slash:comments>20</slash:comments>
		
		
			</item>
		<item>
		<title>Concevoir un formulaire HTML qui tient la route</title>
		<link>/2009/02/03/concevoir-un-formulaire-html-qui-tient-la-route/</link>
					<comments>/2009/02/03/concevoir-un-formulaire-html-qui-tient-la-route/#comments</comments>
		
		<dc:creator><![CDATA[Eric Le Bihan]]></dc:creator>
		<pubDate>Tue, 03 Feb 2009 18:00:23 +0000</pubDate>
				<category><![CDATA[Front-end]]></category>
		<category><![CDATA[HTML]]></category>
		<guid isPermaLink="false">/?p=474</guid>

					<description><![CDATA[Il ne vous est jamais arrivé de remplir un long formulaire pour, par exemple, commander un voyage ou un vol et ne pouvoir le valider parce que le clic sur le bouton de validation du formulaire ne produit aucun résultat ? C&#8217;est ce qui m&#8217;est arrivé il y a quelques semaines de celà&#8230; C&#8217;est vrai que je suis passé de PC à Mac et que je fais maintenant partie d&#8217;une minorité. L&#8217;accessibilité prends dans ce cas tout son sens. J&#8217;ai eu beau essayer avec Safari, Firefox, Opéra, Google Chrome, rien n&#8217;y a fait. Bref si je n&#8217;avais pas eu un&#160;[&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Il ne vous est jamais arrivé de remplir un long formulaire pour, par exemple, commander un voyage ou un vol et ne pouvoir le valider parce que le clic sur le bouton de validation du formulaire ne produit aucun résultat ? C&rsquo;est ce qui m&rsquo;est arrivé il y a quelques semaines de celà&#8230; C&rsquo;est vrai que je suis passé de PC à Mac et que je fais maintenant partie d&rsquo;une minorité. L&rsquo;accessibilité prends dans ce cas tout son sens. J&rsquo;ai eu beau essayer avec Safari, Firefox, Opéra, Google Chrome, rien n&rsquo;y a fait. Bref si je n&rsquo;avais pas eu un PC pas loin pour passer ma commande avec Internet Explorer cette compagnie aérienne aurait perdu un client.</p>
<p>Pourquoi ce formulaire ne fonctionnait pas , Tout bonnement parce que les personnes qui sont auteurs du code ont préféré se servir de javascript pour la validation des données plutôt que d&rsquo;opter pour la solution html du bouton de type submit (<em>button ou input</em>) . Le script utilisé ne prenant visiblement en charge que certains navigateurs dans un seul environnement (windows), il est impossible pour l&rsquo;internaute de valider les données qu&rsquo;il a entré minitieusement dans les 45 champs du formulaire.</p>
<p>Le problème ne se pose pas uniquement lorsqu&rsquo;on travaille avec os Mac ou Linux comme environnement, il se pose également pour quiconque se sert d&rsquo;un autre navigateur qu&rsquo;Internet Explorer pour commander, par exemple, sur un site de voyages qui a le monopole du transport ferroviaire&#8230;</p>
<p>Comment faire pour ne pas exclure des clients potentiels de votre site ?</p>
<p>Construisons notre formulaire en plusieurs étapes :</p>
<p> <br />
<strong>1° étape :  la construction du formulaire en html</strong></p>
<p>La balise <strong>&lt;form&gt;</strong> :  elle définit un formulaire dans une page web.</p>
<p>Ses attributs :</p>
<p><strong>* method</strong></p>
<p>&#8211;  method= »post », indique que les données sont stockées dans le corps de la requête,  le contenu du formulaire est envoyé au serveur en tant que bloc de données pour y être traité.</p>
<p>&#8211; method= »get », indique que les données sont codées dans l&rsquo;url,  le contenu du formulaire est juxtaposé à l&rsquo;adresse URL</p>
<p><strong>* action</strong></p>
<p>&#8211; action= »url », action indique l&rsquo;adresse d&rsquo;envoi</p>
<p><strong>* enctype</strong></p>
<p>Ce paramètre ne peut être utilisé qu&rsquo;accompagné par la méthode post. Il définit le type d&rsquo;encodage des données, par exemple :</p>
<p>&#8211; enctype= »application/x-www-form-urlencoded »,  encode le contenu du formulaire selon une forme url</p>
<p>&#8211; enctype= »text/plain », le contenu du formulaire est retourné en format texte.t texte lisible par le destinataire; option accompagnée le plus souvent de ACTION=mailto:</p>
<p>&#8211; enctype= »multipart/form-data », permet d&rsquo;expédier un fichier attaché au message.</p>
<p>La balise <strong>&lt;fieldset&gt;</strong> : elle regroupe des éléments dans un formulaire, par exemple état civil, adresse, etc.</p>
<p>Ses attributs : </p>
<p>&#8211; Tous les attributs habituels des autres balises (id, class, title, etc.)</p>
<p><strong>&lt;legend&gt;</strong></p>
<p>Les balises des champs des formulaires :</p>
<p><strong>&lt;input&gt;</strong></p>
<p>Cette balise dans ces différents type permet l&rsquo;entrée des données, qu&rsquo;elles soient libres (text), soumises à un choix (radio) ou pour la validation du formulaire (submit) </p>
<p>Ses attributs de type : text, password, radio, checkbox, submit, reset, image, hidden, file, button.<br />
Ses autres attributs : name, value, checked, disabled, readonly, size, maxlength, src (pour les input de type image), alt (pour les input de type image).</p>
<p><strong>&lt;textarea&gt;</strong></p>
<p>Comme son nom l&rsquo;indique il s&rsquo;agit d&rsquo;une zone dans laquelle on peut saisir du texte (sur plusieurs lignes).</p>
<p>Ses attributs : name, rows, cols, disabled, readonly.</p>
<p><strong>&lt;select&gt;</strong></p>
<p>La balise &lt;select&gt; permet de présenter plusieurs options de choix sous forme d&rsquo;une liste déroulante.</p>
<p><strong>&lt;option&gt;</strong></p>
<p>La balise &lt;option&gt; permet de définir une option dans un menu (select).</p>
<p><strong>&lt;optgroup&gt;</strong></p>
<p>Les options de même type peuvent être regroupées dans un groupe d&rsquo;options.</p>
<p><strong>&lt;button&gt;</strong></p>
<p>La balise button (avec l&rsquo;attribut type= »submit ») permet de valider les formulaires comme un input de type submit, tout en ayant la particularité de permettre d&rsquo;insérer du code html (comme du simple  texte ou une image) entre sa balise ouvrante et sa balise fermante, ce qui laisse beaucoup plus de possibilités qu&rsquo;un simple champs input.  Mais attention, dans Internet Explorer ce qui est compris entre &lt;button&gt; et &lt;/button&gt; sera interprété comme étant la valeur du bouton, même si un attribut <em>value </em>indique une valeur différente, de plus internet explorer ne retournera pas <em>exactemen</em>t ce qui est entre les deux balises mais une interprétation de ce qui se trouve entre les deux balises.</p>
<p>Ses attributs de type : button, submit, reset.<br />
Ses autres attributs : name, value, typename.</p>
<p>Concernant le type <em>reset</em> pour les boutons, qu&rsquo;ils soient construit avec la balise &lt;input&gt; ou la balise &lt;button&gt;, l&rsquo;utilité de cette option me semble pour le moins limitée, pourquoi voudrait-on remettre à zéro les champs d&rsquo;un formulaire qu&rsquo;on vient juste de remplir ? Ne risque-t-on pas d&rsquo;effacer malencontreusement toutes les données saisies ? Un exemple parlant : essayez de remplir <a href="http://www.gtp.gr/RoutesForm.asp?OName=piraeus&amp;DName=santorini&amp;GoLocation1.x=0&amp;GoLocation1.y=0">ce formulaire</a> et de le valider ensuite&#8230; Sur quel bouton avez-vous été tenté de cliquer ?</p>
<p>L&rsquo;attribut <em>name</em> des champs de formulaire permet d&rsquo;identifier chacun des éléments du formulaire et est indispensable pour récuperer les données du formulaire (cet attribut est déprécié uniquement sur les balises suivantes : a, applet, form, frame, iframe, img, et map). L&rsquo;ajout d&rsquo;un id à chaque élément est nécessaire pour rattacher chaque champs à son label. <em>Id</em> ne fait pas double emploi avec <em>name</em></p>
<p><strong>La balise <strong>&lt;label&gt;</strong></strong></p>
<p>Littéralement,<em> label </em>signifie <strong><em><span style="font-weight: normal;">étiquette. </span><span style="font-style: normal;"><span style="font-weight: normal;">Cette balise permet de rattacher un nom au champs d&rsquo;un formulaire, elle permet également d&rsquo;agrandir la zone de focus ou de clic, très pratique notamment pour les boutons radio ou des cases à cocher dont la zone de clic est réduite.</span></span></em></strong></p>
<p>attribut : for</p>
<p>Un exemple de formulaire html conçu en suivant ces recommandations :</p>
<pre>
<code class="prettyprint">
&lt;form action="inscription.php" method="post"&gt;
     &lt;fieldset class="etat-civil"&gt;
          &lt;legend&gt;Etat civil&lt;/legend&gt;
         &lt;label for="nom"&gt;Nom&lt;/label&gt;
         &lt;input id="nom" name="nom" type="text" /&gt;&lt;br /&gt;
         &lt;label for="prenom"&gt;Prénom &lt;/label&gt;
         &lt;input id="prenom" name="prenom" type="text" /&gt;&lt;br /&gt;
         &lt;label for="date-de-naissance"&gt;Date de naissance&lt;/label&gt;
         &lt;input id="date-de-naissance" name="date-de-naissance" type="text" /&gt;
     &lt;/fieldset&gt;
     &lt;fieldset class="adresse"&gt;
          &lt;legend&gt;Adresse&lt;/legend&gt;
          &lt;label&gt;Rue&lt;/label&gt;
          &lt;input id="rue" name="rue" type="text" /&gt;&lt;br /&gt;
          &lt;label&gt;Code postal&lt;/label&gt;
          &lt;input id="code-postal" name="code-postal" type="text" /&gt;&lt;br /&gt;
          &lt;label&gt;Ville&lt;/label&gt;
          &lt;input id="ville" name="ville" type="text" /&gt;
     &lt;/fieldset&gt;
     &lt;button onclick="alert(this.value)"&gt;Valider&lt;/button&gt;</code>
</pre>
<p>Les éléments de formulaire sont de type inline, sauf les éléments &lt;form&gt; et &lt;fieldset&gt; qui sont de type bloc.</p>
<p>Selon les besoins de présentation du formulaire on pourra intercaler des éléments &lt;div&gt; ou &lt;p&gt; pour structurer le formulaire (le débat reste ouvert sur l&rsquo;utilisation de l&rsquo;une ou l&rsquo;autre des balises)</p>
<p><strong>2° étape : Ne pas oublier les bonnes pratiques !</strong></p>
<ul>
<li>En cas de rejet des données saisies dans un formulaire, les champs contenant les données rejetées sont indiqués à l&rsquo;utilisateur.</li>
<li>En cas de rejet des données saisies dans un formulaire, toutes les données saisies peuvent être modifiées par l&rsquo;utilisateur.</li>
<li>Les champs obligatoires des formulaires sont indiqués.</li>
<li>En cas de rejet des données saisies dans un formulaire, les raisons du rejet sont indiquées à l&rsquo;utilisateur.</li>
<li>Les étapes des processus comportant des interactions multiples (commande, formulaires répartis sur plusieurs pages, etc.) sont décrites et imprimables avant leur commencement.</li>
</ul>
<p>La liste exhaustive des bonnes pratiques pour les formulaires est consultable sur le site des <a href="http://fr.opquast.com/bonnes-pratiques/">bonnes pratiques Opquast</a></p>
<p><strong>3° étape : Utilisation du javascript : Ajout de fonctionnalités et vérification du format des données.</strong></p>
<p>Javascript est défini comme une surcouche à html et doit donc être distinct de ce dernier selon la règle de séparation du contenu, de la forme et des comportements. Un formulaire pour être accessible doit pouvoir fonctionner sans javascript. Javascript n&rsquo;étant là que pour apporter plus de conforts à l&rsquo;utilisateur. On pourra donc tester si un champs est vide ou bien compléter, si une date, un code postal ou un numéro de téléphone est renseigné dans le bon format. Cette première « validation » javascript peut être faite soit lorsque le bouton valider est cliqué, soit au fur et à mesure de la saisie en utilisant la techno  Ajax, la dernière solution étant la plus communément utilisée aujourd&rsquo;hui.</p>
<p>Exemples de formulaires vérifiés avec javascript :</p>
<ol>
<li><strong>Formulaire d&rsquo;inscription du site <a href="http://www.rememberthemilk.com/" />Remember the milk</a></strong>
<p><img loading="lazy" src="/wp-content/uploads/2010/03/remember-the-milk.png" alt="formulaire remember the milk" title="remember-the-milk" width="765" height="312" /></li>
<li><strong>Formulaire d&rsquo;inscription du site <a href="http://www.jamendo.com/" />Jamendo</a></strong>
<p><img loading="lazy" src="/wp-content/uploads/2010/03/jamendo.png" alt="formulaire de jamendo" title="jamendo" width="500" height="304" />
</ol>
<p>Exemples d&rsquo;Aide à la saisie avec javascript :</p>
<ol>
<li><strong>Formulaire d&rsquo;inscription du site <a href="http://www.cdiscount.com/" />CDiscount</a></strong>
<p><img loading="lazy" src="/wp-content/uploads/2010/03/cdiscount.png" alt="Formulaire CDiscount" title="cdiscount" width="690" height="142" /></li>
<li>
<strong>Formulaire d&rsquo;inscription du site <a href="http://www.twitter.com/" />Twitter</a></strong></p>
<p><img loading="lazy" src="/wp-content/uploads/2010/03/twitter-ss.jpg" alt="Formulaire d&#039;inscripton Twitter" title="twitter" width="690" height="244"  />
</li>
</ol>
<p><strong>4° étape : la validation des données</strong></p>
<p>L&rsquo;utilisation de javascript nous a permis de vérifier le formulaire sur différents points : champs obligatoires non renseignés, formats non conformes, etc. au fur et à mesure de la saisie sans envoyer de requête inutile au serveur. Toutefois, il ne faut pas perdre de vue que sans javascript ces éléments doivent également pouvoir être testés. </p>
<p>Ce que nous ne pouvons pas tester en javascript sera testé après l&rsquo;envoi des données, par exemple : est-ce que l&rsquo;identifiant choisi n&rsquo;existe pas déjà dans la base de donnée ?</p>
<p>Une fois toutes ces données testées, elle pourront être ajoutées à la base de données.</p>
<p>Dernier test à effectuer : désactivez javascript dans votre navigateur pour vérifier que le formulaire est accessible !</p>
]]></content:encoded>
					
					<wfw:commentRss>/2009/02/03/concevoir-un-formulaire-html-qui-tient-la-route/feed/</wfw:commentRss>
			<slash:comments>10</slash:comments>
		
		
			</item>
		<item>
		<title>Introduction à WAI ARIA (traduction)</title>
		<link>/2008/12/09/introduction-a-wai-aria-traduction/</link>
					<comments>/2008/12/09/introduction-a-wai-aria-traduction/#comments</comments>
		
		<dc:creator><![CDATA[Pierre Bertet]]></dc:creator>
		<pubDate>Tue, 09 Dec 2008 11:39:40 +0000</pubDate>
				<category><![CDATA[Front-end]]></category>
		<category><![CDATA[Accessibilité]]></category>
		<category><![CDATA[ARIA]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<guid isPermaLink="false">/?p=399</guid>

					<description><![CDATA[Grégoire Dierendonck

L&#8217;article qui suit est la traduction de l&#8217;article « Introduction to WAI ARIA« , publié par Gez Lemon sur Dev Opera, le site d&#8217;Opera Software destiné aux développeurs.
Gez Lemon est un expert reconnu de l&#8217;accessibilité web. Il est membre du WaSP ( Accessibility Task Force ) et travaille pour The Paciello Group, entreprise de conseil spécialisée dans l&#8217;accessibilité web.
Cette traduction, comme l&#8217;article original, est placée sous licence Creative Commons by-nc-sa 2.5.

Cet article est destiné à des personnes ne connaissant pas ARIA. Vous devriez avoir une bonne connaissance du langage HTML et des problèmes que peuvent&#160;[&#8230;]]]></description>
										<content:encoded><![CDATA[<p style="text-align:center;font-size:10px;"><img loading="lazy" src="/wp-content/uploads/2008/12/illu-aria4.jpg" alt="Illustration par Grégoire Dierendonck" title="" width="380" height="435"><br />
<a style="margin-left:10px;text-decoration:none;" href="http://www.troispongdesign.fr/"><em>Grégoire Dierendonck</em></a></p>
<div class="preamble">
<p>L&rsquo;article qui suit est la traduction de l&rsquo;article « <a href="http://dev.opera.com/articles/view/introduction-to-wai-aria/">Introduction to WAI ARIA</a>« , publié par <a href="http://juicystudio.com/">Gez Lemon</a> sur <a href="http://dev.opera.com/">Dev Opera</a>, le site d&rsquo;Opera Software destiné aux développeurs.</p>
<p>Gez Lemon est un expert reconnu de l&rsquo;accessibilité web. Il est membre du <a href="http://www.webstandards.org/"><abbr title="The Web Standards Project">WaSP</abbr></a> ( <a href="http://www.webstandards.org/action/atf/">Accessibility Task Force</a> ) et travaille pour <a href="http://www.paciellogroup.com/">The Paciello Group</a>, entreprise de conseil spécialisée dans l&rsquo;accessibilité web.</p>
<p>Cette traduction, comme l&rsquo;article original, est placée sous licence <a href="http://creativecommons.org/licenses/by-nc-sa/2.5/deed.fr">Creative Commons by-nc-sa 2.5</a>.</p>
</div>
<p>Cet article est destiné à des personnes ne connaissant pas ARIA. Vous devriez avoir une bonne connaissance du langage HTML et des problèmes que peuvent rencontrer les personnes handicapées sur le web. Connaître quelques application web « riches » (RIA) d&rsquo;un point de vue utilisateur serait un plus.</p>
<p>Après avoir lu cet article, vous comprendrez à quoi sert ARIA, comment l&rsquo;intégrer à vos sites, et comment l&rsquo;utiliser dès immédiatement et même sur le plus simple des sites pour le rendre plus accessible.</p>
<h2>Introduction</h2>
<p>Le langage HTML (HyperText Markup Language) n&rsquo;a pas été conçu pour créer des applications web. Le nombre de contrôles (bouton, case à cocher, etc.) qu&rsquo;il propose est limité, et il est basé sur une communication client / serveur séquentielle. Les développeurs d&rsquo;applications web ont contourné ces limitations en créant leurs propres widgets (contrôles graphiques) associés à Javascript pour leur ajouter le comportement désiré.</p>
<p>Malheureusement, les techniques utilisées pour outrepasser ces limitations ne sont absolument pas accessibles. Bien que ces widgets ressemblent à ceux d&rsquo;une application bureau classique comme la représentation d&rsquo;une arborescence (tree view), le rôle (ce que le widget fait), l&rsquo;état (sa configuration, comme « checked » pour une case à cocher), et d&rsquo;autres informations importantes ne sont pas disponibles pour les technologies d&rsquo;assistance (comme les lecteurs d&rsquo;écran). Ce serait comme styler une ligne de texte pour qu&rsquo;elle ressemble à un titre, sans utiliser un élément définissant un titre (h1 à h6). Le texte ressemble à un titre, mais les technologies d&rsquo;assistance n&rsquo;ont pas accès à cette information.</p>
<p>Les mises à jour sont souvent mal perçues par les personnes utilisant une technologie d&rsquo;assistance. Ces outils s&rsquo;attendent à ce que le contenu change lors d&rsquo;un événement de navigation « classique », comme un clic sur un lien ou un envoi de formulaire. Les applications web utilisent des techniques comme <abbr title="Asynchronous JavaScript and XML">AJAX</abbr> pour mettre à jour le contenu en arrière plan, ce qui peut passer inaperçu pour les technologies d&rsquo;assistance. Si elles sont tout de même informées de ces mises à jour, l&rsquo;utilisateur n&rsquo;est pas pour autant informé que le contenu à été mis à jour, et n&rsquo;a aucun moyen de localiser la zone mise à jour.</p>
<p><a href="http://www.w3.org/WAI/intro/aria"><abbr title="Web Accessibility Initiative">WAI</abbr>&#8211;<abbr title="Accessible Rich Internet Applications">ARIA</abbr></a> est une spécification qui propose la possibilité de définir une description des rôles, des états et des propriétés pour les widgets personnalisés, de manière à ce qu&rsquo;ils soient reconnaissables et utilisables par les utilisateurs de technologies d&rsquo;assistance. WAI-ARIA propose également un système permettant de s&rsquo;assurer qu&rsquo;un utilisateur de technologie d&rsquo;assistance est informé des mises à jour de l&rsquo;application.</p>
<h2>Petit historique du langage HTML</h2>
<p>Le langage HTML a été conçu pour être un système hypertexte, permettant de structurer et de partager des documents liés entre eux. Les premiers brouillons de la spécification HTML définissaient des balises comme des titres, des paragraphes, des listes, ou des ancres, pour ajouter une structure à des documents texte. La <a href="http://www.w3.org/MarkUp/draft-ietf-iiir-html-01.txt">première proposition d&rsquo;une spécification HTML</a> par l&rsquo;<abbr title="Internet Engineering Task Force">IETF</abbr> incluait l&rsquo;élément <code>img</code>, permettant d&rsquo;ajouter des images à l&rsquo;intérieur du document. La première spécification formelle fût <a href="http://tools.ietf.org/html/rfc1866">HTML 2</a>, basée sur les premiers brouillons de HTML. Cette spécification a défini les formulaires, ainsi que quelques composants d&rsquo;interface permettant de créer des zones éditables, des boutons, des cases à cocher, des boutons radio, et des menus déroulants. Le petit ensemble de de contrôles définis dans HTML 2 n&rsquo;a quasiment pas changé jusqu&rsquo;à <a href="http://www.w3.org/TR/html401/">HTML 4.01</a>, que nous utilisons actuellement.</p>
<p>Le modèle de communication de HTML est basé sur un modèle client / serveur&nbsp;: le client envoie des requêtes et reçoit des réponses&nbsp;; Le serveur web attend les requêtes, les traite, puis renvoie une réponse au client. Puisque HTML ne définit pas de gestion de comportement, la communication est séquentielle&nbsp;: le client demande une page au serveur, le serveur traite la requête et renvoie une page au client.</p>
<h2>Applications web</h2>
<p>Les applications web essaient d&rsquo;imiter les applications bureau classiques, mais ces applications web sont elles-mêmes exécutées à l&rsquo;intérieur d&rsquo;une application bureau&nbsp;: le navigateur. Il existe deux différences fondamentales entre HTML, avec son modèle de communication, et une application de bureau traditionnelle&nbsp;:</p>
<ul>
<li>Les applications de bureau possèdent une couche de comportement qui ne repose pas sur des requêtes serveur.</li>
<li>Les applications de bureau possèdent un nombre bien plus élevé de widgets.</li>
</ul>
<h2>Reproduction d&rsquo;applications bureau</h2>
<h3>Requêtes serveur en arrière plan</h3>
<p>Pour simuler les applications bureau classiques, les applications web utilisent Javascript pour la partie comportement. Javascript peut par exemple être utilisé pour ouvrir et refermer un élément de menu lorsque l&rsquo;utilisateur intéragit avec l&rsquo;élément. Des données doivent parfois être récupérées sur le serveur&nbsp;: l&rsquo;application peut par exemple récupérer des enregistrement dans une base de données pour mettre à jour des informations sur la page. Lorsque l&rsquo;application doit interagir avec le serveur, des techniques comme AJAX ou un élément IFrame masqué sont utilisés pour communiquer de manière transparente avec le serveur.</p>
<h3>Reproduire des composants riches (widgets)</h3>
<p>Puisque HTML propose très peu de widgets (ndt&nbsp;: dans la suite de l&rsquo;article, ce mot sera souvent utilisé pour désigner les contrôles d&rsquo;interface), il est parfois nécessaire de créer des composants plus complexes pour une application web, comme une case à cocher proposant trois états, ou un bouton glissant (slider). Ces composants sont habituellement créés en utilisant des éléments graphiques couplés à Javascript pour qu&rsquo;ils ressemblent et se comportent comme des composants natifs.</p>
<p><img loading="lazy" src="/wp-content/uploads/2021/02/tristate.gif" alt="Trois cases à cocher&nbsp;: non cochée, cochée, et à moitié cochée" width="228" height="171"></p>
<p>Figure 1 — Une boîte de dialogue avec une case à cocher proposant trois états.</p>
<p><img loading="lazy" src="/wp-content/uploads/2021/02/slider.gif" alt="Un bouton glissant proposant d'indiquer la qualité d'un service" width="358" height="65"></p>
<p>Figure 2 — Un bouton glissant (slider) pouvant être utilisé pour indiquer la qualité d&rsquo;un service.</p>
<h2>Problèmes d&rsquo;accessibilité avec la reproduction de composants natifs</h2>
<p>Visuellement, créer des contrôles riches et effectuer des requêtes serveur en arrière plan permet de créer une meilleure expérience utilisateur. Malheureusement, ces techniques posent de graves problèmes d&rsquo;accessibilité pour les utilisateurs de technologies d&rsquo;assistance, comme les lecteurs d&rsquo;écran.</p>
<ul>
<li>Les composants créés de cette manière sont rarement accessibles au clavier.</li>
<li>Le rôle d&rsquo;un composant, « ce qu&rsquo;il fait », n&rsquo;est pas accessible aux technologies d&rsquo;assistance.</li>
<li>Les états et propriétés d&rsquo;un composant ne sont pas accessibles aux technologies d&rsquo;assistance.</li>
<li>Les mises à jour ne sont pas signalées aux technologies d&rsquo;assistance.</li>
</ul>
<h2>WAI-ARIA à la rescousse</h2>
<p>Tous les problèmes listés ci-dessus sont résolus par la specification <strong>WAI-ARIA</strong> (qui sera abrégée <strong>ARIA</strong> jusqu&rsquo;à la fin de cet article)&nbsp;: <strong>W</strong>eb <strong>A</strong>ccessibility <strong>I</strong>nitiative’s <strong>A</strong>ccessible <strong>R</strong>ich <strong>I</strong>nternet <strong>A</strong>pplications. ARIA est une technologie <em>positive</em>&nbsp;: plutôt que de dire aux développeurs ce qu&rsquo;ils ne peuvent pas faire, elle leur propose simplement de créer des applications web riches. ARIA est de plus une technologie très facile à implémenter.</p>
<h2>Navigation au clavier</h2>
<p>En plus de proposer une alternative aux éléments non-textuels, permettre d&rsquo;interagir avec les contrôles d&rsquo;interface à l&rsquo;aide du clavier fait partie du minimum à mettre en place pour rendre un système plus accessible. Un développeur sensibilisé à l&rsquo;accessibilité devrait réaliser des widgets dont les éléments permettent de recevoir le focus, tout comme le fait par défaut un élément <code>input</code> de type <code>image</code> (<code>&lt;input type="image" ...&gt;</code>). Malheureusement, la plupart des widgets ne sont pas réalisés de cette manière&nbsp;: ils utilisent plutôt des éléments comme <code>img</code>, ou peuvent être composés de plusieurs éléments placés dans un conteneur <code>div</code> qui ne reçoit pas le focus.</p>
<p>L&rsquo;attribut <code>tabindex</code> est arrivé avec HTML4, utilisable sur les éléments suivants&nbsp;: <code>a</code>, <code>area</code>, <code>button</code>, <code>input</code>, <code>object</code>, <code>select</code>, et <code>textarea</code>. Cet attribut accepte un nombre positif compris entre <code>0</code> et <code>32767</code>. La navigation commence avec les éléments ayant la plus petite valeur <code>tabindex</code>, et se poursuit jusqu&rsquo;à l&rsquo;élément ayant la valeur la plus élevée. Les éléments ayant pour valeur <code>0</code> sont visités dans leur ordre naturel d&rsquo;apparition dans le code. Si le document a une structure logique, l&rsquo;attribut <code>tabindex</code> n&rsquo;est pas requis car les éléments d&rsquo;interface sont naturellement définis dans l&rsquo;ordre de tabulation.</p>
<p>ARIA <a href="http://www.w3.org/TR/wai-aria/#tabindex">étend l&rsquo;attribut tabindex</a>, lui permettant d&rsquo;être utilisé sur tous les éléments visibles. ARIA autorise également l&rsquo;utilisation d&rsquo;une valeur négative pour les éléments ne devant pas être proposés à la navigation au clavier, mais pouvant recevoir le focus par programmation. Bien que la valeur d&rsquo;un attribut tabindex négatif n&rsquo;aie pas d&rsquo;importance (l&rsquo;élément ne pourra jamais recevoir le focus au clavier), la valeur -1 est couramment utilisée lorsqu&rsquo;un élément ne doit pas recevoir le focus au clavier, mais uniquement par programmation.<br />
Par exemple, vous pourriez réaliser un menu dont l&rsquo;élément conteneur est accessible à l&rsquo;aide de la tabulation clavier, mais pas les éléments qu&rsquo;il contient. Ces éléments peuvent alors être programmés pour être parcourus à l&rsquo;aide des touches fléchées du clavier. Ainsi, les utilisateur n&rsquo;ont pas à utiliser la touche tabulation sur chacun des éléments du menu, ce qui leur permet de mieux accéder au document. C&rsquo;est vrai pour tous les widgets ayant une série de composants nécessitant un accès au clavier, comme la représentation d&rsquo;une arborescence.</p>
<h3>Ajouter un élément à l&rsquo;ordre naturel des tabulations</h3>
<p>L&rsquo;exemple suivant affecte la valeur <code>0</code> à l&rsquo;attribut <code>tabindex</code> pour placer l&rsquo;élément <code>div</code> dans l&rsquo;ordre des tabulations, ce qui permettra  d&rsquo;y accéder à l&rsquo;aide de la navigation clavier.</p>
<pre><code class="language-markup">&lt;div tabindex="0"&gt;
...
&lt;/div&gt;</code></pre>
<h3>Tabindex négatif</h3>
<p>L&rsquo;exemple suivant utilise un <code>tabindex</code> d&rsquo;une valeur négative, cet élément pourra alors recevoir le focus par programmation.</p>
<pre><code class="language-markup">&lt;div id="progaccess" tabindex="-1"&gt;
...
&lt;/div&gt;</code></pre>
<p>Dans cet exemple, l&rsquo;élément <code>div</code> n&rsquo;est pas placé dans l&rsquo;ordre des tabulations, mais possède un attribut <code>tabindex</code> d&rsquo;une valeur de <code>-1</code>. Le script qui suit sélectionne l&rsquo;élément précédemment défini et utilise la méthode <code>focus()</code> pour activer le focus sur cet élément.</p>
<pre><code class="language-javascript">var objDiv = document.getElementById('progaccess');

// Focus on the element
objDiv.focus();</code></pre>
<h2>Que suis-je&nbsp;?</h2>
<p>ARIA propose l&rsquo;<a href="http://www.w3.org/TR/wai-aria/#Using_intro">attribut <code>role</code></a> pour définir les widgets, comme un bouton glissant (slider), ou définir la structure de la page, comme un menu. Un problème majeur des applications web est que n&rsquo;importe quel élément peut être utilisé pour créer un widget. Les éléments HTML possèdent déjà des rôles prédéfinis. Le rôle d&rsquo;un élément est « ce qu&rsquo;il fait » &#8211; le rôle qu&rsquo;il a dans la structure. Par exemple, le rôle des titres est bien compris par les technologies d&rsquo;assistances. Lorsque des widgets sont réalisés à partir d&rsquo;éléments existants, le rôle d&rsquo;un élément est ce que la technologie d&rsquo;assistance définit plutôt que ce qu&rsquo;il représente visuellement en tant que widget. Par exemple, si le visuel d&rsquo;un slider est créé en utilisant un élément <code>img</code> avec un texte alternatif approprié, un lecteur d&rsquo;écran pourrait annoncer le contrôle comme ceci&nbsp;: « Image d&rsquo;un slider », plutôt que quelque chose de plus intéressant, comme « Bouton glissant, 16 pour cents ».</p>
<p><img loading="lazy" src="/wp-content/uploads/2021/02/thumb.gif" alt="Image d'un bouton glissant (slider)" width="166" height="81"></p>
<p>Figure 3 — L&rsquo;image d&rsquo;un bouton glissant (slider) classique.</p>
<p>Le rôle donné par l&rsquo;attribut <code>role</code> prend le pas sur le rôle natif de l&rsquo;élément. Dans l&rsquo;exemple suivant, un élément <code>input</code> possède un attribut <code>role</code> dont la valeur est <code>slider</code> (nous verrons d&rsquo;autres propriétés ARIA plus loin dans cet article) — le rôle indiqué à la technologie d&rsquo;assistance est <code>slider</code> (bouton glissant), plutôt que <code>input</code> (entrée utilisateur).</p>
<pre><code class="language-markup">&lt;input type="image" src="thumb.gif"
alt="Effectiveness"
role="slider"
aria-valuemin="0"
aria-valuemax="100"
aria-valuenow="42"
aria-valuetext="42 percent"
aria-labelledby="leffective"&gt;</code></pre>
<p>Lorsque le focus est placé sur cet élément, un utilisateur de lecteur d&rsquo;écran comprend ce que fait ce widget. La spécification ARIA propose une <a href="http://www.w3.org/TR/wai-aria/#roles">liste de rôles</a>.</p>
<h3>Rôle des sections du document (document landmark roles)</h3>
<p>Les rôles que nous venons de voir permettent de décrire des widgets, mais il existe également des rôles permettant de décrire la structure du document. Les <a href="http://www.w3.org/TR/wai-aria/#roleattribute_inherits">document landmarks</a> (ou description des zones) sont un sous-ensemble des rôles classiques permettant aux utilisateurs de lecteurs d&rsquo;écran de comprendre le rôle d&rsquo;une zone pour mieux s&rsquo;orienter dans le document.</p>
<p><img loading="lazy" src="/wp-content/uploads/2021/02/pagestructure.gif" alt="Structure de la page" width="179" height="256"></p>
<p>Figure 4 — Une page classique avec une bannière, une barre latérale et une zone de contenu principale.</p>
<p>ARIA définit les rôles de document landmarks (zones du document) suivants&nbsp;:</p>
<dl>
<dt><code>article</code></dt>
<dd>Contenu ayant du sens par lui-même, comme un article ou un commentaire de blog, un message sur un forum, etc.</dd>
<dt><code>banner</code></dt>
<dd>Contenu à propos du site, comme le titre de la page ou le logo.</dd>
<dt><code>complementary</code></dt>
<dd>Permet éventuellement de définir une partie du contenu principal, mais est plus approprié pour du contenu séparé&nbsp;: la météo sur un portail web par exemple.</dd>
<dt><code>contentinfo</code></dt>
<dd>Contenu dépendant d&rsquo;un autre, comme des notes de bas de page, un copyright, un lien vers la déclaration de confidentialité, un lien vers les paramètres de l&rsquo;application, etc.</dd>
<dt><code>main</code></dt>
<dd>Contenu directement lié ou englobant le contenu central du document.</dd>
<dt><code>navigation</code></dt>
<dd>Contient des liens pour naviguer dans ou en dehors du document.</dd>
<dt><code>search</code></dt>
<dd>Cette section contient un formulaire de recherche permettant de chercher sur le site.</dd>
</dl>
<p>Les exemples suivants utilisent les rôles banner, navigation et main pour définir la structure de la page visible sur la figure 4.</p>
<pre><code class="language-markup">&lt;div role="banner"&gt;
...
&lt;/div&gt;
&lt;div role="navigation"&gt;
...
&lt;/div&gt;
&lt;div role="main"&gt;
...
&lt;/div&gt;</code></pre>
<h2>États et propriétés d&rsquo;ARIA</h2>
<p>Les <a href="http://www.w3.org/TR/wai-aria/#introstates">états (states) et propriétés (properties)</a> d&rsquo;ARIA permettent de décrire des informations supplémentaires sur les widgets et de les mettre à la disposition des technologies d&rsquo;assistance, afin d&rsquo;aider l&rsquo;utilisateur à comprendre comment intéragir avec le widget. L&rsquo;état définit une configuration ou une information unique sur un objet. Par exemple, la propriété <code>aria-checked</code> possède trois valeurs pour définir ses états&nbsp;: <code>true</code>, <code>false</code> et <code>mixed</code>.</p>
<p>Dans l&rsquo;exemple du bouton glissant vu un peu plus haut, nous avons inclus différentes propriétés que nous allons voir ci-dessous, aidant à décrire un widget à une technologie d&rsquo;assistance.</p>
<dl>
<dt><code>aria-valuemin</code></dt>
<dd>Stocke la valeur minimale qu&rsquo;un bouton glissant peut avoir.</dd>
<dt><code>aria-valuemax</code></dt>
<dd>Stocke la valeur maximale qu&rsquo;il peut avoir.</dd>
<dt><code>aria-valuenow</code></dt>
<dd>Stocke la valeur actuelle.</dd>
<dt><code>aria-valuetext</code></dt>
<dd>Stocke du texte lisible permettant à l&rsquo;utilisateur de comprendre le contexte. <code>"30 dollars"</code>, par exemple.</dd>
<dt><code>aria-labelledby</code></dt>
<dd>Stocke l&rsquo;identifiant (attribut id) d&rsquo;un élément contenant une description appropriée du widget.</dd>
</dl>
<p>Certaines propriétés peuvent être modifiées par programmation. Dans l&rsquo;exemple suivant, les propriétés <code>arial-valuenow</code> et <code>arial-valuetext</code> de notre widget de bouton glissant sont mises à jour lorsque le bouton change de position&nbsp;:</p>
<pre><code class="language-javascript">// Définit les valeurs des propriétés ARIA
// lorsque le bouton change de position
objThumb.setAttribute('aria-valuenow', iValue);
objThumb.setAttribute('aria-valuetext', iValue + ' %');</code></pre>
<p>Ajouter des rôles et attributs ARIA ne sera pas valide HTML 4.01 ou XHTML1.0, mais rassurez-vous, ARIA ne fait qu&rsquo;ajouter des informations importantes à des spécifications écrites depuis un bon moment maintenant. Des travaux sont en cours pour <a href="http://www.w3.org/WAI/PF/adaptable/StatesAndProperties-20051106.html">définir une DTD pouvant être utilisée avec du XML modulaire</a>, comme XHTML1.1. La spécification ARIA fournit une <a href="http://www.w3.org/TR/wai-aria/#supported">liste complète des états et propriétés</a> permettant de définir des widgets accessibles.</p>
<h2>Les « Live Regions » (zones mises à jour)</h2>
<p>Les Live Regions permettent à certains éléments du document d&rsquo;annoncer qu&rsquo;ils ont été mis à jour, sans que l&rsquo;utilisateur ne soit dérangé dans son activité. Cela signifie que les utilisateurs vont pouvoir être informés des mises à jour sans modifier leur position dans le contenu. Par exemple, une application de chat pourrait signaler une réponse de la personne avec qui l&rsquo;utilisateur est en train de discuter, sans être déplacé en-dehors du champ permettant d&rsquo;envoyer un nouveau message à la personne.</p>
<h3>aria-live</h3>
<p>Pour un utilisateur de lecteur d&rsquo;écran, il est très difficile de comprendre ce qui a été mis à jour sur une page. ARIA propose la propriété <code>aria-live</code>, dont la valeur indique l&rsquo;importance des mises à jour de la région. Voici les différents niveaux d&rsquo;alerte pouvant être utilisés avec la propriété <code>aria-live</code>&nbsp;:</p>
<dl>
<dt><code>off</code></dt>
<dd>Il s&rsquo;agit de la valeur par défaut, indiquant que la zone ne sera pas mise à jour.</p>
<pre><code class="language-markup">&lt;ul aria-live="off"&gt;</code></pre>
</dd>
<dt><code>polite</code></dt>
<dd>C&rsquo;est une notification normale, le comportement généralement attendu d&rsquo;une Live Region. La valeur polite indique qu&rsquo;il n&rsquo;est pas nécessaire d&rsquo;y répondre tant que l&rsquo;utilisateur n&rsquo;a pas terminé ce qu&rsquo;il est actuellement en train de faire.</p>
<pre><code class="language-markup">&lt;ul aria-live="polite"&gt;</code></pre>
</dd>
<dt><code>assertive</code></dt>
<dd>Ce niveau d&rsquo;alerte est plus élevé que la normale, mais n&rsquo;interrompt pas nécessairement l&rsquo;utilisateur.</p>
<pre><code class="language-markup">&lt;ul aria-live="assertive"&gt;</code></pre>
</dd>
<dt><code>rude</code></dt>
<dd>Cette valeur est la plus élevée, et interrompt l&rsquo;utilisateur pour lui notifier la mise à jour. Il peut s&rsquo;en trouver désorienté, et peut empêcher l&rsquo;utilisateur de reprendre la tâche qu&rsquo;il effectuait. Elle ne devrait être utilisée qu&rsquo;en cas d&rsquo;absolue nécessité.</p>
<pre><code class="language-markup">&lt;ul aria-live="rude"&gt;</code></pre>
</dd>
</dl>
<p>Quelques autres propriétés peuvent être utilisées lorsqu&rsquo;une Live Region est créée, en voici la liste.</p>
<h3>La propriété <code>aria-atomic</code></h3>
<p><code>aria-atomic</code> est une propriété optionnelle des Live Regions pouvant prendre comme valeur <code>true</code> ou <code>false</code> (par défaut si la propriété n&rsquo;est pas définie).</p>
<p>Lorsque la zone est mis à jour, la propriété <code>aria-atomic</code> permet à la technologie d&rsquo;assistance de savoir si elle doit décrire à l&rsquo;utilisateur la zone entière ou seulement la partie ayant été mise à jour. Si cette propriété est définie à <code>true</code>, la technologie d&rsquo;assistance devrait décrire complètement la zone. Si sa valeur est <code>false</code>, seule la partie mise à jour devrait être annoncée.</p>
<p>Dans l&rsquo;exemple suivant, tous les éléments de la liste non-ordonnée seront annoncés à l&rsquo;utilisateur, à moins qu&rsquo;un de ces éléments ne surcharge la propriété <code>aria-atomic</code>.</p>
<pre><code class="language-markup">&lt;ul aria-atomic="true"
aria-live="polite"&gt;</code></pre>
<h3>La propriété <code>aria-busy</code></h3>
<p><code>aria-busy</code> est une propriété optionnelle des Live Regions pouvant prendre comme valeur <code>true</code> ou <code>false</code> (par défaut si la propriété n&rsquo;est pas définie). Si plusieurs parties d&rsquo;une Live Region ont besoin d&rsquo;être chargées avant que la mise à jour ne soit annoncée à l&rsquo;utilisateur, la propriété <code>aria-busy</code> peut être définie à <code>true</code> jusqu&rsquo;à ce que la dernière partie soit chargée, puis à <code>false</code> lorsque la mise à jour est complètement terminée. Cette propriété empêche les technologies d&rsquo;assistance d&rsquo;annoncer un changement avant qu&rsquo;une mise à jour ne soit complétée.</p>
<pre><code class="language-markup">&lt;ul aria-atomic="true"
aria-busy="true"
aria-live="polite"&gt;</code></pre>
<h3>La propriété <code>aria-channel</code></h3>
<p><code>aria-channel</code> est une propriété optionnelle des Live Regions pouvant prendre comme valeur <code>main</code> (par défaut si la propriété n&rsquo;est pas définie) ou <code>notify</code>. Les canaux (channels) ont trait au matériel disponible sur le système de l&rsquo;utilisateur, comme un synthétiseur vocal ou une <a href="http://fr.wikipedia.org/wiki/Plage_braille">plage Braille</a> (ndt: lien ajouté). Si un seul canal est disponible, <code>main</code> et <code>notify</code> utiliseront tous deux le même canal. Le canal <code>notify</code> a une priorité plus élevée que le canal <code>main</code>.</p>
<pre><code class="language-markup">&lt;ul aria-atomic="true"
aria-channel="notify"
aria-live="polite"&gt;</code></pre>
<h3>La propriété <code>aria-relevant</code></h3>
<p><code>aria-revelant</code> est une propriété optionnelle des Live Regions indiquant quels types de changements sont considérés comme significatifs à l&rsquo;intérieur d&rsquo;une zone (ajout d&rsquo;un élément, suppression d&rsquo;un élément et modification de texte). Cette propriété accepte une ou plusieurs des valeurs suivantes, séparées par des espaces&nbsp;:</p>
<dl>
<dt><code>additions</code></dt>
<dd>Des noeuds sont ajoutés au DOM à l&rsquo;intérieur de la zone.</dd>
<dt><code>removals</code></dt>
<dd>Des noeuds sont supprimés du DOM à l&rsquo;intérieur de la zone.</dd>
<dt><code>text</code></dt>
<dd>Du texte est ajouté ou supprimé du DOM (modification de texte).</dd>
<dt><code>all</code></dt>
<dd>Toutes les valeurs définies précédemment (additions, removals, text) s&rsquo;appliquent à la zone.</dd>
</dl>
<p>En l&rsquo;absence de la propriété <code>aria-revelant</code>, le comportement par défaut considère que les modifications significatives sont les modifications de texte et les ajouts de noeuds (<code>aria-revelant="text additions"</code>). L&rsquo;exemple suivant n&rsquo;annoncera des changements que si des noeuds sont ajoutés à la région. Si des modifications de texte surviennent ou que des noeuds sont supprimés, l&rsquo;utilisateur n&rsquo;en sera pas averti.</p>
<pre><code class="language-markup">&lt;ul aria-relevant="additions"
aria-atomic="true"
aria-live="polite"&gt;</code></pre>
<h2>Quand pourrons nous utiliser ARIA&nbsp;?</h2>
<p>L&rsquo;utilisation d&rsquo;ARIA ne présente aucun inconvénient, vous pouvez l&rsquo;utiliser dès à présent. Les quatre principaux navigateurs du marché ont commencé ou prévoient de supporter ARIA. Opera 9.5 et Firefox 1.5+ disposent déjà d&rsquo;un support ARIA. Internet Explorer 8 beta supporte ARIA, et l&rsquo;équipe de développement de Webkit, le moteur libre utilisé par Safari (ndt: et Google Chrome), a annoncé que l&rsquo;intégration d&rsquo;ARIA avait commencé.</p>
<p>ARIA est également en train d&rsquo;être largement adopté par les technologies d&rsquo;assistance. JAWS 7.1+, Window-Eyes 5.5+, NVDA, Zoomtext 9+, et d&rsquo;autres offrent déjà un support basique d&rsquo;ARIA, et ce n&rsquo;est qu&rsquo;un début.</p>
<h2>Soyez parmi les premiers à l&rsquo;utiliser</h2>
<p>Puisque nous venons de voir que l&rsquo;utilisation d&rsquo;ARIA ne provoque aucun effet de bord et que le support est déjà présent, il n&rsquo;y a rien à perdre à l&rsquo;utiliser dès maintenant, et beaucoup à gagner. Même si votre site web est le plus simple du monde, vous pouvez y inclure des document landmarks (rôles des sections) pour aider l&rsquo;utilisateur à mieux naviguer et à s&rsquo;orienter à l&rsquo;intérieur du contenu.</p>
<h3>Utilisez les rôles de section (document landmark roles)</h3>
<p>Sur mon site web personnel, j&rsquo;ai utilisé les rôles de zones <code>main</code>, <code>navigation</code>, <code>search</code>, et <code>secondary</code>. Prenons la structure suivante.</p>
<pre><code class="language-markup">&lt;div id="ads"&gt;
...
&lt;/div&gt;
&lt;div id="nav"&gt;
&lt;form id="searchform" ...&gt;
...
&lt;/form&gt;
...
&lt;/div&gt;
&lt;div id="content"&gt;
...
&lt;/div&gt;</code></pre>
<p>Nous pourrions écrire l&rsquo;attribut <code>role</code> pour nos document landmarks directement dans le code HTML&nbsp;:</p>
<pre><code class="language-markup">&lt;div id="ads" role="banner"&gt;
...
&lt;/div&gt;
&lt;div id="nav" role="navigation"&gt;
&lt;form id="searchform" role="search" ...&gt;
...
&lt;/form&gt;
...
&lt;/div&gt;
&lt;div id="content" role="main"&gt;
...
&lt;/div&gt;</code></pre>
<p>Alternativement, puisque les pages sont structurées de manière à pouvoir être stylées avec CSS, la page a des chances d&rsquo;être structurée à l&rsquo;aide d&rsquo;attributs id pouvant être passés à une fonction Javascript. L&rsquo;exemple suivant est une fonction Javascript simple acceptant l&rsquo;attribut <code>id</code> d&rsquo;un élément et une valeur de <code>role</code>, lui permettant de définir l&rsquo;attribut <code>role</code> de l&rsquo;élément correspondant.</p>
<pre><code class="language-javascript">function addARIARole(strID, strRole)
{
// Find the element to add a role property to
var objElement = document.getElementById(strID);

if (objElement)
{
// Add the role property to the element
objElement.setAttribute('role', strRole);
}
}</code></pre>
<p>La fonction peut alors être appelée en passant en paramètre l&rsquo;attribut <code>id</code> de la section et son rôle dans le document. Considérez la structure de document ci-dessous&nbsp;: nous pourrions utiliser cette fonction Javascript pour insérer un attribut <code>role</code>, plutôt que de l&rsquo;écrire dans le code HTML.</p>
<pre><code class="language-javascript">function setupARIA()
{
// Add ARIA roles to the document
addARIARole('content', 'main');
addARIARole('nav', 'navigation');
addARIARole('searchform', 'search');
addARIARole('ads', 'banner');
}

window.onload = setupARIA;</code></pre>
<h3>Indiquer les champs requis</h3>
<p>Si certains de vos formulaires contiennent des champs requis, vous pouvez utiliser la propriété <code>aria-required</code>. Cette propriété indique qu&rsquo;une entrée utilisateur est requise pour envoyer le formulaire. L&rsquo;exemple suivant ajoute la propriété <code>aria-required</code> à un élément <code>input</code> classique.</p>
<pre><code class="language-markup">&lt;label for="contactname"&gt;Name&lt;/label&gt;
&lt;input type="text"
id="contactname"
name="contactname"
size="30"
aria-required="true"&gt;</code></pre>
<p>Le système de blog WordPress a déjà commencé à utiliser l&rsquo;attribut <code>aria-required</code> pour les champs requis du formulaire d&rsquo;envoi de commentaire.</p>
<h3>Ajouter d&rsquo;autres propriétés pertinentes</h3>
<p>Beaucoup de propriétés ARIA peuvent être utilisées sur des sites web très simples, comme <code>aria-labelledby</code> et <code>aria-describedby</code>. La propriété <code>aria-labelledby</code> pointe sur un ou plusieurs éléments considérés comme le libellé de l&rsquo;élément, tandis que l&rsquo;attribut <code>aria-describedby</code> pointe sur un ou plusieurs éléments considérés comme la description de l&rsquo;élément.</p>
<pre><code class="language-markup">&lt;h2 id="limg"&gt;Paragliding&lt;/h2&gt;
&lt;p id="dimg"&gt;
A long description of our paragliding trip ...
&lt;/p&gt;

&lt;div&gt;
&lt;img src="takeoff.png"
alt="Getting ready to take off"
aria-labelledby="limg"
aria-describedby="dimg"&gt;
&lt;/div&gt;</code></pre>
<h3>Priorité des attributs HTML</h3>
<p>Les attributs ARIA ont la priorité sur le code HTML de base. C&rsquo;est à dire que si <code>aria-labelledby</code> est utilisé parallèlement à <code>&lt;label for=""&gt;</code>, seul l&rsquo;attribut <code>aria-labelledby</code> sera pris en compte. L&rsquo;élément <code>label</code> est toujours encouragé pour les anciens navigateurs ne supportant pas ARIA. Une technique simple pour éviter les conflits est d&rsquo;utiliser l&rsquo;attribut <code>aria-labelledby</code> pour faire référence à l&rsquo;élément<br />
<code>label</code>, ce qui permet d&rsquo;être sûr que le libellé est lisible, quel que soit le support d&rsquo;ARIA.</p>
<pre><code class="language-markup">&lt;label id="lblef" for="effectiveness"&gt;Effectiveness&lt;/label&gt;

&lt;input type="image"
role="slider"
id="effectiveness"
aria-labelledby="lblef"
...&gt;</code></pre>
<p>Parcourez la <a href="http://www.w3.org/TR/wai-aria/#supported">liste complète des états et propriétés</a> pour en apprendre plus sur la manière dont ARIA peut vous aider à rendre votre contenu plus accessible.</p>
<h2>Ensemble, maintenant</h2>
<p>HTML n&rsquo;a pas été conçu dans le but de créer des applications web, mais les développeurs les ont créées en dessinant leurs propres widgets, et en leur ajoutant des comportements avec Javascript. Le problème est que le rôle, l&rsquo;état et les propriétés des widgets et du contenu mis à jour sur ces pages n&rsquo;est pas correctement transmis aux technologies d&rsquo;assistance. La spécification ARIA résoud ce problème en permettant aux développeurs de décrire précisément leurs éléments d&rsquo;interface, leur structure de document, et les zones de la page qui seront modifiées.<br />
Que vous développiez une application web complète avec de nombreux wigets et mises à jour dynamiques, ou le plus simple des sites web, vous pouvez commencer à utiliser ARIA dès maintenant pour vos utilisateurs handicapés.</p>
<h2>Pour en savoir plus</h2>
<ul>
<li><a href="http://www.w3.org/TR/wai-aria-practices/">Bonnes pratiques WAI-ARIA</a></li>
<li><a href="http://www.marcozehe.de/2008/02/29/easy-aria-tip-1-using-aria-required/">Utiliser <code>aria-required</code></a></li>
<li><a href="http://www.marcozehe.de/2008/03/23/easy-aria-tip-2-aria-labelledby-and-aria-describedby/">Utiliser <code>aria-labelledby</code> et <code>aria-describedby</code></a></li>
<li><a href="http://www.marcozehe.de/2008/07/16/easy-aria-tip-3-aria-invalid-and-role-alert/">Utiliser <code>aria-invalid</code> et <code>role</code> <code>alert</code></a></li>
<li><a href="http://www.paciellogroup.com/blog/?p=53">Exemple de case à cocher à trois états<br />
</a></li>
<li><a href="http://www.paciellogroup.com/blog/?p=68">Un exemple de bouton glissant (slider) avec ARIA</a></li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>/2008/12/09/introduction-a-wai-aria-traduction/feed/</wfw:commentRss>
			<slash:comments>17</slash:comments>
		
		
			</item>
		<item>
		<title>Utiliser la propriété display: inline-block</title>
		<link>/2008/06/18/utiliser-la-propriete-displayinline-block/</link>
					<comments>/2008/06/18/utiliser-la-propriete-displayinline-block/#comments</comments>
		
		<dc:creator><![CDATA[Eric Le Bihan]]></dc:creator>
		<pubDate>Wed, 18 Jun 2008 21:55:56 +0000</pubDate>
				<category><![CDATA[Front-end]]></category>
		<category><![CDATA[Astuces]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<guid isPermaLink="false">/?p=65</guid>

					<description><![CDATA[Cette propriété qui est très peu utilisée pour des raisons de compatibilité navigateur est néanmoins intéressante. Elle permet en effet d&#8217;appliquer des styles de type « block » à un élément ayant un comportement de type « inline », comme par exemple, une largeur, une hauteur, des marges, etc. Ce qui veut dire que dans certains cas, il est possible de structurer des parties de pages sans avoir recours à la propriété float (left, right) ou position (relative, absolute).
Bien qu&#8217;incomplètement  prise en compte par les différents navigateur, il est possible de l&#8217;utiliser avec quelques connaissances supplémentaires, démonstration :
Prenons&#160;[&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Cette propriété qui est très peu utilisée pour des raisons de compatibilité navigateur est néanmoins intéressante. Elle permet en effet d&rsquo;appliquer des styles de type « block » à un élément ayant un comportement de type « inline », comme par exemple, une largeur, une hauteur, des marges, etc. Ce qui veut dire que dans certains cas, il est possible de structurer des parties de pages sans avoir recours à la propriété <em>float</em> (left, right) ou <em>position</em> (relative, absolute).</p>
<p>Bien qu&rsquo;incomplètement  prise en compte par les différents navigateur, il est possible de l&rsquo;utiliser avec quelques connaissances supplémentaires, démonstration :</p>
<p>Prenons l&rsquo;exemple simple d&rsquo;un formulaire d&rsquo;inscription, où il faut aligner des label à 150px du bord d&rsquo;<em>input</em> de type texte :</p>
<p>Pour le code html suivant :</p>
<pre><code class="prettyprint">
&lt;form action="http://www.example.net/" method="post" id="inscription"&gt;
  &lt;fieldset&gt;
    &lt;label for="prenom"&gt;Prénom &lt;em&gt;*&lt;/em&gt;&lt;/label&gt;
    &lt;input type="text" id="prenom" /&gt;&lt;br /&gt;
    &lt;label for="nom"&gt;Nom &lt;em&gt;*&lt;/em&gt;&lt;/label&gt;
    &lt;input type="text" id="nom" /&gt;&lt;br /&gt;
    &lt;label for="email"&gt;Email &lt;em&gt;*&lt;/em&gt;&lt;/label&gt;
    &lt;input type="text" id="email" /&gt;&lt;br /&gt;
    &lt;label for="password"&gt;Mot de passe &lt;em&gt;*&lt;/em&gt;&lt;/label&gt;
    &lt;input type="password" id="password" /&gt;&lt;br /&gt;
    &lt;label for="confirm-password"&gt;Mot de passe &lt;em&gt;*&lt;/em&gt;&lt;/label&gt;
    &lt;input type="password" id="password" /&gt;&lt;br /&gt;
    &lt;input type="submit" value="valider" class="input-submit" /&gt;
  &lt;/fieldset&gt;
&lt;/form&gt;
</code></pre>
<p>Je définis le styles des base, auxquels je vais ajouter (en gras) la propriété <em>inline-block </em>et les styles qui vont avec  :</p>
<pre><code class="prettyprint">
#inscription fieldset{border:none;}
#inscription label{<strong>display:inline-block;padding:5px 0 0;width:150px;</strong>font-weight:bold;}
#inscription input{border:1px solid #666;}
</code></pre>
<p>Première constatation : ça fonctionne sur la plupart des navigateurs (IE6, IE7, Opera, Safari) mais pas sur les versions de Firefox antérieures à Firefox 3&#8230;</p>
<p>On ajoute alors la propriété <em>display:-moz-inline-box;</em> pour Firefox 2 et les versions antérieures, mais attention, il faut la placer avant <em>display:inline-block</em>, sinon ça ne fonctionne plus pour Internet Explorer et Firefox prend en compte <em>display:-moz-inline-box;</em> au lieu de prendre en compte <em>display:inline-block</em>.</p>
<pre><code class="prettyprint">
#inscription fieldset{border:none;}
#inscription label{<strong>display:-moz-inline-box;</strong>display:inline-block;padding:5px 0 0;width:150px;font-weight:bold;}
#inscription input{border:1px solid #666;}</code></pre>
<p>Dans certains cas j&rsquo;ai constaté des problème de layout avec Internet Explorer, dans ce cas ajouter la propriété <em>display:inline</em> dans une déclaration séparée :</p>
<pre><code class="prettyprint">
#inscription fieldset{border:none;}
#inscription label{display:-moz-inline-box;display:inline-block;padding:5px 0 0;width:150px;font-weight:bold;}
#inscription input{border:1px solid #666;}
<strong>#IE #inscription label,
#IE #inscription .input-submit{display:inline;}</strong></code></pre>
<p>On obtient le résultat suivant, un formulaire structuré sans tableau, sans éléments flottant ou positionnés en dehors du flux html :<br />
<a href="/demos/css/inline_block.html"><img loading="lazy" class="align left size-full wp-image-66" title="form-inline-block" src="/wp-content/uploads/2008/06/form-inline-block.png" alt="Formulaire en inline-block" width="343" height="181" srcset="/wp-content/uploads/2008/06/form-inline-block.png 343w, /wp-content/uploads/2008/06/form-inline-block-300x158.png 300w" sizes="(max-width: 343px) 100vw, 343px" /></a></p>
<p>Seule limitation constatée, les éléments mis en <em>inline-block</em> dans Firefox se comporte comme ayant une propriété <em>white-space:nowrap</em> appliquée, il n&rsquo;est pas possible d&rsquo;avoir des textes sur plusieurs lignes&#8230;</p>
]]></content:encoded>
					
					<wfw:commentRss>/2008/06/18/utiliser-la-propriete-displayinline-block/feed/</wfw:commentRss>
			<slash:comments>11</slash:comments>
		
		
			</item>
		<item>
		<title>Les nouveaux navigateurs débarquent (attention ils mordent)</title>
		<link>/2008/06/12/les-nouveaux-navigateurs-debarquent-attention-ils-mordent/</link>
					<comments>/2008/06/12/les-nouveaux-navigateurs-debarquent-attention-ils-mordent/#comments</comments>
		
		<dc:creator><![CDATA[Pierre Bertet]]></dc:creator>
		<pubDate>Thu, 12 Jun 2008 12:44:25 +0000</pubDate>
				<category><![CDATA[Front-end]]></category>
		<category><![CDATA[Actualité]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Navigateurs]]></category>
		<guid isPermaLink="false">/?p=64</guid>

					<description><![CDATA[Opera 9.5 vient tout juste de sortir dans sa version finale, et la liste des changements est impressionnante (vous pouvez également consulter un article présentant les nouveautés aux développeurs).
La date de sortie de Firefox 3 a été fixée au 17 juin.
Safari 3.1 attend ses nouveaux camarades depuis quelques temps déjà.
Dans quelques jours, les internautes auront à disposition trois navigateurs web d&#8217;excellente qualité.
Javascript
Les performances de Javascript sont plus élevées que jamais, et c&#8217;est loin d&#8217;être fini :
Firefox 4 utilisera le moteur ECMAScript de Flash Player, Tamarin.
Le projet Webkit (le moteur de rendu utilisé par&#160;[&#8230;]]]></description>
										<content:encoded><![CDATA[<p><strong>Opera 9.5</strong> <a href="http://my.opera.com/community/blog/2008/06/10/dear-opera-community">vient tout juste de sortir</a> dans sa version finale, et la <a href="http://www.opera.com/docs/changelogs/windows/950/">liste des changements</a> est impressionnante (vous pouvez également consulter un <a href="http://dev.opera.com/articles/view/opera-9-5-the-next-generation-of-web-s/">article présentant les nouveautés aux développeurs</a>).</p>
<p>La date de sortie de <strong>Firefox 3</strong> a été fixée au <a href="http://developer.mozilla.org/devnews/index.php/2008/06/11/coming-tuesday-june-17th-firefox-3/">17 juin</a>.</p>
<p><strong>Safari 3.1</strong> attend ses nouveaux camarades depuis quelques temps déjà.</p>
<p>Dans quelques jours, les internautes auront à disposition trois navigateurs web <em>d&rsquo;excellente qualité</em>.</p>
<h2>Javascript</h2>
<p>Les performances de Javascript sont plus élevées que jamais, et c&rsquo;est loin d&rsquo;être fini :</p>
<p>Firefox 4 utilisera le moteur ECMAScript de Flash Player, <a href="http://www.mozilla.org/projects/tamarin/">Tamarin</a>.</p>
<p>Le projet Webkit (le moteur de rendu utilisé par Safari) est lui aussi en train de passer à un nouveau moteur Javascript, <a href="http://webkit.org/blog/189/announcing-squirrelfish/">SquirrelFish</a>, qui est extrêmement rapide.</p>
<p>Le nom de code de la prochaine version du navigateur Opera est <a href="http://www.opera.com/products/desktop/next/">Peregrine</a>, « pèlerin » en français, et il n&rsquo;a pas été choisi au hasard :</p>
<blockquote><p>Le faucon pèlerin, ou Falco peregrinus (Tunstall, 1771), est un rapace robuste de taille moyenne, réputé pour être l’oiseau le plus rapide du monde. Les mesures de la vitesse lors de la phase plongeante de l&rsquo;attaque varient généralement entre 130 et 184 km/h. La vitesse maximale mesurée serait de 390 km/h.</p></blockquote>
<h2>CSS</h2>
<p>CSS 2.1 est maintenant correctement supporté dans ces trois navigateurs (Firefox 3 permet <strong>enfin</strong> d&rsquo;utiliser la propriété <code>display:inline-block</code> !), et de plus en plus de propriétés CSS 3 (qui n&rsquo;est pas une recommandation et continue d&rsquo;évoluer) sont d&rsquo;ores et déjà implémentées.</p>
<p>Évidemment, Firefox passe avec succès le <a href="http://www.webstandards.org/files/acid2/test.html">test Acid2</a>.</p>
<h2>HTML</h2>
<p>Certains éléments de la future recommandation HTML5 (encore loin d&rsquo;être finalisé) commencent réellement à être utilisables.</p>
<p>L&rsquo;élément <strong><a href="http://www.whatwg.org/specs/web-apps/current-work/#the-canvas">canvas</a></strong> est en plein explosion. Les exemples suivants utilisent cet élément et fonctionnent sur Firefox 3, Opera 9.5 et Safari 3.1 :</p>
<ul>
<li><a href="http://www.abrahamjoffe.com.au/ben/canvascape/">Canvascape</a>, une démo de moteur 3D de type « Doom-like ».</li>
<li><a href="http://blog.nihilogic.dk/2008/05/8-kilobytes-of-mario.html">Un clone de Mario Bros</a></li>
<li><a href="http://blog.nihilogic.dk/2008/05/javascript-super-mario-kart.html">Un clone de Super Mario Kart</a></li>
<li><a href="http://bomomo.com/">Bomomo</a>, une expérimentation très intéressante<a href="http://bomomo.com/"><br />
</a></li>
<li><a href="http://www.pixastic.com/">Pixastic</a>, un outil de retouche photo</li>
<li><a href="http://www.nihilogic.dk/labs/chess/">Un jeu d&rsquo;échecs en 3D</a></li>
</ul>
<p>Ce n&rsquo;est qu&rsquo;un début : <a href="http://blog.vlad1.com/2007/11/26/canvas-3d-gl-power-web-style/">l&rsquo;élément canvas3D</a> devrait permettre d&rsquo;utiliser l&rsquo;accélération 3D des cartes graphiques.</p>
<p>Le support de <strong>SVG</strong> s&rsquo;améliore encore, et il est maintenant aussi simple d&rsquo;afficher des images vectorielles que d&rsquo;afficher une image bitmap (Jpeg, PNG) dans une page. Les nouvelles versions de Safari et d&rsquo;Opera permettent d&rsquo;utiliser des images SVG dans la propriété CSS background-image.</p>
<p>Des versions expérimentales de Firefox, Opera et Safari permettent d&rsquo;utiliser l&rsquo;élément <a href="http://www.whatwg.org/specs/web-apps/current-work/#video"><strong>video</strong> défini dans HTML5</a>.</p>
<h2>Et Internet Explorer ?</h2>
<p>Il semblerait que plus personne n&rsquo;attende quoi que ce soit de ce navigateur. L&rsquo;innovation sur le web, longtemps paralysée, est enfin repartie à plein régime, laissant de côté ce navigateur.</p>
<p>Internet Explorer 6 est toujours en circulation, et la plupart des sites se doivent encore de le prendre en compte aujourd&rsquo;hui, mais on est très loin des méthodes de conception utilisées il y a quelques années : créer différentes versions d&rsquo;un site par navigateur est non seulement impossible, mais également inadapté au web d&rsquo;aujourd&rsquo;hui, standard et universel.</p>
<p>Les méthodes de travail ont changé : un site est d&rsquo;abord conçu pour les standards, puis adapté pour Internet Explorer, de manière <a href="/2008/04/08/cibler-internet-explorer-dans-une-css-oui-et-sans-hack/">plus</a> ou <a href="/2008/01/08/ie7js-v20-beta/">moins</a> élégante. Des hacks existent pour émuler SVG, l<a href="http://code.google.com/p/explorercanvas/">&lsquo;élément canvas </a>et CSS2.1. Les exigences pour ce navigateur ont été globalement revues à la baisse : l&rsquo;essentiel est que l&rsquo;internaute accède aux informations.</p>
<p>Internet Explorer 8 nous promet de belles choses, mais personne ne l&rsquo;attend plus. <a href="http://standblog.org/blog/post/2005/11/06/93114485-promouvoir-le-choix-et-l-innovation"><strong>Le choix et l&rsquo;innovation sur le web sont définitivement de retour</strong></a>, et ils s&rsquo;en passeront volontiers.</p>
<p>Comment voyez-vous l&rsquo;évolution du web dans les douze prochains mois ?</p>
]]></content:encoded>
					
					<wfw:commentRss>/2008/06/12/les-nouveaux-navigateurs-debarquent-attention-ils-mordent/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>Cibler Internet Explorer dans une CSS ? Oui, et sans hack.</title>
		<link>/2008/04/08/cibler-internet-explorer-dans-une-css-oui-et-sans-hack/</link>
					<comments>/2008/04/08/cibler-internet-explorer-dans-une-css-oui-et-sans-hack/#comments</comments>
		
		<dc:creator><![CDATA[Pierre Bertet]]></dc:creator>
		<pubDate>Tue, 08 Apr 2008 21:01:58 +0000</pubDate>
				<category><![CDATA[Front-end]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[Navigateurs]]></category>
		<guid isPermaLink="false">/?p=60</guid>

					<description><![CDATA[La méthode commence à être rodée : pour intégrer un design en CSS, on commence par le faire sur un navigateur « moderne », puis on corrige les différents problèmes rencontrés sur Internet Explorer, surtout dans sa version 6, qui commence à sérieusement à s&#8217;incruster.
Pour cela, il existe plusieurs solutions.
Eviter les embrouilles
Avec la pratique, un certain nombre de réflexes se mettent en place, et on anticipe immédiatement les problèmes.
Un float:left, avec une marge sur sa gauche ? Un display:inline placé dans la même déclaration permet d&#8217;éviter le bug de la double marge. Tous les navigateurs ignorent&#160;[&#8230;]]]></description>
										<content:encoded><![CDATA[<p>La méthode commence à être rodée : pour intégrer un design en CSS, on commence par le faire sur un navigateur « moderne », puis on corrige les différents problèmes rencontrés sur Internet Explorer, surtout dans sa version 6, qui commence à sérieusement à s&rsquo;incruster.</p>
<p>Pour cela, il existe plusieurs solutions.</p>
<h2>Eviter les embrouilles</h2>
<p>Avec la pratique, un certain nombre de réflexes se mettent en place, et on anticipe immédiatement les problèmes.<br />
Un <code class="prettyprint">float:left</code>, avec une marge sur sa gauche ? Un <code class="prettyprint">display:inline</code> placé dans la même déclaration permet d&rsquo;éviter le <a href="http://www.positioniseverything.net/explorer/doubled-margin.html">bug de la double marge</a>. Tous les navigateurs ignorent ce <code class="prettyprint">display:inline</code>, car la propriété <code class="prettyprint">float</code> est prioritaire. C&rsquo;est toujours ça de pris.</p>
<p>Malheureusement ça ne suffit pas toujours, et il n&rsquo;y a parfois d&rsquo;autre solution que de déclarer une propriété spécialement pour IE.</p>
<h2>Le bon vieux hack</h2>
<p>Allons-y joyeusement, il faut résoudre un bug sur IE6, et les hacks semblent pratiques et simples à utiliser.<br />
Allez, au hasard&#8230; Le sélecteur d&rsquo;enfant : <code class="prettyprint">html &gt; body</code></p>
<p>IE6 ne comprend pas le sélecteur « &gt; ». Il donc est possible de profiter de ce bug pour cibler IE6, de cette façon :</p>
<pre><code class="prettyprint">.my_element{margin-left:5px;} /* Cette déclaration est interprétée par tous les navigateurs */
html &gt; body .my_element{margin-left:8px;} /* ... Puis est écrasée par la suivante, sauf pour IE6 qui ne comprendra pas cette déclaration. */</code></pre>
<p>C&rsquo;est pratique. Seulement IE7 ne corrige pas le bug pour lequel nous devions corriger la propriété margin. Pour le sélecteur d&rsquo;enfants, pas de problème, IE7 l&rsquo;interprète. Logiquement, le bug réapparaît.</p>
<p>En suivant la même méthode, il faut donc trouver un nouveau bug de sélecteur dans IE7, et revoir la CSS. Il arrive également que IE7 ne doive pas recevoir la même correction. Il faut donc trouver un bug qui s&rsquo;applique à IE7 <strong>mais pas</strong> à IE6.<br />
Et comment être sûr de ne cibler qu&rsquo;IE6 ? Un autre navigateur ne prenant pas en charge ce sélecteur pourrait exister.</p>
<p>Il nous faut une autre solution, permettant de cibler efficacement Internet Explorer.</p>
<h2>Les commentaires conditionnels</h2>
<p>Microsoft a ajouté quelque chose de formidable à Internet Explorer : les commentaires conditionnels.</p>
<p>Ils permettent de ne servir un contenu qu&rsquo;à Internet Explorer en général, ou à une de ses versions, en utilisant une syntaxe particulière à l&rsquo;intérieur de commentaires HTML.</p>
<p>Ils n&rsquo;ont certainement pas être prévus pour ça au départ, mais ils sont aujourd&rsquo;hui principalement utilisés pour corriger les bugs de ce navigateur.</p>
<p>Il est donc possible d&rsquo;utiliser le code suivant :</p>
<pre><code class="prettyprint">&lt;!--[if IE 6]&gt; &lt;link rel="stylesheet" href="styles/internet-explorer-6.css" type="text/css" media="screen" /&gt; &lt;![endif]--&gt;
</code></pre>
<p>Pour un navigateur suivant la <a href="http://www.w3.org/TR/html4/intro/sgmltut.html#h-3.2.4">spécification HTML4.01</a>, la balise <code class="prettyprint">&lt;link&gt;</code> est simplement ignorée car elle est placée dans un commentaire, mais pas pour Internet Explorer. Il va lire ce commentaire, et si une condition est déclarée, et qu&rsquo;elle correspond au navigateur utilisé, le code sera tout de même interprété.</p>
<p>Cette solution est fiable, car il n&rsquo;existe aucune raison pour qu&rsquo;un autre navigateur interprète, dans le passé ou l&rsquo;avenir, un commentaire de ce type.</p>
<p>Il est donc possible de créer une CSS pour IE6, une autre pour IE7 au cas où, et allez, encore une pour les versions d&rsquo;IE inférieures à 8, histoire de cibler toutes les version passées de ce vieil ami.</p>
<p>Nous voici donc avec notre feuille de style, et une, deux voire trois nouvelles pour Internet Explorer. Si les CSS du site sont réparties sur plusieurs fichiers, il va falloir créer autant de nouveaux ensembles de fichiers « IE », ou les utiliser de manière globale en prenant le risque d&rsquo;appliquer à certaines pages des styles qui ne leur sont pas destinés.</p>
<p>Avec le temps, cette solution est beaucoup moins pratique : il faut jongler avec plusieurs fichiers, se souvenir que la déclaration de la ligne 310 du fichier « home.css » est corrigée à la ligne 14 du fichier « internet-explorer-6.css », mais aussi à la ligne 8 du fichier « internet-explorer-7.css ».</p>
<p>Il se pourrait aussi qu&rsquo;un jour cette correction provoque un effet indésirable, placée dans un certain contexte. Il faudrait alors se souvenir que cet élément a été corrigé dans l&rsquo;autre CSS, et que cette correction peut être la cause du dysfonctionnement.</p>
<p>Mais existe-t-il une méthode fiable <strong>et</strong> pratique ? P&rsquo;t&rsquo;êt&rsquo; bien, ouais.</p>
<h2>Les commentaires conditionnels, en plus malin</h2>
<p>Il s&rsquo;agit avec cette technique d&rsquo;utiliser les commentaires conditionnels non pas pour appeler une feuille de style, mais pour entourer la page d&rsquo;un conteneur qui prendra comme attribut « id » <code>IE6</code>, <code>IE7</code>, <code>IE</code> ou encore <code>NOTIE</code>.</p>
<p>Cet identifiant permettra de cibler précisément une version d&rsquo;Internet Explorer, dans une CSS « normale ».</p>
<p>Le code se présente sous cette forme :</p>
<pre><code class="prettyprint">&lt;body&gt;
&lt;!--[if IE 6]&gt;&lt;div id="IE6"&gt;&lt;![endif]--&gt;</code></pre>
<p>Et avant la balise de fermeture <code class="prettyprint">&lt;/body&gt;</code> :</p>
<pre><code class="prettyprint">&lt;!--[if IE 6]&gt;&lt;/div&gt;&lt;![endif]--&gt;
&lt;/body&gt;</code></pre>
<p>Pour les navigateurs « normaux » et un outil de validation html, il s&rsquo;agit de commentaires html tout à fait classiques, et sont ignorés.</p>
<p>De cette manière, il est aussi possible d&rsquo;ajouter le support d&rsquo;IE, en ajoutant une balise d&rsquo;ouverture  <code class="prettyprint">&lt;div id="IE7"&gt;</code> en haut et en modifiant la condition du bas pour cibler IE6 et IE7 à la fois.</p>
<p>Nous pouvons aussi utiliser des conditions de type « n&rsquo;est pas », ce qui permet de cibler tous les navigateurs sauf IE.</p>
<p>Voici le code modifié :</p>
<pre><code class="prettyprint">&lt;body&gt;
&lt;!--[if IE 6]&gt;&lt;div id="IE6"&gt;&lt;![endif]--&gt;
&lt;!--[if IE 7]&gt;&lt;div id="IE7"&gt;&lt;![endif]--&gt;
&lt;!--[if (IE) &amp; (!IE 6) &amp; (!IE 7)]&gt;&lt;div id="IE"&gt;&lt;![endif]--&gt; &lt;!-- Pour les anciennes et prochaines versions d'Internet Explorer (autres que 6 et 7) --&gt;
&lt;!--[if !IE]&gt;--&gt;&lt;div id="NOTIE"&gt;&lt;!--&lt;![endif]--&gt; &lt;!-- Le commentaire est fermé, puis rouvert --&gt;

&lt;!-- Structure HTML de la page --&gt;

&lt;/div&gt; &lt;!-- Une simple fermeture de balise à la fin, car tous les navigateurs sont ciblés. --&gt;
&lt;/body&gt;
</code></pre>
<p>Il suffit ensuite d&rsquo;utiliser ces sélecteurs de la même manière qu&rsquo;un hack, mais plus clairement, plus facilement et surtout de manière <strong>fiable</strong> :</p>
<pre><code class="prettyprint">.mon_element{margin-left:2px;}
#IE .mon_element{margin-left:3px;}
#IE6 .mon_element{margin-left:4px;}
#IE7 .mon_element{margin-left:5px;}
#NOTIE .mon_element{margin-left:6px;}</code></pre>
<p>Evidemment l&rsquo;exemple est stupide, puisqu&rsquo;il n&rsquo;y a aucune raison de cibler tous ces éléments à la fois.</p>
<p>Les avantages sont nombreux :</p>
<ul>
<li>C&rsquo;est <strong>fiable</strong> : une nouvelle version d&rsquo;Internet Explorer sera considérée comme « standard » (mais attention à l&rsquo;utilisation de #NOTIE, qui ne sera vraisemblablement pas reconnue par les futures version d&rsquo;Internet Explorer)</li>
<li>Une seule CSS à maintenir</li>
<li>Le code HTML et CSS reste parfaitement valide</li>
<li>La déclaration a du sens, il n&rsquo;est pas utile de commenter ceci : <code>#IE6 .mon_element{margin:-3px;}</code></li>
<li>Lors de la sortie d&rsquo;une nouvelle version d&rsquo;IE, il suffit de lister les bugs qui n&rsquo;ont pas été corrigés, et d&rsquo;ajouter une nouvelle déclaration (IE8) pour ceux-ci.</li>
</ul>
<p>A vous ensuite de composer avec ces différents exemples pour créer une structure adaptée à vos besoins : l&rsquo;utilisation des éléments <code class="prettyprint">&lt;div id="IE6"&gt;</code> et <code class="prettyprint">&lt;div id="IE7"&gt;</code> devraient suffire à la majorité des cas.</p>
]]></content:encoded>
					
					<wfw:commentRss>/2008/04/08/cibler-internet-explorer-dans-une-css-oui-et-sans-hack/feed/</wfw:commentRss>
			<slash:comments>28</slash:comments>
		
		
			</item>
		<item>
		<title>Faire cohabiter plusieurs versions d&#8217;Internet Explorer</title>
		<link>/2008/03/12/faire-cohabiter-plusieurs-version-dinternet-explorer/</link>
					<comments>/2008/03/12/faire-cohabiter-plusieurs-version-dinternet-explorer/#comments</comments>
		
		<dc:creator><![CDATA[Eric Le Bihan]]></dc:creator>
		<pubDate>Wed, 12 Mar 2008 17:24:04 +0000</pubDate>
				<category><![CDATA[Front-end]]></category>
		<category><![CDATA[Actualité]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[Navigateurs]]></category>
		<guid isPermaLink="false">/2008/03/12/faire-cohabiter-plusieurs-version-dinternet-explorer/</guid>

					<description><![CDATA[Avec la version béta d&#8217;Internet Explorer 8, se pose la question habituelle aux développeurs et intégrateurs à  chaque sortie d&#8217;une  nouvelle mouture du navigateur de Microsoft : comment faire cohabiter plusieurs versions d&#8217;Internet Explorer sur son PC ?
Habituellement faire cohabiter deux versions d&#8217;IE suffit, mais étant donné qu&#8217;une partie encore importante des internautes se cramponne au vieux navigateur IE6, il est souhaitable de pouvoir tester ses pages dans les trois dernières version du navigateur.
1ère étape : Installer Internet Explorer 8 version beta.
Pour celà aller sur le billet de Pierre du 6 mars dernier ou encore plus rapide&#160;[&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Avec la version béta d&rsquo;Internet Explorer 8, se pose la question habituelle aux développeurs et intégrateurs à  chaque sortie d&rsquo;une  nouvelle mouture du navigateur de Microsoft : comment faire cohabiter plusieurs versions d&rsquo;Internet Explorer sur son PC ?</p>
<p>Habituellement faire cohabiter deux versions d&rsquo;IE suffit, mais étant donné qu&rsquo;une partie encore importante des internautes se cramponne au vieux navigateur IE6, il est souhaitable de pouvoir tester ses pages dans les trois dernières version du navigateur.</p>
<p><strong>1ère étape : Installer Internet Explorer 8 version beta.</strong></p>
<p>Pour celà aller sur <a href="/2008/03/06/internet-explorer-8-beta-1/">le billet de Pierre du 6 mars dernier</a> ou encore plus rapide : <a href="http://www.microsoft.com/windows/products/winfamily/ie/ie8/default.mspx">ici</a>.</p>
<p>Une fois que c&rsquo;est fait le navigateur installé, vous pouvez passer à l&rsquo;étape 2.</p>
<p><strong>2ème étape : Installer les précédentes versions d&rsquo;IE</strong></p>
<p>Il y a une solution que j&rsquo;avais adopté pour la version précédente (la  7) : <a href="http://tredosoft.com/Multiple_IE">multiple IE</a>, le soucis c&rsquo;est que ça ne fonctionne pas avec Windows Vista. Si vous avez Windows XP, c&rsquo;est nickel, mais le problème c&rsquo;est que vous n&rsquo;aurez pas IE7 puisque multiple IE s&rsquo;arrête à IE6.</p>
<p>La deuxième solution consiste à installer IE7 en version standalone. Pour les infos : <a href="/wp-admin/">c&rsquo;est ici</a> ou <a href="http://tredosoft.com/IE7_standalone">encore ici</a>.<a href="/wp-admin/"><br />
</a></p>
<p>Une fois avoir installé IE7, on va essayer d&rsquo;installer multiple IE, mais auparavant on va voir si IE8 et IE7 s&rsquo;entendent&#8230; D&rsquo;après mes tests, ça marche pas trop mal, mais il ne faut pas être gêné par les messages d&rsquo;erreurs. J&rsquo;ai principalement ce message au chargement de la première page dans IE7 :</p>
<p><code>L'ordinal 14 est introuvable dans la bibliothèque de liaisons dynamiques iertudil.dll</code></p>
<p>On peut ensuite installer Multiple IE. D&rsquo;après mes test cette solution n&rsquo;est pas pleinement fonctionnelle. Je n&rsquo;ai pas pu accéder au champs de recherche de Google, impossible de prendre le focus&#8230;</p>
<p>Si vous n&rsquo;avez pas XP mais Vista, vous allez forcément opter pour la troisième solution : installer un émulateur de PC pour faire tourner windows&#8230; sous windows. <a href="http://www.microsoft.com/france/windows/xp/virtualpc/default.mspx">Virtual PC</a> est disponible sur le site de Microsoft, mais je n&rsquo;ai pas réussi à l&rsquo;installer jusqu&rsquo;au bout, il est vrai que je dispose de la version light de Vista, la home premium*, donc si vous êtes comme moi, vous allez plutôt vous porter sur mon deuxième choix : <a href="http://www.virtualbox.org/wiki/Downloads">Virtual Box</a>. Là pas de problème l&rsquo;install se passe sans encombre. Il ne  reste plus qu&rsquo;à installer la version native d&rsquo;<a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=1E1550CB-5E5D-48F5-B02B-20B602228DE6&amp;displaylang=fr">IE6</a> ou <a href="http://www.microsoft.com/france/windows/downloads/ie/getitnow.mspx">IE7</a> en téléchargement sur le site de Microsoft.  Après, à vous de voir : soit installer multiple IE ou IE7 en version standalone, soit opter pour une version différente par PC virtuel&#8230;</p>
<p>Vous avouerez que ça fait pas mal de soucis pour un navigateur qu&rsquo;on n&rsquo;utilise uniquement pour tester ses pages, non ?</p>
<blockquote style="margin-top: 40px"><p>* <span class="bodyText" style="line-height: 150%">Host operating system: Windows Vista Business, Windows Vista Enterprise, Windows Vista Ultimate, Windows Server 2003 Standard Edition, Windows Server 2003 Standard x64 Edition, Windows XP Professional, or Windows XP Tablet PC Edition</span> (<a href="http://www.microsoft.com/windows/downloads/virtualpc/sysreq.mspx">source site microsoft.com</a>)</p></blockquote>
]]></content:encoded>
					
					<wfw:commentRss>/2008/03/12/faire-cohabiter-plusieurs-version-dinternet-explorer/feed/</wfw:commentRss>
			<slash:comments>9</slash:comments>
		
		
			</item>
		<item>
		<title>Les pop-ups sont morts</title>
		<link>/2008/01/29/les-pop-ups-sont-morts/</link>
					<comments>/2008/01/29/les-pop-ups-sont-morts/#comments</comments>
		
		<dc:creator><![CDATA[Eric Le Bihan]]></dc:creator>
		<pubDate>Tue, 29 Jan 2008 00:17:34 +0000</pubDate>
				<category><![CDATA[Front-end]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<guid isPermaLink="false">/2008/01/29/les-pop-ups-sont-morts/</guid>

					<description><![CDATA[Certaines pratiques ont la vie dure… La navigation par pop-up  à l’intérieur d’un site en est une des plus tenaces.
Pourquoi utiliser des pop-up ?
Le raisonnement que j’entends souvent est : « le contenu n’est pas assez important pour une nouvelle page ». Ce raisonnement  aussitôt contredit par des demandes de pop-up de 650px sur 800 px … Pourquoi tant d’acharnement ??!!
Bien sur je ne parle  pas des pop-up non sollicitées qui ne méritent même pas qu’on s’y arrête ne serait-ce qu’un instant, les navigateurs tels que Firefox ou Opéra, nous en débarassent sans que nous ne nous&#160;[&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Certaines pratiques ont la vie dure… La navigation par pop-up  à l’intérieur d’un site en est une des plus tenaces.</p>
<h3>Pourquoi utiliser des pop-up ?</h3>
<p>Le raisonnement que j’entends souvent est : « le contenu n’est pas assez important pour une nouvelle page ». Ce raisonnement  aussitôt contredit par des demandes de pop-up de 650px sur 800 px … Pourquoi tant d’acharnement ??!!</p>
<p>Bien sur je ne parle  pas des pop-up non sollicitées qui ne méritent même pas qu’on s’y arrête ne serait-ce qu’un instant, les navigateurs tels que Firefox ou Opéra, nous en débarassent sans que nous ne nous en rendions même compte.</p>
<p>Alors que la plupart des  sites a abandonné cette habitude d’un autre temps, certains résistent encore  et toujours bien que les arguments contre l’utilisation de ces petites  fenêtres ne manquent pas :</p>
<h3>Ergonomie :</h3>
<ol>
<li>Les utilisateurs en navigant sur leur site préféré ne  s’attendent pas à ce que les liens sur lesquels ils cliquent ouvrent une autre  fenêtre.</li>
<li>Une pop-up peut passer en dessous de la fenêtre  principale si on clique malencontreusement sur cette dernière.</li>
<li>Si une pop-up est ouverte et se trouve sous la fenêtre  principale toutes les pages ouvertes dans la popup (si elle n’est pas nommée ou  porte le même nom dans toutes les fonctions d’ouverture de la popup) demeureront invisibles pour l’internaute qui croira se trouver en présence de liens  non-fonctionnels.</li>
</ol>
<h3>Accessibilité :</h3>
<ol>
<li>L&rsquo;ouverture d&rsquo;une pop up perturbe  la navigation notamment pour les personnes qui utilisent des aides  techniques pour naviguer. En règle générale, l&rsquo;ouverture d&rsquo;une nouvelle fenêtre  est déstabilisant pour les personnes aveugles.<br />
Il est de plus impossible de revenir à la page précédente par l&rsquo;historique du navigateur.</li>
<li> Une popup est  ouverte par une fonction javascript, sans js la popup ne s’ouvre pas à moins  qu’on prenne le soin d’avoir recours à cette technique (ce qui est loin d’être  le cas, le plus souvent) :</li>
</ol>
<p><code class="prettyprint">        &lt;a href="page.htm" onclick="window.open(this.href); return false;"&gt; </code></p>
<p><em>Il existe d’autres solutions beaucoup plus sympa pour  afficher des informations sans changer de page à l’aide de javascripts  non-intrusifs (il suffit de regarder les scripts et plugins proposés par des  bibliothèques comme <a href="http://fr.wikipedia.org/wiki/JQuery" title="Information sur la bibliothèque javascript jQuery" target="_blank">jQuery </a>ou <a href="http://wiki.script.aculo.us/scriptaculous/" title="Informations sur labibliothèque javascript sciptaculous" target="_blank">script.aculo.us</a>) </em></p>
<h3>Crédibilité :</h3>
<ol>
<li>les pop-up nuisent à l&rsquo;image du site qui les utilise et  donnent une impression générale d’amateurisme.</li>
<li>Les pop-up sont dans la plupart des cas associées à de la pub et  bénéficient de moins d’attention de la part des internautes.</li>
</ol>
<h3>Contraintes des navigateurs :</h3>
<p>Dans les navigateurs modernes, et ceci pour éviter les  abus, il n’est plus possible d’intervenir sur les propriétés des popup  (emplacement, redimensionnement, déplacement, etc.)</p>
<p>Conclusion : on ne devrait plus se poser la question, <strong style="font-size: 14px">les popup, c’est NON !</strong></p>
<p>Quelques liens pour poursuivre cette réflexion :</p>
<ul>
<li>The  Jarrett-Zetie Rules of Pop- ups : <a href="http://www.ergologique.com/actualites/actus.php?id_actu=123">http://www.ergologique.com/actualites/actus.php?id_actu=123</a></li>
<li>Interview Jakob Nielsen sur JDN :  <a href="http://www.journaldunet.com/itws/it_nielsen.shtml">http://www.journaldunet.com/itws/it_nielsen.shtml</a></li>
<li>Créer des popup intelligentes : <a href="http://openweb.eu.org/articles/popup/">http://openweb.eu.org/articles/popup/</a></li>
<li>Lazy, stupid and evil design : <a href="http://www.guardian.co.uk/technology/2005/jun/23/columnists.comment">http://www.guardian.co.uk/technology/2005/jun/23/columnists.comment</a></li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>/2008/01/29/les-pop-ups-sont-morts/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Un premier brouillon pour HTML5</title>
		<link>/2008/01/23/un-premier-brouillon-pour-html5/</link>
		
		<dc:creator><![CDATA[Pierre Bertet]]></dc:creator>
		<pubDate>Wed, 23 Jan 2008 14:49:29 +0000</pubDate>
				<category><![CDATA[Front-end]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[html5]]></category>
		<guid isPermaLink="false">/2008/01/23/un-premier-brouillon-pour-html5/</guid>

					<description><![CDATA[Le premier brouillon (Working Draft) de HTML5 vient d’être publié par le W3C.
L’annonce sur le blog du WHATWG : http://blog.whatwg.org/html-5-published-as-w3c-first-public-working-draft
Vous trouverez sur la page suivante les différences entre HTML4 et HTML5 : http://www.w3.org/TR/html5-diff/
Laurent Jouanneau a publié un excellent article à ce sujet : http://ljouanneau.com/blog/2008/01/23/747-premier-brouillon-de-html5&#160;[&#8230;]]]></description>
										<content:encoded><![CDATA[<p><a href="http://www.w3.org/TR/html5/" title="HTML5 Working Draft">Le premier brouillon (Working Draft) de HTML5</a> vient d’être publié par le W3C.</p>
<p>L’annonce sur le blog du <a href="http://fr.wikipedia.org/wiki/WHATWG" title="WHATWG sur Wikipedia">WHATWG </a>: <a href="http://blog.whatwg.org/html-5-published-as-w3c-first-public-working-draft">http://blog.whatwg.org/html-5-published-as-w3c-first-public-working-draft</a></p>
<p>Vous trouverez sur la page suivante les différences entre HTML4 et HTML5 : <a href="http://www.w3.org/TR/html5-diff/" title="HTML 5 differences from HTML 4">http://www.w3.org/TR/html5-diff/</a></p>
<p>Laurent Jouanneau a publié un excellent article à ce sujet : <a href="http://ljouanneau.com/blog/2008/01/23/747-premier-brouillon-de-html5" title="Premier brouillon de HTML5">http://ljouanneau.com/blog/2008/01/23/747-premier-brouillon-de-html5</a></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Et alors, ce Reset CSS, on l’utilise ?</title>
		<link>/2007/07/03/et-alors-ce-reset-css-on-lutilise/</link>
					<comments>/2007/07/03/et-alors-ce-reset-css-on-lutilise/#comments</comments>
		
		<dc:creator><![CDATA[Pierre Bertet]]></dc:creator>
		<pubDate>Tue, 03 Jul 2007 13:48:11 +0000</pubDate>
				<category><![CDATA[Front-end]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<guid isPermaLink="false">/2007/07/03/et-alors-ce-reset-css-on-lutilise/</guid>

					<description><![CDATA[Eric Meyer a récemment publié une nouvelle version de son fameux Reset CSS. Il s&#8217;agit de quelques lignes de code CSS ayant pour but de remettre « à zéro » les styles par défaut appliqués par les navigateurs.
Il va cibler les éléments un par un, plutôt que d&#8217;utiliser le sélecteur universel (non, rien à voir avec quelque puissance divine) pour diverses raisons :

Il ne faut pas styler les intouchables : Boutons radio, Cases à cocher et leurs amis peuvent se montrer très capricieux&#8230;
Certaines propriétés sont spécifiques à un élément. Quelle doit être la réaction d&#8217;un navigateur lorsqu&#8217;une&#160;[&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Eric Meyer a récemment publié une nouvelle version de son fameux <a href="http://meyerweb.com/eric/thoughts/2007/05/01/reset-reloaded/" title="Reset CSS">Reset CSS</a>. Il s&rsquo;agit de quelques lignes de code CSS ayant pour but de remettre « à zéro » les styles par défaut appliqués par les navigateurs.</p>
<p>Il va cibler les éléments un par un, plutôt que d&rsquo;utiliser le <em>sélecteur universel</em> (non, rien à voir avec quelque puissance divine) pour diverses raisons :</p>
<ul>
<li>Il ne faut pas styler les <em>intouchables</em> : <a href="http://www.w3.org/TR/html4/interact/forms.html#radio" title="Boutons radio">Boutons radio</a>, <a href="http://www.w3.org/TR/html4/interact/forms.html#checkbox" title="Cases à cocher">Cases à cocher</a> et leurs amis peuvent se montrer très capricieux&#8230;</li>
<li>Certaines propriétés sont spécifiques à un élément. Quelle doit être la réaction d&rsquo;un navigateur lorsqu&rsquo;une propriété CSS ne correspond pas à l&rsquo;élément ciblé ?</li>
</ul>
<p><cite>Corinne Schillinger</cite> <a href="http://blog.alsacreations.com/2007/07/02/369-reset-css-une-technique-a-manier-avec-precaution" title="Reset CSS : une technique à manier avec précaution">a publié sur le blog d&rsquo;alsacreations</a> un billet dans lequel se pose la question suivante :</p>
<p><strong><q cite="http://blog.alsacreations.com/2007/07/02/369-reset-css-une-technique-a-manier-avec-precaution">Est-ce une bonne chose de remettre à 0 certains styles par défaut&nbsp;?</q></strong></p>
<p>Le principal argument en défaveur du reset est l&rsquo;oubli dans notre CSS de styler certains éléments.</p>
<p>Ma réponse sera précise, tranchée et définitive : mmm&#8230; ça dépend.</p>
<p>Prenons la <a href="http://www.w3.org/TR/CSS21/sample.html" title="Default style sheet for HTML 4">feuille de style par défaut</a> <strong>recommandée</strong> par la spécification CSS2.</p>
<p>Cette CSS a été établie dans une « logique XML », c&rsquo;est à dire de séparation stricte entre le contenu et la mise en forme. Pour prendre un exemple, elle part du principe que <code class="prettyprint">&lt;head&gt;</code> est un élément du document, et lui applique une propriété <code class="prettyprint">display:none</code>.</p>
<p>Comme précisé en haut de ce document, il est uniquement publié à titre informatif, et ne fait pas partie de la norme : chaque navigateur est libre d&rsquo;appliquer ses propres styles par défaut : on pourrait par exemple imaginer un navigateur qui appliquerait une couleur pour chaque titre, suivant son importance.</p>
<p>Je pense que le problème est là : et si les navigateurs n&rsquo;appliquaient les styles par défaut qu&rsquo;en l&rsquo;absence de CSS ?</p>
<p>Difficilement concevable en l&rsquo;état actuel des choses :</p>
<ul>
<li>99% des auteurs ajouteraient cet énorme bloc dans leurs CSS.</li>
<li>La plupart des éléments ont été<em> conçus</em> par rapport à leur display par défaut, comme l&rsquo;élément table et ses enfants, et il est rarement modifié.</li>
<li>Comment réaliser l&rsquo;élément &lt;legend&gt; d&rsquo;un &lt;fieldset&gt; en CSS (Non ce n&rsquo;est pas un défi, lâchez cet éditeur et je vous promets qu&rsquo;il ne vous arrivera rien) ?</li>
</ul>
<p>Néanmoins, je pense que le concept est intéressant : pourquoi devrait-on s&rsquo;appuyer sur une CSS imprévisible pour construire la nôtre ?</p>
<p>Dans le monde réel, la réponse est simple : nous savons que les navigateurs, à quelques différences près, appliquent les mêmes styles par défaut.</p>
<p>Il faut je pense, se reposer sur le plus évident en supprimant les différences : la propriété <code class="prettyprint">display</code> de chaque élément est définie dans la <a href="http://www.w3.org/TR/html4/sgml/dtd.html#block"><abbr title="Document Type Definition">DTD</abbr> HTML4</a>, par exemple. Chaque navigateur l&rsquo;interprète de la même façon et il est inutile de la redéfinir. Tant que nous n&rsquo;avons pas vu de navigateur aux titres multicolores, nous pouvons encore compter sur l&rsquo;héritage de body pour définir un color:#000 sur tous les textes.</p>
<p>La solution d&rsquo;Eric Meyer est un très bon compromis pour le moment, en attendant de trouver une solution idéale (&#8230;ce qui risque de prendre un moment), et à condition d&rsquo;adhérer au principe de séparation stricte contenu / mise en forme.</p>
<p>Et le risque d&rsquo;oublier le style d&rsquo;un élément ?</p>
<p>En appliquant une CSS à une page, on assume le fait de ne pas respecter le style par défaut du navigateur en proposant à l&rsquo;utilisateur une nouvelle présentation. Je pense qu&rsquo;il faut alors aller jusqu&rsquo;au bout en prenant en charge le style de tous les éléments.</p>
<p>On <em>peut</em> oublier de styler certains éléments, mais on ne <em>devrait pas</em>.</p>
<p>On <em>peut</em> oublier son anniversaire de mariage, mais on ne <em>devrait pas</em>.</p>
]]></content:encoded>
					
					<wfw:commentRss>/2007/07/03/et-alors-ce-reset-css-on-lutilise/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
	</channel>
</rss>
