com> customer 272758 at 2014-04-04 14:08:47 +0200 272758
Crer des sites riches avec lamlioration progressive ADAPTIVE WEB DESIGN Aaron Gustafson Prface de Jeffrey Zeldman Le Web est en perptuelle mutation : ses supports et ses usages, sa porte et ses applications ne cessent de changer et d'voluer. Si vous travaillez dans le Web, vous avez certainement entendu parler lamlioration progressive (progressive enhancement). Mais que recouvre rellement cette notion ? Comment la rendre oprante dans son travail de dveloppement quotidien et dans le design de ses sites ? Dans ce guide, Aaron Gustafson fait la gense de lamlioration progressive, explique ses origines, sa philosophie, son fonctionnement et propose de nombreuses techniques de mise en uvre pour les langages HTML, CSS et JavaScript. Grce lamlioration progressive, vous remettrez les contenus au cur de vos dveloppements, de faon proposer des expriences qui servent les utilisateurs plutt que les navigateurs. Vous donnerez accs vos contenus sans limite technologique, pour les supports dhier, daujourdhui et de demain. Adaptive Web Design constitue non seulement lexplication la plus claire et la plus lgante de lamlioration progressive que jaie jamais lue, mais en plus, ce livre est bourr de savoir-faire pratiques qui viennent s'installer directement dans votre nocortex, grce au style chaleureux et amical d'Aaron. Jeremy Keith, auteur de HTML5 pour les web designers Enn. Lamlioration progressive explique avec un parfait quilibre entre thorie et pratique. Dan Cederholm, auteur de CSS3 pour les web designers Aaron Gustafson a plus de 15 ans dexprience dans le Web et a dvelopp une connaissance profonde des standards du web, de larchitecture des sites, des stratgies de contenu et du design dinterface. Il dirige le Web Standards Projects (WaSP), est expert technique pour A List Apart, et contribue rgulirement .Net Magazine. Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 ADAPTIVE WEB DESIGN Crer des sites riches avec l'amlioration progressive Aaron Gustafson Traduit par Olivier Engler ADAPWEB.indb 1 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 Pearson France a apport le plus grand soin la ralisation de ce livre afn de vous fournir une information complte et fable. Cependant, Pearson France nassume de responsabilits, ni pour son utilisation, ni pour les contrefaons de brevets ou atteintes aux droits de tierces personnes qui pourraient rsulter de cette utilisation. Les exemples ou les programmes prsents dans cet ouvrage sont fournis pour illustrer les descriptions thoriques. Ils ne sont en aucun cas destins une utili- sation commerciale ou professionnelle. Pearson France ne pourra en aucun cas tre tenu pour responsable des prjudices ou dommages de quelque nature que ce soit pouvant rsulter de lutilisation de ces exemples ou programmes. Tous les noms de produits ou marques cits dans ce livre sont des marques dposes par leurs propritaires respectifs. Publi par Pearson France Immeuble Terra Nova II 74, rue de Lagny 93100 Montreuil Tl : +33 (0)1 43 62 31 00 www.pearson.fr
Traduit par Olivier Engler
2013 Pearson France Tous droits rservs Titre original : Adaptive Web Design: Crafting Rich Experiences with Progressive Enhancement, by Aaron Gustafson
Authorized translation from the Englishlanguage edition, entitled Adaptive WebDesign: Crafting Rich Experiences with Progressive Enhancement by Aaron Gustafson (ISBN 978-0-9835895-0-1), published by Easy Readers. Copyright 2011 Aaron Gustafson. All rightsreserved. No part of this book may bereproduced or transmitted in any formor by any means, electronic ormechanical, including photocopying,recording or by any infor- mation storageretrieval system, without permissionfrom Pearson France. Copyright PearsonFrance. ISBN original: 978-0-9835895-0-1 2011 Aaron Gustafson. All Rights reserved. Aucune reprsentation ou reproduction, mme partielle, autre que celles prvues larticle L. 122-5 2 et 3 a) du code de la proprit intellectuelle ne peut tre faite sans lautorisation expresse de Pearson France ou, le cas chant, sans le respect des modalits prvues larticle L. 122-10 dudit code. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from Pearson France. FRENCH Language edition published by Pearson France. ADAPWEB.indb 2 17/04/13 12:47 ISBN : 978-2-7440-5600-0 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 Pour Kelly ADAPWEB.indb 3 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 iv ADAPTIVE WEB DESIGN REMERCIEMENTS Sans les conseils et le soutien de tous mes amis et collgues de mon secteur d'activit, ce livre n'aurait jamais t crit et je n'aurais jamais pu me placer dans une position me permettant d'en envisager l' criture. Je veux donc prendre quelques instants pour leur exprimer ma sincre gratitude: Pour Molly Holzschlag et Jefrey Zeldman qui m'ont pris sous leurs ailes et m'ont permis de renforcer mes comptences en tant que confrencier et auteur. Et aux nombreux organisateurs de confrences et directeurs de publications qui m'ont donn l'occasion de mettre ces comptences en pratique. Pour Carolyn Wood qui m'a aid peaufner mes premiers brouillons et pour Krista Stevens qui a pur mes arguments, fuidif ma prose et calm le monsieur je-sais-tout au fond de moi. Pour Craig Cook et Derek Featherstone qui ont pouss ce que mon code reste efcace et lisible. Merci aussi tous les relecteurs qui m'ont donn de prcieux conseils (et des corrections) : Dan Cederholm, Simon Collison, Kristina Halvorson, Christian Heilmann, Whitney Hess, Jeremy Keith, Dan Rubin et Jonathan Snook. Merci l'quipe Easy Designs pour son souci des dtails et son aide prcieuse dans la production de ce livre : Jessica Martin, Daniel Ryan, Jessi Taylor, Matthew Turnure et Laura Helen Winn. Pour Veerle Pieters qui a trouv du temps dans son agenda charg afn de crer pour moi cette couverture absolument superbe. Et enfn, merci Kelly qui m'a dgag du temps pour crire ce livre, qui m'a aid organiser mes ides et qui m'a encourag aller jusqu'au bout. ADAPWEB.indb 4 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 TABLE DES MATIRES NP REMERCIEMENTS v TABLE DES MATIRES vi AVANT-PROPOS 1 CHAPITRE 1 PENSEZ L'UTILISATEUR, PAS AU NAVIGATEUR 15 CHAPITRE 2 AMLIORATION PROGRESSIVE AVEC LE HTML 39 CHAPITRE 3 AMLIORATION PROGRESSIVE AVEC LE CSS 67 CHAPITRE 4 AMLIORATION PROGRESSIVE AVEC JAVASCRIPT 91 CHAPITRE 5 AMLIORATION PROGRESSIVE ET ACCESSIBILIT 109 CHAPITRE 6 EMPORTER INDEX ADAPWEB.indb 5 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 vi ADAPTIVE WEB DESIGN AVANT-PROPOS Par un glorieux aprs-midi de mars 2006, je passai en trombe avec un ami devant l'htel Hilton du centre d'Austin pour rejoindre la prochaine conf- rence du festival SXSW Interactive quand un jeune inconnu nous arrta net dans notre course. Sans mme se prsenter, il nous annona qu'il tait disponible pour prendre la parole lors de la confrence An Event Apart, un vnement destin aux web designers que j'avais initi trois mois plus tt avec Eric Meyer. Je me suis alors tourn vers mon ami, prenant l'air faussement enjou de Mister Burns des Simpsons (ce qui n'est pas bon signe) et lui ai demand: "Qui est ce jeune arriviste imptueux, Smithers?" Le jeune arriviste imptueux est trs vite devenu un de mes collgues les plus intimes. Au fl des mois et des ans, Aaron Gustafson a produit du code client et serveur pour quelques-uns des clients les plus exigeants de ma socit. Tout aussi important, il a brillamment assur le rle d'diteur technique de la troisime dition de Designing With Web Standards. Son travail consistait surtout informer Ethan Marcotte et moi-mme des choses que nous ignorions propos des standards du Web. Imaginez ce que cela reprsente. Depuis cinq ans maintenant, Aaron est un diteur rigoureux mais impartial pour la revue A List Apart ; il aide les auteurs atteindre leurs objectifs tout en s'assurant qu'ils restent toujours innovants, que leurs mthodes sont accessibles et smantiques et (grce ses connaissances presque encyclopdiques) qu'ils crditent bien leurs prdcesseurs. Aaron a aussi rdig des articles fondamentaux pour la revue. Enfn, oui, il a pris la parole la confrence An Event Apart. Vu mon exprience de l'homme et mon admiration pour son savoir et ses comptences, j'ai t enthousiasm lorsqu'Aaron m'a parl de ce projet de livre et m'a laiss en lire quelques chapitres. Ce n'est pas un livre de plus sur le web design. C'est une pice qui manquait la littrature fondamentale sur le sujet. Notre secteur d'activit a longtemps manqu d'un guide des meilleures pratiques de design web adaptatif et conforme aux standards. Avec la dferlante des terminaux mobiles, les rcentes amliorations des naviga- teurs web sur ordinateur de bureau comme sur tlphone et les nouvelles possibilits qu'apportent le HTML5, le CSS3 et les interfaces gestuelles, ADAPWEB.indb 6 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 TABLE DES MATIRES NP AVANT-PROPOS vii ceux qui conoivent des sites web doivent plus que jamais disposer d'une source fable leur montrant comment tirer au mieux proft de ces opportunits en crant du contenu compatible avec tous les modles de navigateurs, tous les formats d'afchage et tous les niveaux de capacits. Cette source fable est entre vos mains. La convergence entre ces nouveaux lments et ces nouvelles opportunits pousse les professionnels du Web enfn envisager leur travail de design tel qu'il aurait d l'tre depuis le dbut. Le design adaptatif est la voie emprunter, et personne ne matrise mieux qu'Aaron la pense et les techniques nces- saires pour la pratiquer avec excellence. Ces techniques et cette approche sont exposes dans les pages qui suivent. Vous ne perdrez plus des journes entires vous demander comment concevoir de belles pages web en rdigeant du code de qualit qui fonctionne pour tous les visiteurs. J'ai prvu de distribuer ce livre tous mes tudiants, et tous ceux avec lesquels j'ai l'occasion de travailler. Je vous invite faire de mme. Et maintenant, assez de prliminaires. Plongez- vous dans la lecture et proftez-en bien! Jefrey Zeldman Auteur de Designing With Web Standards 3rd Edition ADAPWEB.indb 7 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 ADAPWEB.indb 8 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPI TRE 1 PENSEZ L'UTILISATEUR, PAS AU NAVIGATEUR Si vous avez un minimum d'exprience en design web, il est fort probable que vous ayez entendu parler du concept "d'amlioration progressive" (ou que vous l'ayez pratiqu). Vous savez donc qu'il s'agit en matire de design web du modle idal vers lequel tendre. Mais qu'est-ce au juste que l'amlioration progressive? Quelle est sa signifcation? Comment doit-on la mettre en pratique? Et de quelle manire peut-on incorporer cette approche notre mode de travail dans un contexte d'volution rapide des langages et des navigateurs? Toutes ces questions sont trs pertinentes et j'y rponds au long de ce livre. Comme vous le constaterez, l'amlioration progressive n'est pas un problme de gestion des difrents navigateurs, ni de choix des versions de HTML ou de CSS qu'il faut utiliser. Il s'agit d'une approche philosophique visant produire des situations qui permettent vos utilisateurs d'accder au contenu du site sans subir de contraintes technologiques. Que demander de mieux? Tout cela semble trs sduisant, mais la quantit de travail prvoir parat impressionnante. N'ayez crainte. Une fois que vous aurez assimil le principe de l'amlioration progressive, ou, mieux encore, que vous aurez compris pourquoi cela fonctionne, vous verrez que tout cela est fort simple. Au cours de votre progression dans le livre, vous dcouvrirez de nombreux cas pratiques d'application de l'amlioration progressive qui combinent le HTML, le CSS et le JavaScript de faon crer des sites web adaptatifs qui ne vont ADAPWEB.indb 1 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 2 ADAPTIVE WEB DESIGN pas seulement convenir vos utilisateurs, mais leur proposer une exprience utilisateur satisfaisante, et ce, quels que soient le navigateur ou l'appareil avec lesquels ils y accderont. Mais avant de plonger dans la pratique, il nous faut aborder le pourquoi et le comment de l'amlioration progressive, c'est--dire les fondements de cette philosophie. S'ADAPTER OU PRIR S'il faut attaquer le sujet par la base, l'amlioration progressive repose sur un grand principe: la tolrance aux pannes. Cette tolrance aux pannes dsigne la capacit d'un systme continuer fonctionner mme s'il rencontre une erreur imprvue. C'est cette capacit qui permet un lzard de faire repousser sa queue et au cerveau humain de crer de nouvelles connexions neuronales lorsqu'il se remet d'un traumatisme crnien. La nature se montre trs friande de ce mcanisme de robustesse ou de rsilience, et l'humain s'est inspir d'elle en adoptant ce principe dans ses inventions, comme dans le cas des rseaux de distribution d'lectricit intel- ligents qui vitent ou rduisent l'impact des surcharges rseau en dtectant (et parfois en prvenant) les situations problmatiques. Que vous utilisiez le rseau web en tant que simple visiteur de sites ou en tant que professionnel, vous proftez dj en permanence de ce mcanisme de tolrance aux pannes. Ce principe est en action dans les modes d'achemi- nement des paquets de donnes (les protocoles) entre le navigateur client et le serveur web que vous voulez visiter, et il est mme intimement imbriqu dans les langages qui incarnent le Web d'aujourd'hui: le HTML et le CSS. Les spcifcations de ces deux langages dictent une obligation pour les naviga- teurs d'ignorer ce qu'ils ne parviennent pas interprter. C'est cette condition simple qui rend possible l'amlioration progressive. Mais nous y reviendrons dans un instant. Un autre aspect intressant de la tolrance aux pannes est son ouverture l'volution. Revenons au modle qu'est la nature : vous voyez la capacit d'adaptation en action dans les rgions ayant connu des changements clima- tiques ou environnementaux sufsants pour forcer les organismes vivants choisir entre s'adapter, quitter les lieux ou prir. ADAPWEB.indb 2 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 1 PENSEZ L'UTILISATEUR, PAS AU NAVIGATEUR 3 En 1977, les les Galapagos ont connu une scheresse telle qu'elle a fait fortement baisser la quantit de petites graines qui constituaient la nourriture de prdilection des pinsons de Darwin (gospizes) habitant ces les. Quatre- vingt-cinq pour cent des gospizes sont morts de faim, seuls les plus gros spcimens ayant survcu. Pourquoi ? Parce qu' ils possdaient un plus grand bec capable de casser les enveloppes des graines plus grosses qui ne manquaient pas. En temps normal, ces pinsons grand bec n'avaient aucun atout comptitif, mais avec la scheresse, ils ont tir avantage de la situation. Non seulement ils ont survcu, mais ils ont transmis leurs gnes aux gnra- tions suivantes qui sont videmment dotes d'un bec plus grand. Figure 1.1 : Comparaison de la taille des becs des pinsons des Galapagos (pinsons de Darwin ou Geospiza fortis) tire d'une illustration du livre Zoologie du voyage du H.M.S. Beagle, de John Gould. Le HTML et le CSS ont plusieurs points communs avec les pinsons de Darwin. Ils sont en efet galement conus pour tre compatibles avec le futur, ce qui signife que tout ce qui fonctionne aujourd' hui fonctionnera encore demain, l'an prochain et dans dix ans. Ce sont en quelque sorte des pinsons parfaits: crs pour survivre quelle que soit l'ampleur des changements de l'environnement de la navigation web. Puisque ces langages ont t prvus pour voluer dans le temps, les naviga- teurs web ont t forcs de se conformer aux rgles de tolrance aux pannes en ignorant tout ce qu'ils ne savaient pas comprendre. C'est ce qui donne aux langages cette capacit d'voluer et de s'adapter sans jamais craindre ADAPWEB.indb 3 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 4 ADAPTIVE WEB DESIGN d'atteindre un point partir duquel le contenu et le style qu'ils vhiculent risquent de devenir illisibles ou entranent un blocage du navigateur. La tolrance aux pannes permet de visiter un site web conu en HTML5 avec le navigateur en mode texte Lynx ou de profter des nouveauts du CSS3 sans craindre de se rendre inaccessible aux personnes utilisant Internet Explorer6. Il est capital de comprendre la tolrance aux pannes pour intgrer la notion d'amlioration progressive. La tolrance aux pannes permet l'amlioration progressive de fonctionner et garantit que tous les contenus difuss sur le Web sont accessibles tout un chacun. Puisque la tolrance aux pannes a t incorpore ds le dpart dans les normes des langages HTML et CSS, vous pourriez en dduire que les professionnels du Web (comme nous) ont pris soin d'en reconnatre l'importance et la valeur pour concevoir nos sites web. Hlas, cela n'a pas toujours t le cas. DES FAUTES LGANTES Pendant la premire dcennie du Web, ce mdia a beaucoup volu. Tout au dbut est apparu le navigateur Mosaic du NCSA (National Center for Supercomputing Applications de l'universit de l'Illinois); c'tait le premier navigateur graphique et le HTML a accueilli l'lment nomm img. Puis est arriv l'audio, puis la vido, puis l'interaction. Rester en phase avec cette volution technologique efrne tait un vritable df. Dans notre course en avant, nous en avons oubli la tolrance aux pannes en cherchant profter sans cesse des dernires techniques. Nombre de nos sites fnissaient par ne comporter que des cartes liens pleine page poses sur des fonds JPEG lgants. Certains devenaient dpendants des outils Flash et Director de Macromedia. Peu de sites restaient facilement utilisables et il y en a moins encore qui restaient accessibles tous. Cette poque a donn naissance la thorie appele "dgradation lgante" (graceful degradation). La dgradation lgante constitue le pendant philosophique de la tolrance aux pannes, une parente superfcielle et obsde par les apparences, qui dsire uniquement mettre les plus riches atours et sortir avec les beaux garons. Dans le contexte du Web, la dgradation lgante revenait rassasier les plus rcents et puissants navigateurs avec des mets de choix, tout en jetant quelques ADAPWEB.indb 4 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 1 PENSEZ L'UTILISATEUR, PAS AU NAVIGATEUR 5 miettes aux pauvres hres qui approchaient avec leur minable navigateur d'ancienne gnration. l'poque de l'apoge de cette dgradation lgante, notre obsession tait de garantir que nos sites seraient bien rendus par les navigateurs modernes les plus utiliss. Les tests de compatibilit avec les anciens navigateurs, lorsque nous en faisions, taient repousss au bas de notre liste de priorits. Le raisonnement tait limpide: le HTML et le CSS tant tous deux tolrants aux pannes, l'utilisateur verrait toujours quelque chose s'afcher. Mais nous ignorions que le JavaScript, comme d'autres langages de programmation, n'tait pas tolrant aux pannes (si vous appelez par exemple une mthode inexistante, vous faites subir une erreur au visiteur). Les scripts et applications crits en JavaScript doivent contenir des procdures spcifques pour tre capables de survivre aux erreurs (par exemple en tentant d'excuter la mme action par un autre moyen) ou du moins de pressentir une erreur potentielle en quittant avant qu'elle ne se produise. Rares taient ceux qui prenaient ce genre de prcautions, parce que nous tions focaliss sur la marche en avant, l'aft du dernier jouet avec lequel nous pourrions embellir nos sites. Nous supposions que les anciens navigateurs ne permettraient qu'une exprience infrieure. Nous justifions en considrant que le temps qu'il aurait fallu y consacrer pour au minimum s'assurer que le rsultat restait dcent et sans erreur n'en valait pas la peine. Bien sr, nous grions les erreurs les plus fagrantes, mais pour les autres, nous laissions gentiment les utilisateurs se dbrouiller. (Et c'est triste dire, mais certains parmi nous allaient jusqu' bloquer l'entre aux navigateurs qu'ils ne voulaient pas prendre la peine de grer.) MERGENCE DU PRINCIPE DE TOLRANCE Aprs quelque temps, des dveloppeurs web aviss ont commenc raliser que la prdilection de la dgradation lgante pour les images au dtriment du contenu allait dans la mauvaise direction. Ils constatrent que la dgra- dation lgante tait la cause directe d'une rduction de la disponibilit et de l'accessibilit des contenus. Ces concepteurs et dveloppeurs virent que le Web avait pour raison d'tre la difusion et la consommation de contenus ADAPWEB.indb 5 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 6 ADAPTIVE WEB DESIGN (mots, images, vidos, etc.) Ils dcidrent de reprendre les choses zro en considrant leurs marquages, leurs styles et leurs choix d'interaction en tenant compte de l'impact de ces choix sur la disponibilit des contenus. En rorientant leurs eforts, les dveloppeurs ont commenc exploiter la nature tolrante aux pannes du HTML et du CSS ainsi que le mcanisme de dtection d'erreurs de JavaScript, et comprendre qu'une exprience du visiteur positive ne devait pas tre de type tout ou rien (c'tait le cas sous l'efet de la dgradation lgante). Au contraire, les technologies web pouvaient tre exploites sous forme de strates se compltant les unes les autres en ofrant une exprience et un niveau d'interaction de plus en plus riches. Steve Champeon du projet Web Standards Project a parfaitement capt l'essence de cette philo- sophie en inventant l'expression "amlioration progressive" 1 . Dlicieux tous les niveaux J'aime utiliser comme analogie de l'amlioration progressive la confserie M&M's. Au cur de cette petite bille se trouve une cacahute (vous le saviez ?) Cette cacahute est en soi une bonne source de protines et de graisses, un aliment que tout le monde apprcie (sauf ceux qui y sont aller- giques, videmment). De mme, le contenu de notre site web doit pouvoir tre consomm mme sans aucun embellissement. Figure 1.2 : Un continuum alimentaire. Enrobez cette cacahute de chocolat et vous obtenez une friandise qui met l'eau la bouche et qui a bon got, comme la cacahute seule. De mme, des contenus bien prsents et organiss grce aux styles CSS sont souvent plus faciles lire, et en tout cas, plus agrables consommer. 1. http://www.hesketh.com/publications/inclusive_web_design_for_the_future/ ADAPWEB.indb 6 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 1 PENSEZ L'UTILISATEUR, PAS AU NAVIGATEUR 7 Si nous ajoutons une coquille d'enrobage sucr, l'exprience est encore meilleure. De mme, nous pouvons enrichir notre belle mise en pages avec des interactions crites en JavaScript qui simplifent la navigation parmi les contenus ou les font apparatre d'une manire originale et attrayante. Cette comparaison est bien sr une simplifcation excessive de ce qu'est l'amlioration progressive, mais elle vous procure une ide gnrale de son fonctionnement. Les technologies sont appliques sous forme de strates le HTML, puis le HTML avec le CSS, puis le HTML, le CSS et le JavaS- cript , afn de fournir des expriences difrentes, dont chacune est aussi pertinente que les autres (et aussi goteuse). Et au centre de ces appareillages, il y a la noix: de bons contenus. Une approche partant du centre Le Web, c'est de l'information. Tous les jours, sur tous les sites, des informa- tions sont difuses, demandes et collectes. Ces changes sont devenus des lments indispensables la croissance du Web et vont sans aucun doute continuer soutenir son expansion permanente jusqu' concerner tous les aspects de notre quotidien. Puisque cela reprsente un aspect important du Web, l'change d'informa- tions doit devenir notre objectif prioritaire lors de la construction de toute interface web. L'amlioration progressive garantit que tous les contenus (les informations que difuse le site web) restent accessibles et utilisables par n'importe qui, quelle que soit la situation gographique, le type d'appareil utilis ou les capacits du logiciel d'afchage de ces contenus. De mme, les outils de collecte de contenus (formulaires web, questionnaires, etc.) proftent grandement de l'amlioration progressive, car elle leur garantit une exploitation universelle, ce qui leur permet de mieux faire leur travail d'extraction. Par dfnition, l'amlioration progressive s'intresse l'accessibilit, mais pas dans le sens limit qu'on lui prte habituellement, savoir celui d'ensemble des eforts d'amnagement visant rendre du contenu accessible aux individus ayant des besoins particuliers (handicap moteur, crbral ou sensitif). Notre amlioration progressive va plus loin en dictant que chacun de nous a des besoins particuliers, ces besoins pouvant voluer au cours du temps et en fonction du contexte. Par exemple, lorsque j'accde un site web depuis mon smartphone, je suis limit visuellement par la rsolution et la taille de l'cran (d'autant plus avec un navigateur qui permet de zoomer) et gestuellement ADAPWEB.indb 7 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 8 ADAPTIVE WEB DESIGN par l'interface tactile pour activer les boutons et les liens, car mes doigts sont moins prcis qu'un pointeur de souris. Nous avons dit plus haut que les sites conus dans un esprit de dgradation lgante fonctionnaient bien dans les navigateurs modernes, mais beaucoup moins bien ou pas du tout dans les navigateurs plus anciens. Dans un sens gnral, c'est comme si l'utilisateur visitait un parc d'attractions : les plus beaux manges lui seraient interdits parce qu'il ne fait pas la taille sufsante. De mme, le visiteur qui ne possde pas le "bon" navigateur va subir des problmes (et des erreurs) pour accder au contenu des sites, et encore, lorsqu'il parvient y accder. l'oppos, un site web conu en accord avec la philosophie d'amlioration progressive sera utilisable par tous, depuis tous les appareils, avec tous les navigateurs. Bien sr, le visiteur utilisant le navigateur en mode texte Lynx n'aura pas la mme exprience que celui qui possde la dernire version de Safari, mais ce sera une exprience positive et non une absence de rsultat. Le contenu du site sera accessible dans une version dulcore, ce qui n'est nullement garanti dans l'approche de dgradation lgante. Alors que leurs philosophies sont trs difrentes, l'amlioration progressive et la dgradation lgante peuvent facilement se confondre en termes pratiques, ce qui est dommage. Pour bien souligner ces difrences, j'aime utiliser cette formule : toutes les expriences conues selon l'amlioration progressive garantissent une dgradation lgante dans les anciens navigateurs, alors que peu d'expriences conues selon la dgradation lgante vont permettre une amlioration progressive. Des limites ? Quelles limites ? Pendant l'ge d'or de la dgradation lgante, les sites web fnissaient par ressembler aux parcs d'attractions voqus plus haut: "Mange interdit aux personnes mesurant moins de 1,20m de hauteur". Le Web s'tait rempli (il l'est hlas encore) de sites afchant frement une mise en garde du style "Site optimis pour Netscape Navigator4". Nous avons abandonn cette pratique dplorable grce l'amlioration progressive et la difusion des standards web, mais ce phnomne de cloisonnement est rapparu lorsque les sites ont commenc adopter la technique JavaScript nomme Ajax. De plus en plus de sites ont rclam la prsence de JavaScript ou mme restreint l'entre certains modles et versions de navigateurs. Nous assistions une redifusion de cet pisode tant redout de l'histoire du Web: le retour des sales mthodes ADAPWEB.indb 8 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 1 PENSEZ L'UTILISATEUR, PAS AU NAVIGATEUR 9 de blocage des navigateurs et d'anti-ergonomie que nous pensions avoir dfni- tivement abandonnes. Comme "avec le temps va, tout s'en va", la ferveur autour d'Ajax s'est calme et nous avons pu recommencer construire (et parfois reconstruire) des sites fonds sur Ajax conformes l'approche d'amlioration progressive. Mais un beau jour, il y eut la prsentation d'Apple HTML5 Showcase avec ses superbes transitions et animations en CSS 2 . peine avions-nous essuy la salive tombe sur nos bureaux que nous dcidions, nombreux, d'incorporer ces lgantes nouveauts dans nos sites, soit par impatience, soit sous la pression de nos clients. Consquence : ont commenc se multiplier des sites qui obligeaient leurs visiteurs disposer d'une variante trs rcente de Webkit 3
pour tre vus (et au diable les quatre-vingts pour cent de navigateurs qui n'en taient pas dots). Mais les concepteurs de sites ont fni par comprendre que l'adoption de technologies spcifques allait l'encontre de la philosophie d'amlioration progressive. Certains d'entre eux ont alors persist en dclarant que cette philosophie tait limitante et sont revenus l'ancienne approche de dgra- dation lgante. Ils estimaient que l'amlioration progressive les obligeait prendre en charge les anciens navigateurs qui n'taient pas aussi gratifants utiliser. Ce que ces gens n'ont pas compris, c'est que ce n'tait pas l'amlio- ration progressive qui les bridait, mais leur mauvaise interprtation de cette philosophie. Il faut savoir que l'amlioration progressive ne se focalise pas sur les naviga- teurs. Son but est de guider la conception de scnarii qui permettent aux utilisateurs d'accder aux contenus sans subir de contraintes technologiques. L'amlioration progressive ne vous demande pas de tenter de fournir la mme exprience sur difrents navigateurs, et ne vous empche nullement d'adopter les dernires innovations; elle vous demande uniquement de faire honneur vos contenus (et vos visiteurs) en appliquant les technologies de faon 2. http://www.apple.com/html5/ 3. Webkit est le moteur de rendu visuel utilis par de nombreux navigateurs et applications. Son support de CSS est excellent et il sait grer certaines fonctions volues de CSS, comme les animations CSS, bien mieux que d'autres navigateurs. Webkit est utilis par les navigateurs Safari d'Apple, Chrome de Google et les navigateurs Android, celui de Symbian S60, Shiira, iCab, OmniWeb, Epiphany, pour n'en citer que quelques-uns. Il est la base du systme WebOS de Palm et a t incorpor dans plusieurs produits Adobe parmi lesquels AIR (Adobe Integrated Runtime) et la suite CS5. ADAPWEB.indb 9 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 10 ADAPTIVE WEB DESIGN intelligente, sous forme de plusieurs strates, pour qu' chaque niveau, l'exp- rience soit concluante. Les navigateurs et les technologies surgissent puis s'tiolent. Il est tout fait possible de combiner l'amlioration progressive et votre dsir de vous montrer innovant en ralisant des choses tonnantes dans les navigateurs, condition de faire des choix aviss et de ne jamais perdre de vue vos utilisateurs. L'amlioration progressive pour un excellent service au client Supposez un instant que vous soyez serveur dans un grand restaurant. Votre travail et vos pourboires sont lis votre attention aux dtails et la perfection de votre service. Un critre de contrle de votre attention consiste vrifer le niveau des verres d'eau de vos clients avant de venir les remplir. Un serveur distrait laissera les verres vides plusieurs minutes. Quelquun d'un peu plus concern ne laissera pas les verres se vider plus qu' moiti. Le serveur attentif non seulement n'attendra pas que le verre soit moiti vide, mais il sera assez adroit pour remplir sans que le client s'en aperoive. Vous devinez quels clients quitteront le restaurant les plus satisfaits du service. Si nous considrons seulement la bonne hydratation des clients, qui recevra le meilleur pourboire, d'aprs vous? Puisque nous sommes concepteurs et dveloppeurs de sites web, nous devons tendre vers la mme excellence que le serveur idal, mais ce n'est pas simple. De mme que le serveur ne peut savoir l'avance quel rythme ses clients vont vider leurs verres, nous ne pouvons pas prvoir les besoins de chaque visiteur de nos sites. Il nous faut les devancer. Si nous sommes vraiment concentrs, nous saurons y parvenir sans que les visiteurs se rendent compte que nous dployons tous ces eforts pour eux. Cet objectif devient aisment accessible en adoptant l'approche oriente utilisateur et contenus de l'am- lioration progressive (et non l'approche de suiveur des dernires modes de la dgradation lgante). SAISISSEZ L'OCCASION Lorsque vous dmarrez un projet dans une perspective d'amlioration progressive, vous vous centrez d'abord sur les contenus, puis sur tout ce qui s'y ajoute. Cette approche par strates incarne la prvenance avec laquelle vous rpondez par avance aux attentes des visiteurs en grant le contexte dans lequel se fait l'accs aux pages web. Ce contexte est li aux possibilits du ADAPWEB.indb 10 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 1 PENSEZ L'UTILISATEUR, PAS AU NAVIGATEUR 11 navigateur et, dans une moindre mesure, aux capacits du matriel sur lequel il fonctionne. Le but fnal est d'adapter l'exprience du visiteur en consquence. Le premier niveau d'exprience correspond toujours du texte. Dans cette strate n'intervient aucune technologie remarquable; le succs ou l'chec de la visite ne dpend que des capacits littraires du rdacteur du contenu. Il est vident qu'un texte bien rdig se rend ainsi universellement accessible et fait faire un pas de gant en termes d'accessibilit du contenu. Et quelles que soient les volutions venir du langage HTML, l'impratif de tolrance aux pannes impose aux navigateurs dans leur interprtation du marquage HTML garantit que le contenu marqu sera toujours accessible dans son format le plus lmentaire: des chifres et des lettres. Le deuxime niveau d'exprience correspond la smantique du langage HTML. Les lments de langage et leurs attributs fournissent une description de ce que signife le contenu et renseignent sur son contexte. Ils donnent des informations importantes comme la mise en exergue de certains termes, la source d'une citation ou la signifcation d'une expression peu familire. Minimales Evolues CAPACITS DU NAVIGATEUR S A T I S F A C T I O N
U T I L I S A T E U R Figure 1.3 : Graphe de l'amlioration progressive. Le troisime niveau d'exprience correspond l'enrichissement audiovisuel avec les styles CSS et l'ajout d'images fxes, de sons et de vidos. Comme le HTML, le CSS est par nature tolrant aux pannes, les navigateurs ignorant ce qu'ils ne savent pas interprter; c'est en cela que l'amlioration progressive est possible au niveau du langage CSS. ADAPWEB.indb 11 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 12 ADAPTIVE WEB DESIGN Le quatrime niveau d'exprience est celui des interactions avec le visiteur. Dans le monde des standards, il s'agit presque toujours de code JavaScript, mme si d'autres technologies d'interaction web ont t employes, notamment Flash ou mme les applets Java. Le dernier niveau d'exprience consiste appliquer la spcifcation WAI-ARIA (Web Accessibility Initiative's Accessible Rich Internet Applications) et les rgles de smantique augmentes et meilleures pratiques qu'elle mentionne. Ces enrichis- sements des pages web prennent la relve l o s'arrtait normalement le HTML (mme si le HTML5 a incorpor dans son lexique quelques points smantiques volus issus d'ARIA). Ces difrentes strates (qui sont autant de niveaux de support) permettent de proposer une exprience qui s'amliore progressivement d'une strate la suivante. Ce ne sont pas les seuls scnarii que vous pouvez prsenter vos utilisateurs, mais elles constituent des jalons clairement identifs sur le chemin qui va de l'exprience minimale l'exprience exceptionnelle. L'exprience relle d'un utilisateur peut varier chaque niveau sur quelques points. Cela reste sans consquence sur le service ofert aux utilisateurs tant que nous, concepteurs, ne perdons pas de vue le principe d'amlioration progressive. EN AVANT, TOUTE ! La suite du livre vous invite visiter les difrentes tapes sur l'autoroute de l'amlioration progressive. Nous dcouvrirons successivement le marquage HTML, les styles CSS, le JavaScript et enfn ARIA. Le priple sera illustr par une page de dmonstration qui met en pratique ces techniques d'amlio- ration progressive, l'adresse Retreats4Geeks.com. Par principe, ce livre ne prtend pas constituer une rfrence exhaustive des techniques d'amlioration progressive. Les exemples sont purs et se concentrent sur leur but premier: vous prsenter les meilleures pratiques pour vous permettre d'adopter sur-le- champ l'amlioration progressive dans vos projets. ADAPWEB.indb 12 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 1 PENSEZ L'UTILISATEUR, PAS AU NAVIGATEUR 13 Figure 1.4 : La page de prsentation d'un vnement de formation sur le site Retreats4Geeks.com qui sera tudie tout au long de ce livre. ADAPWEB.indb 13 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 "La signification est dans le contenu du texte, pas dans la forme des caractres." WIM CROUWEL ADAPWEB.indb 14 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPI TRE 2 AMLIORATION PROGRESSIVE AVEC LE HTML Quand on parle de Web, le marquage HTML est incontournable. Il constitue la fondation de toute mise en page russie et de toute exprience utilisateur positive. Que vous prfriez le HTML ou son cousin plus rigoureux XHTML, chaque lment (balise) a un but clairement dfni. La manire dont vous utilisez ces lments a un puissant impact sur l'exprience des visiteurs, en bien ou en mal selon que vous en usiez ou en abusiez. DU TERRAIN VAGUE AU DROIT CHEMIN Lorsque nous avons commenc concevoir des pages web, beaucoup d'entre nous ont nglig l' importance d'un bon marquage. Ceux qui venaient du monde de la programmation ont considr que l'apprentissage du langage HTML allait de soi, et n'ont donc jamais pris le temps d'tudier sa smantique particulire. Ceux qui venaient du monde de la cration graphique n'ont pas non plus senti l'importance de la smantique. Nous nous sommes tous focaliss sur la partie prsentation des pages web et avons saut sur la balise table comme base de la technique de mise en page selon un quadrillage invisible. Nous avons ensuite trouv des tonnes d'utilisations nouvelles de l'lment table, qui ne sont pour la plupart que des remplacements d'lments sman- tiques existants (et parfaitement grs par les navigateurs) tels que les listes. ADAPWEB.indb 15 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 16 ADAPTIVE WEB DESIGN Dans de nombreuses entreprises de la plante, les promoteurs d'une utili- sation smantique rigoureuse du langage HTML n'ont pas t entendus ; leurs arguments taient considrs comme relevant d'une position d'intellec- tuels puristes, pour deux raisons principales: 1) force tait de constater que les anciens sites web se prsentaient toujours trs bien dans les nouveaux navigateurs; 2) comme bien des personnes ne soufrent d'aucun handicap, peu avaient eu l'occasion de ressentir l'importance d'une meilleure accessibilit au Web. Et un jour, Google est arriv et tout a chang. D'un seul coup, le marquage smantique redevenait un sujet important. Google a t le premier moteur de recherche prenant en compte les lments smantiques pour indexer les pages web. Se fondant au dpart sur le trs lmentaire lment d'ancrage (a) comme pierre angulaire de son algorithme PageRank, Google est devenu le pionnier dans l'exploitation des marqueurs smantiques pour extraire du sens et de la pertinence des pages scrutes. Les autres moteurs de recherche ont rapidement suivi, et les moteurs de recherche se sont lancs dans la traque d'autres lments HTML porteurs de sens dans les pages web (par exemple, les balises h1 qui contiennent normalement l'information la plus importante d'une page). Le marquage smantique est ainsi devenu un critre signifcatif dans le monde des entreprises, puisque son utilisation avise permettait d'tre mieux plac dans les rsultats des recherches, et en consquence d'augmenter les chances d'entrer en contact avec de nouveaux clients. LA FONDATION SMANTIQUE Si l'on compare le contenu au substrat, le marquage smantique est le compost que vous ajoutez pour garantir la fertilit de votre jardin. Il enrichit le contenu en fournissant aux visiteurs des indices au sujet du contexte et des intentions de l'metteur, et en proposant des informations complmentaires au contenu. Prenez comme exemple l'lment d'abrviation abbr. Il sert dsigner une abrviation (ou un acronyme, ce qui lui permet dornavant de remplacer l'lment acronym): Gatlinburg, <abbr title="Tennessee">TN</abbr> Dans cet extrait HTML, vous voyez comment l'lment enrichit les deux lettres "TN" en rappelant au visiteur qu'elles signifent "Tennessee". ADAPWEB.indb 16 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 2 AMLIORATION PROGRESSIVE AVEC LE HTML 17 Le langage HTML a volu sans cesse pour ofrir de plus en plus d'options de description des contenus que les lments dlimitent (encapsulent). La publication de la norme HTML5 a donn naissance une fope de nouvelles options smantiques (telles que header) et des enrichissements de quelques lments prexistants (comme l'lment abbr dj cit, qui remplace l'lment acronym). Nous utiliserons au cours de ce chapitre plusieurs lments nouveaux ou enrichis ; j'en profterai pour donner quelques raisons d'y recourir pour marquer les contenus. L' heure est venue de passer la pratique. DIRE CE QUE L'ON VEUT FAIRE SAVOIR Si vous visitez la page web de Retreats 4 Geeks 1 , vous pouvez vous demander par o commencer. Intressons-nous au contenu le plus important qu'est le nom du site et la srie de liens qui mnent aux difrentes sections de la mme page (pour l'exemple, le site ne compte qu'une page). Figure 2.1 : La page du site web montrant le nom du site et les lments de navigation. Intressons-nous cette page dans une approche de smanticien, et commenons par le logo de Retreats 4 Geeks 2 . C'est une image, et nous 1. Si vous n'avez pas encore tlcharg le fchier archive des exemples, faites-le maintenant en vous rendant l'adresse adaptivewebdesign.info. Cherchez le bouton Download the project fles. 2. Oui, je sais que vous pouvez aussi utiliser l'lment object ou dfnir un texte puis le remplacer par une image avec des instructions CSS, mais je prfre m'en tenir au plus simple. ADAPWEB.indb 17 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 18 ADAPTIVE WEB DESIGN utilisons logiquement un lment img pour la baliser. L' lment est assez important, puisqu' il fournit un contexte pour toute la page. Nous devons donc l'incorporer un lment de titre h1, l'lment qui est rserv au contenu majeur de la page. <h1><img src="i/logo.png"/></h1> Notre page d'exemple est crite en HTML5, mais j'ai toujours t plus l'aise avec la srialisation XML de ce langage et j'ai choisi de rester fdle cette syntaxe (ce dont tmoigne la barre oblique fermante de l'lment img). Il s'agit plus d'une question de prfrences que d'une obligation. Au niveau des moyens de navigation locale, nous proposons une liste de liens qu'il faut donc marquer en tant qu'lments de liste. L'ordre des liens devant correspondre l'ordre des sections de contenu dans la page, nous opterons pour une liste ordonne (ol). Chaque lien est insr dans un lment de liste (li) l'intrieur d'un lment d'ancrage (a): <ol> <li><a href="#details">Details</a></li> <li><a href="#schedule">Schedule</a></li> <li><a href="#instructors">Instructors</a></li> <li><a href="#lodging">Lodging</a></li> <li><a href="#location">Location</a></li> </ol> Au point o nous en sommes, nous avons fait les choix de marquage vidents, en proftant des possibilits smantiques ofertes par le langage HTML depuis ses origines. Voici encore un an, nous en serions rests l et aurions considr notre en-tte comme termin, mais le HTML5 nous permet d'aller plus avant au niveau de la smantique et de l'accessibilit du contenu. Traditionnellement, nous aurions eu recours une division de page (div) munie d'un identifant smantique (id) de valeur "header" pour regrouper ces deux lments. Vous vous souvenez sans doute que les divisions servent regrouper des lments, mais qu'elles ne fournissent aucun contexte pour prciser le domaine d'emploi ou la fonction du groupe (c'est d'ailleurs pourquoi nous dcidons de lui attribuer l'identifant "header"). Le HTML5 introduit un nouvel lment pour prciser la signifcation (la smantique) d'une division. Il s'agit de l'lment header. ADAPWEB.indb 18 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 2 AMLIORATION PROGRESSIVE AVEC LE HTML 19 Un lment header sert identifer le contenu de premire importance d'une page ou d'une section de page. Il permet d'abord d'englober les en-ttes ou groupes d'en-ttes (placs dans le nouvel lment hgroup), les aides la navigation et le contenu de sommaire ou d'introduction. Cet lment constitue de ce fait le conteneur idal pour le titre de page et la liste des ancrages qui mnent chacun des articles de notre page. Le langage HTML5 ofre une autre option encore plus approprie pour la navigation. Alors qu'auparavant, nous aurions identif la liste ordonne avec "nav" ou "main-nav", nous pouvons avec le HTML5 profter de son lment nav pour exprimer de faon plus directe l'aspect smantique que nous voulons ajouter la liste ol en fournissant cet identifant smantique id. L' lment nav permet de runir tout un groupe de liens et de fonctions de navigation pour former l'quivalent smantique du rle de repre de l'lment ARIA "navigation" (que nous dcrirons dans le Chapitre5). Ces ajouts tant faits, le marquage de la section devient le suivant: <header>
<h1><img src="i/logo.png"/></h1> <nav> <ol> <li><a href="#details">Details</a></li> <li><a href="#schedule">Schedule</a></li> <li><a href="#instructors">Instructors</a></li> <li><a href="#lodging">Lodging</a></li> <li><a href="#location">Location</a></li> </ol> </nav> </header> Ce marquage fonctionnera dans tous les navigateurs, mme les plus anciens, grce leur comportement consistant ignorer tout ce qu'ils ne savent pas interprter. Les navigateurs les plus rcents sauront bien sr quoi faire des lments nouveaux, mais les plus anciens, comme le navigateur en mode texte Lynx, pourront trouver le contenu et l'afcher. Ce marquage sans styles ni interactivit JavaScript fonctionne et rpond ainsi au deuxime niveau de ADAPWEB.indb 19 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 20 ADAPTIVE WEB DESIGN support demand dans l'approche d'amlioration progressive. (Souvenez-vous que c'est le contenu qui constitue le premier niveau, si important). INVISIBLE ET CONSULTATIF Le marquage est dj bien form, mais nous avons oubli un point important qui participe l'accessibilit: le texte palliatif (alternate text) pour remplacer l'image de logo (exprim par l'attribut d'lment alt). Rappelons que ce genre de "texte alt" 3 donne un minimum d'informations au sujet d'une image lorsque l'utilisateur n'a pas accs celle-ci, soit parce qu'il a dsactiv l'afchage des images, soit parce qu'il est malvoyant et utilise la fonction de lecture audio du contenu de l'cran, d'o l'importance de cet attribut. Voici comment j'ai donc ajout un attribut alt trs simple l'exemple: <h1><img src="i/logo.png" alt="Retreats 4 Geeks"/></h1> Lorsque l'image est un logo ou qu'elle donne une information indispensable pour comprendre l'objectif de la page ou pour dcider de faire une action majeure, il faut systmatiquement penser fournir du texte pour l'attribut alt. Dans les autres cas (images d'illustration), vous pouvez tout fait laisser l'attribut alt vide (alt=""). J'irais mme jusqu' conseiller de fournir un attribut alt vide pour toute image d'agrment, donc non vitale, et ce pour deux raisons: 1) personne n'prouve le besoin de lire ou d'entendre lire des choses aussi pathtiques que "Vue d'un homme souriant qui lance un frisbee son Golden Retriever", et personne n'a envie de rdiger ce genre de texte palliatif; 2) les lecteurs audio d'cran lisent le texte qu'ils trouvent dans les attributs alt, mais ignorent les images dont cet attribut est vide 4 . De mme que l'attribut alt fournit du contenu de secours une image, l'attribut title permet de donner des informations complmentaires pour un lment. Dans le cas des liens de navigation de notre prcdent exemple, nous pouvons 3. Certaines personnes deviennent nerveuses en entendant parler de "balise alt" ou de "alt tag", car les balises (lments) et les attributs de balises sont deux choses trs difrentes (les attributs s'appliquent la balise ouvrante d'un lment). Si vous vous surprenez en train de vouloir parler de balise pour alt, corrigez-vous et dites bien "attribut alt" ou "texte alt". 4. Les lecteurs d'crans prononcent le seul mot "image" lorsqu' ils rencontrent une image qui n'est pas dote d'un attribut alt. Ayez donc la dlicatesse d'ajouter cet attribut systmati- quement, vide ou non. ADAPWEB.indb 20 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 2 AMLIORATION PROGRESSIVE AVEC LE HTML 21 utiliser title pour donner l'utilisateur des informations sur la cible de chaque lien: <li><a href="#location" title="Get the 411 on Gatlinburg, Tennessee">Location</a></li> Plus bas dans la page, dans la section "location", l'attribut title fournit un contexte au lien qui mne la carte de situation: <a href="http://maps.google.com/..." title="View Gatlinburg, Tennessee on Google Maps"> <img src="http://maps.google.com/..." alt="A map showing the location of Gatlinburg, Tennessee"/> </a> Figure 2.2 : Vue de la section location de la page avec le pointeur de souris sur la carte. SMANTIQUE AD HOC Le langage HTML regorge d'attributs permettant d'enrichir les lments concerns. Certains de ces attributs ont un usage ddi, et c'est le cas de alt ADAPWEB.indb 21 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 22 ADAPTIVE WEB DESIGN et de title, mais d'autres, et ils sont nombreux, peuvent tre employs pour augmenter la densit smantique accessible avec les possibilits initiales du langage, et ce de faon moins formelle. Je veux bien sr parler des attributs id et class. Lorsque Dave Raggett travaillait la spcifcation 5 du HTML3.0, il y avait introduit les nouveaux concepts de classifcation et d'identifcation, incarns respectivement par les attributs class et id 6 . Ces attributs n'ont t rendus publics de faon formelle au sein du langage HTML que lors de la sortie du HTML4.0, mais les navigateurs les ont pris en compte peu prs la mme poque que les feuilles de styles CSS (Cascading Style Sheet). Et le CSS a introduit deux slecteurs trs simples destins expressment ces deux attributs. Cela a entran ds le dpart une certaine confusion au niveau de la comprhension de l'usage attendu des attributs class et id. Pendant des annes, quasiment tous les dveloppeurs web qui utilisaient les styles CSS ont cru une corrlation intentionnelle entre les attributs et les slecteurs. Ils taient persuads que class et id avaient t invents pour tre utiliss avec les feuilles de styles. Les blmer serait injuste, car la norme CSS Level 1 n'ofrait pas beaucoup de mcanismes pour slectionner un lment; il semblait opportun de considrer les slecteurs class (par exemple, ul.menu) et id (par exemple, div#content) comme ayant t conus (avec leurs attributs respectifs) pour appliquer les styles de faon globale pour class et locale pour id 7 . Heureusement, nous savons dornavant comment les attributs class et id doivent tre utiliss. L'attribut class a t cr spcialement pour rpondre 5. Le HTML 3.0 constituait une spcifcation ambitieuse en apportant de nombreux nouveaux attributs et balises, dont la plupart ont t abandonns au moment o la norme est arrive maturit avec la version HTML 3.2. Mais les deux attributs class et id ont survcu ce grand mnage. Il est amusant de constater que certaines des construc- tions proposes l'origine dans le HTML3.0 ont refait leur apparition dans le monde du HTML, soit ofciellement dans la version HTML5, soit ofcieusement en tant que microformats. 6. Il n'est pas inutile de remarquer que class et id ont fait une brve apparition ds la spcifcation HTML 2 (http://www.ietf.org/rfc/rfc1866.txt), mais sans avoir t formellement dfnis comme attributs. Ils servaient faire la preuve du mcanisme de tolrance l' inconnu dont devaient tre capables les navigateurs en ignorant les attributs qu' ils ne reconnaissaient pas. 7. Le document de travail HTML3 autorisait cette utilisation, parmi d'autres. Il est dispo- nible l'adresse http://www.w3.org/MarkUp/html3/html3.txt. ADAPWEB.indb 22 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 2 AMLIORATION PROGRESSIVE AVEC LE HTML 23 au faible nombre d'lments disponibles dans le lexique de mots rservs du HTML: Le temps passant, les attentes des personnes voluent et le langage HTML sera de plus en plus sollicit. Un des indices de cette tendance est la pression ressentie pour introduire toujours plus de balises. Le HTML3.0 introduit une technique pour crer des sous-classes d'lments de faon ouverte. Elle permet de difrencier le rle d'un lment de type paragraphe en tant que couplet d'un quatrain, ou de dnoter un terme mathmatique en tant que tenseur. Cette possibilit de crer des distinctions la vole permet de grer des styles de rendu spcifques ou d'envisager des mcanismes de recherche plus fns, sans pour autant compliquer le format gnral des documents HTML 8 . Le but de cet attribut est de lui faire englober une liste de sous-classes pour l'lment auquel elles sont appliques, les classes tant listes de la plus gnrale la plus spcialise 9 : <a href="..." title="..."> <img class="illustration map" src="..." alt="..."/> </a> Dans la spcifcation, l'attribut id a t dfni pour identifer un lment individuel dans une page (et c'est pourquoi chaque lment id doit tre unique dans la mme page). Dans la pratique, cet identifant a t utilis comme point de rfrence pour une rgle de style (#details { ... }), pour un script (document.getElementById('details')) et pour un ancrage (<a href="#details">). Vous vous souvenez que nous avons utilis cet ancrage pour la navigation plus haut dans ce mme chapitre. Toutes les informations relatives un vnement (un stage) Retreats 4 Geeks sont runies dans la mme page. J'ai donc distribu les contenus dans plusieurs lments article 10 ayant chacun son identifant id unique. L' lment article 8. Tir de la section "Scalability" de l'avant-projet de norme HTML3 (voir la note7). 9. Cette description est visible dans le projet HTML3, chaque fois que class est dfni pour un lment. 10. Sans vouloir entraner une quelconque confusion, ajoutons que le HTML5 a aussi introduit l'lment section (que nous utiliserons un peu plus loin). En langage HTML5, cet lment dsigne une section de contenu (vous l'aviez devin ?). Du point de vue de la structure globale, j'aurais pu dclarer la page en tant qu'article, en faisant de chaque sous-article une section. J'ai pourtant choisi de dfnir plusieurs articles, car chaque section me semblait assez ADAPWEB.indb 23 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 24 ADAPTIVE WEB DESIGN est apparu dans HTML5 pour contrler du contenu constituant une partie autonome du document: un article de journal, un message de blog ou, comme dans notre exemple, un aspect distinct d'un sujet. Chacun des articles de la page est alors cibl par les liens de navigation en utilisant comme rfrence d'ancrage son identifant id. Lorsque le visiteur clique sur un lien, cela le mne directement au contenu associ: <body> <header> <h1><img src="/2010/retreat-js/i/logo.png" alt="Retreats 4 Geeks"/></h1> <nav> <ol> <li><a href="#details" title="Find out what this retreat is all about">Details</a></li> <li><a href="#schedule" title="Get familiar with what this retreat will cover">Schedule </a></li> ... </ol> </nav> </header> <div id="content"> <article id="details">...</article> <article id="schedule">...</article> ... </div> </body> Les deux attributs class et id permettent l'auteur de concevoir sa propre smantique en complment de celle dfnie dans la spcifcation. L'ensemble indpendante des autres pour pouvoir ventuellement faire l'objet d'une page distincte. La difrence smantique entre ces deux approches n'est normalement pas signifcative et dpend d'abord des prfrences de l'auteur de la page. ADAPWEB.indb 24 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 2 AMLIORATION PROGRESSIVE AVEC LE HTML 25 qui en rsulte enrichit le marquage en signifcation. Le temps aidant, cela aboutit un ensemble de classifcations et d'identifants partags par toute la plante (par exemple, div#header et ul#nav). Ce jeu de classifcations et d'identifants partags a son tour aliment l'volution du langage HTML (par exemple avec les ajouts tels que les lments header et nav du HTML5, vus plus haut) et suscit l'apparition d'une srie d'extensions au HTML conues de faon collaborative et connues sous le nom de "microformats". CONVENTIONS CODIFIES Les microformats sont des spcifcations non ofcielles produites de faon collaborative pour dfnir les modalits de marquage de contenus de sorte exprimer des lments de smantique (et des mtadonnes) au-del de ce qui est possible avec la norme HTML (ou XHTML). Par essence, un micro- format formalise des conventions de codage. Ces conventions sont le fruit des rponses trouves sur le terrain pour constituer une spcifcation visant combler un manque ou une limitation de la norme HTML. Par exemple, le HTML ne proposant aucune solution robuste pour marquer de faon prcise des donnes de contacts professionnels ou d'vnements, la communaut a cr des microformats pour rpondre ces besoins spcifques mais trs courants. Le premier microformat a t suscit par le besoin d'exprimer des associations entre des individus prsents sur le Web. Il a t baptis XHTML Friends Network (abrg "XFN"). Au sens strict, ce n'tait pas un microformat car le terme a t trouv plus tard, mais XFN a constitu un parfait exemple d'extension de la smantique du HTML dans un domaine clairement dlimit. XFN a t conu par Tantek elik, Matthew Mullenweg et Eric Meyer. L'astuce de ce microformat a t d'employer un attribut rarement utilis : rel. Vous tes sans doute familiaris avec cet attribut rel, si vous l'avez utilis avec l' lment link pour rfrencer une feuille de styles externe (rel="stylesheet"). Il permet donc de dclarer une relation entre la cible d'un ancrage et la page actuelle. L' ide de XFN tait simple: si j'ai besoin de grer un lien entre mon blog et celui d'un collgue, j'ajoute dans l'esprit XFN un attribut rel="collegue" mon lien. Pour faire un lien avec le blog ADAPWEB.indb 25 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 26 ADAPTIVE WEB DESIGN de mon pouse, je spcife rel="amie coloc epouse muse amour soutien" parce qu'elle reprsente toutes ces qualits pour moi 11 . Vu ainsi, cet attribut se limite fournir un complment d' informations concernant une relation et des dtails sur la nature de ce lien vers un autre site. Cela dit, du fait que j'utilise cet attribut pour tous mes liens externes depuis mon blog, et que mes collgues font de mme, nous obtenons au fnal un vritable rseau de liens dans lequel nous pouvons naviguer par programme, ce qui cre une foule de nouvelles opportunits d'extraction et de rutilisation de donnes. C'est d'ailleurs exactement ce qui s'est produit: le XFN s'est rpandu comme une trane de poudre. Les concepteurs de logiciels ont ajout ce microformat dans leurs outils de cration de blog (par exemple, WordPress, Movable Type) et les crateurs des sites de Web social (par exemple, Twitter, Flickr, Last.fm) ont commenc ajouter aux pages des profls d'utilisateurs une section spciale rel="me" (regroupant les liens vers d'autres sites web). Cela a permis l'appa- rition d'outils comme Social Graph de Google pour constituer rapidement un profl complet d'utilisateur en partant d'une seule adresse URL 12 . Nous fournissons un exemple d'utilisation du microformat XFN dans le pied de page footer de notre page Retreats 4 Geeks 13 : <footer>
<figure> <img src="i/aaron-gustafson.jpg" alt=""/> </figure> <h1>Aaron Gustafson</h1> <p>Aaron has been working on the web for nearly 15 years and, in that time, has cultivated a love of web standards and an in-depth knowledge of website strategy and architecture, interface design, and numerous languages (including XHTML, CSS, JavaScript, and PHP). Aaron and his wife, Kelly, own <a rel="external" href="http://easy-designs.net">Easy! Designs</a>, a boutique web consultancy based in Chattanooga, TN. When not neck deep in code, Aaron is usually found evangelizing his findings and sharing his knowledge and passion with others in the field. </p> ADAPWEB.indb 28 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 2 AMLIORATION PROGRESSIVE AVEC LE HTML 29
<p>Aaron has trained professionals at <cite>The New York Times</cite>, Gartner, and the US Environmental Protection Agency (among others), and has presented at the world's foremost web conferences, such as An Event Apart and Web Directions. He is Group Manager of the <a rel="external" href="http://webstandards.org"> Web Standards Project (WaSP)</a> and serves as an Invited Expert to the World Wide Web Consortium's <a rel="external" href="http://www.w3.org/2005/Incubator/owea/"> Open Web Education Alliance (OWEA)</a>. He created <a rel="external" href="http://ecsstender.org">eCSStender</a>, serves as Technical Editor for <a rel="external" href="http://alistapart.com"> <cite>A List Apart</cite></a>, is a contributing writer for <a rel="external" href="http://netmag.co.uk"> <cite>.net Magazine</cite></a>, and has filled a small library with his technical writing and editing credits. His next book, <cite>Adaptive Web Design: Crafting Rich Experiences with Progressive Enhancement</cite>, is due out in early 2011. </p>
</section> Vous constatez que l'lment section comprend un lment de titre h1. Ne vous en inquitez pas, car en HTML5, chaque section produit un nouveau contexte dans lequel vous tes autoris repartir du niveau de titre h1. Je devine que cela va supposer un peu de temps pour vous y habituer, mais c'est aprs tout trs logique et cela permet bien de pallier le faible nombre de niveaux de sous-titres 19 . Si vous avez bien tudi cet extrait, vous savez dj quel endroit doit tre place chacune des classes de hCard. Je vais nanmoins les traiter une une, 19. http://www.whatwg.org/specs/web-apps/current-work/multipage/content-models. html#sectioning-content ADAPWEB.indb 29 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 30 ADAPTIVE WEB DESIGN commencer par la plus simple, "vcard". Cette classifcation doit correspondre l'lment conteneur global, qui est ici l'lment section: <section id="aaron-gustafson" class="vcard"> La classe suivante est celle qui va englober mon nom, donc "fn". Du fait que mon nom est dj indiqu comme contenu de l'lment de titre h1, nous qualifons ce titre par la classe "fn" pour indiquer que le texte de l'lment correspond mon nom. <h1 class="fn">Aaron Gustafson</h1> Passons ensuite la classe de l'adresse "url" menant la page "Easy! Designs" qui est un site web dont je dtiens le contrle: ... <a class="url" rel="external" href="http://easy-designs. net">Easy! Designs</a>, ... En descendant, nous pouvons ensuite ajouter la classe "photo" ma photo, qui se trouve dans un lment figure, lment qui a t introduit dans HTML5 pour hberger un contenu non fractionnable, tel qu'une image ou un dessin avec un titre en option (figcaption). Cet lment doit pouvoir tre supprim du document sans en altrer le sens: <figure> <img class="photo" src="i/aaron-gustafson.jpg" alt=""/> </figure> Il nous reste insrer les deux classes "org" et "role" dans le dernier paragraphe de ma biographie, mais un problme se pose. Plusieurs entreprises et organi- sations sont cites. Laquelle choisir? Et peut-on en mentionner plusieurs? Rien dans le microformat hCard n'interdit de dsigner plusieurs entits et plusieurs fonctions dans la mme fche hCard, mais en pratique rares sont les analyseurs de microformats qui vont chercher plus loin que la premire occurrence rencontre. En efet, les logiciels de gestion de carnet d'adresses ne savent souvent pas grer plusieurs employeurs et plusieurs fonctions pour la mme personne. Pour simplifer, nous allons associer ces classes ma premire fonction, celle de chef de groupe du projet des standards web (Group Manager/ Web Standards Project). La classe "org" est facile implanter, car la donne "Web Standards Project" est dj dans un lment. En revanche, ma fonction est indique dans un texte plus long sans tre marque par un lment spcifque. Pour ne cerner ADAPWEB.indb 30 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 2 AMLIORATION PROGRESSIVE AVEC LE HTML 31 que mon premier rle avec cette classe, nous allons ajouter un lment sans signifcation smantique comme b 20 : ... He is <b class="role">Group Manager</b> of the <a class="org" href="http://webstandards.org">Web Standards Project (WaSP)</a> ... Si nous regardons maintenant le rsultat global, vous pouvez constater que les amnagements lis au microformat hCard sont en fait assez limits: <section id="aaron-gustafson" class="vcard">
<p>... Aaron and his wife, Kelly, own <a class="url" rel="external" href="http://easy-designs. net">Easy! Designs</a> ...</p>
<p>... He is <b class="role">Group Manager</b> of the <a class="org" rel="external" href="http:// webstandards.org">Web Standards Project (WaSP)</a> ...</p>
</section> Pourtant, ces quelques ajouts permettent dornavant de faire produire assez aisment un profl de ma personne par un analyseur de microformats. 20. Et pourquoi l' lment b ? Pourquoi pas span ? En HTML5, l' lment b a t remis l' honneur pour englober une squence de texte devant se dmarquer visuellement du reste du paragraphe sans pour autant prendre une importance particulire. Rien ne vous empche d'utiliser l'lment span, mais b est plus appropri et plus bref. ADAPWEB.indb 31 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 32 ADAPTIVE WEB DESIGN Figure 2.3 : Informations de profl extraites d'une page web avec l'outil Operator. Un grand intrt des microformats est que vous avez toute latitude dans la manire de les utiliser. Les noms de classes ne doivent pas ncessairement survenir dans un ordre prcis (mais ils doivent tre insrs dans un lment parent de la classe approprie) et leur contenu ne doit pas obligatoirement correspondre un format d'exportation prdfni. Comme notre exemple le montre, le microformat hCard ne doit pas mme tre marqu dans une mme partie comme une entre d'annuaire; vous pouvez en distribuer les ADAPWEB.indb 32 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 2 AMLIORATION PROGRESSIVE AVEC LE HTML 33 composants dans votre prose la seule condition d'employer les noms class appropris pour dsigner vos classes. Notez-le sur vos tablettes ! Une fois les donnes pour hCard gres, nous pouvons passer au microformat hCalendar prsent plus haut. Avant de procder au marquage, dcouvrons quelques classes de hCalendar parmi les plus usites. CLASSE DESCRIPTION vevent Indique l'utilisation du microformat hCalendar pour un v- nement. (Cette classe doit tre la classe de l'lment racine du contenu hCalendar.) dtstart Dsigne la date de dbut de l'vnement. dtend Dsigne la date de fn de l'vnement. summary Dsigne le nom de l'vnement. location Dsigne le lieu de droulement de l'vnement. description Fournit des dtails sur l'vnement. Tableau 2.2 : Classes principales du microformat hCalendar. Puisque toute la page d'exemple est ddie l'annonce d'un vnement, notre processus d' injection de classes doit commencer plus haut dans l'arbores- cence DOM. J'ai choisi de commencer au niveau du conteneur de contenu (div#content), auquel j'ai associ la classe racine "vevent". Plus loin, le contenu pour hCalendar sera englob dans article#details. En appliquant ainsi la classe principale un lment ancestral, nous disposons de toute la souplesse pour ajouter d'autres proprits hCalendar dans d'autres lments article: <div id="content" class="vevent"> J'ai mentionn que le premier lment (article#details) devait contenir les principales donnes de l'vnement. Commenons par revoir le code source dans son tat avant application des classes de hCalendar: <article id="details">
<header> <h1>Join us for HTML5 & CSS3</h1>
ADAPWEB.indb 33 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 34 ADAPTIVE WEB DESIGN <p>8–10 April 2011</p>
<section class="main"> <!-- Prsentation de l'vnement --> </section> </article><!-- / #details --> Ce rapide survol a sans doute suf pour reprer les points d'injection de la plupart des classes hCalendar. Nous pouvons sur le champ insrer la balise pour le nom de l'vnement, c'est--dire le sommaire "summary" en dialecte hCalendar: <h1>Join us for <b class="summary">HTML5 & CSS3</b></h1> Si nous progressons dans le code source, nous arrivons la plage de dates "8-10 April 2011". De faon traditionnelle, nous aurions utilis des lments d'abrviation (abbr) pour marquer ces donnes, mais le HTML5 a introduit un lment ddi au marquage d'une donne temporelle qui se nomme time. Le problme est que pour dnoter une date de dbut et une date de fn, il va falloir diviser le contenu actuel en deux pour pouvoir dfnir deux lments time. Mme si cela parat tranger de prime abord, le plus logique consiste englober le seul chifre "8" dans un premier lment time et la date complte "10 April 2011" dans le second. En efet, nous supposons que ce chifre "8" isol est comprendre comme le "8 avril 2011" sous forme abrge (c'est pourquoi l'lment abbr tait appropri auparavant). L' lment time permet de grer les dates plus fnement avec son attribut datetime. C'est ainsi que j'ai reformul la date de dbut en entier: <p> <time datetime="2011-04-08">8</time>– <time datetime="2011-04-10">10 April 2011</time> </p> ADAPWEB.indb 34 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 2 AMLIORATION PROGRESSIVE AVEC LE HTML 35 Les seules classes obligatoires dans hCalendar sont "summary" et la date de dbut. Il sufrait donc d'appliquer la classe "dtstart" au premier lment time pour que le microformat soit valide. Mais puisque nous disposons d'une date de fn, dfnissons cette autre classe dans la foule 21 : <p> <time class="dtstart" datetime="2011-04-08">8</time>– <time class="dtend" datetime="2011-04-10">10 April 2011</time> </p> Avanons un peu dans le contenu. Nous pouvons facilement coder le lieu de l'vnement avec "location" puisque le stage se droule Gatlinburg, TN: <p class="location">Gatlinburg, <abbr title="Tennessee">TN</abbr> </p> Le dernier morceau de notre puzzle hCalendar correspond la "description". Le meilleur candidat pour le contenu de cet lment est la section principale "main" de l'article: <section class="main description"> <!-- Prsentation de l'vnement --> </section> Et voil tout. Une fois les lments du microformat en place, l'utilisateur peut trs facilement extraire l'vnement et l'injecter dans son agenda. 21. Au moment o nous mettons sous presse, certains analyseurs de microformats ont des soucis avec les nouveaux lments et attributs du HTML5. C'est pour cette raison qu' il est avis de dupliquer la valeur de l'attribut datetime dans un titre de l'lment time ou d'utiliser un lment title sur un lment abbr. ADAPWEB.indb 35 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 36 ADAPTIVE WEB DESIGN Figure 2.4 : Informations extraites de ce code source avec l'outil Operator. Ce second exemple pratique de microformat montre comment vous pouvez directement enrichir un marquage dj signifcatif afn d'amliorer le service ofert l'utilisateur. De l'amlioration progressive bien comprise! ADAPWEB.indb 36 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 2 AMLIORATION PROGRESSIVE AVEC LE HTML 37 RIEN DE TEL QUE DE BONNES BASES Le concept d'amlioration progressive est souvent prsent en relation avec le CSS et le JavaScript, mais il concerne tout autant le marquage HTML. Comme ce chapitre l'a montr, chaque fois que nous avons ajout un lment signifcatif, nous avons augment la pertinence de la page en renforant son accessibilit et en la rendant plus facile trouver par les utilisateurs grce son meilleur statut dans les recherches organiques. Nous avons galement vu comment la classifcation et l'identifcation pouvaient rendre le langage HTML encore plus expressif. Enfn, avec les microformats, nous avons vu qu'en choisissant des noms, nous augmentions la densit smantique et la praticit du contenu ainsi marqu. Le marquage smantique est une tape essentielle dans l'approche d'am- lioration progressive ; combin des contenus bien forms, il constitue la fondation sur laquelle se construisent les lments d'une exprience utilisateur de qualit. ADAPWEB.indb 37 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 "Le design est l'esprit mme d'une cration humaine qui s'exprime dans chacune des couches successives qui habillent le produit ou le service." STEVE JOBS ADAPWEB.indb 38 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPI TRE 3 AMLIORATION PROGRESSIVE AVEC LE CSS Si l'on met de ct les quelques sites endormis qui se fondent encore sur des lments font et des images GIF d'cartement, le design web est dornavant mis en forme grce aux styles CSS (Cascading Style Sheets). Bien sr, vous disposez aussi des techniques fondes sur Flash, SVG et canvas, mais si vous voulez donner vos contenus les meilleures disponibilit et accessibilit, vous utilisez le HTML pour marquer le contenu et le CSS pour lui appliquer des styles visuels. Comme le HTML, le CSS est ds l'origine prvu pour tre tolrant aux pannes : un navigateur qui ne comprend pas une rgle de style l'ignore et poursuit son travail 1 2 . En tenant compte de la faon dont le CSS a volu, nous pouvons facilement adopter le principe d'amlioration progressive en tirant proft de cette tolrance pour crer des strates appropries aux capacits des difrentes gnrations de navigateurs. 1. http://www.w3.org/TR/2009/CR-CSS2-20090908/syndata.html#parsing-errors 2. http://www.w3.org/TR/2009/CR-CSS2-20090908/syndata.html#unsupported-values ADAPWEB.indb 39 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 40 ADAPTIVE WEB DESIGN CERTAINES ERREURS SONT SALUTAIRES Ceci n'tant pas un livre sur le langage CSS, je ne vais pas passer en revue toutes les options qu'il permet, mais me contenter d'un bref survol du fonction- nement de CSS, car je pense que cela vous dotera d'une profondeur de vue utile pour comprendre comment construire des architectures de sites amlio- ration progressive. Fondamentalement, le CSS est une collection de jeux de rgles lisibles par les humains. Chaque rgle est compose d'un slecteur et d'un bloc dclaratif regroupant une srie de couples proprit-attribut (des dclarations), qui seront appliqus tout lment correspondant au slecteur. p { color: red; font-weight: bold; } L'exemple prcdent est du CSS lmentaire. Toute personne qui a utilis le CSS (et sans doute mme la plupart de ceux ne l'ayant jamais utilis) peuvent la simple lecture deviner que cette rgle sert slectionner certains paragraphes, puis forcer leur texte apparatre en gras et en rouge. Mais si nous considrons le mme exemple sous l'angle de la tolrance aux pannes, les choses sont moins simples. Lorsqu'un navigateur scrute un fchier CSS pour savoir comment afcher une page, il lit chaque rgle tour tour et tente de l'interprter. S'il lit une rgle qu'il ne sait pas grer, cela dclenche une erreur d'analyse (parsing error). La plupart de ces erreurs rsultent d'une mauvaise rdaction de la rgle CSS (nom de proprit ou valeur mal crite, signe de ponctuation manquant, etc.), mais certaines, bien que conformes la syntaxe du CSS, ne sont pas compr- hensibles par l'analyseur. En supposant que tous les signes de ponctuation sont en place (accolades, points-virgules et deux-points), l'exemple prcdent peut subir une erreur d'analyse en cinq endroits: ADAPWEB.indb 40 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 3 AMLIORATION PROGRESSIVE AVEC LE CSS 41 p { color: red; font-weight: bold; } 1 2 3 4 5 1. Slecteur: p 2. Nom de la premire proprit: color 3. Valeur de la premire proprit: "red" 4. Nom de la deuxime proprit: font-weight 5. Valeur de la deuxime proprit: "bold" D'aprs la spcification, en cas d'erreur d'analyse de son analyseur, le navigateur doit ignorer le composant de niveau suprieur de la rgle dans laquelle s'est produite l'erreur. En supposant que le navigateur ne sait pas ce que signife le mot cl CSS de choix de couleur "red", il ignorera la dclaration color: red, mais appliquera les autres (s'il les comprend). Il en va de mme pour le mot cl de graissage de font-weight nomm "bold". En revanche, si le navigateur ne comprend pas le slecteur (p), il ignorera tout le bloc de rgles, mme si les dclarations individuelles qu'il contient sont de celles qu'il peut interprter. Le principe, trs simple, est le suivant: personne ne pouvant prdire le futur de la norme CSS, il est indispensable que les navigateurs ignorent les dclarations et slecteurs dont ils ne savent que faire. Comme en HTML, cela favorise l'volution du langage et permet d'appliquer l'amlioration progressive aux pages web avec les styles CSS. En ce qui concerne les proprits, exploiter les erreurs d'analyse votre proft est assez simple et cela vous ouvre quelques possibilits tonnantes. Voici un petit exemple d'utilisation du schma de couleur RGBa de CSS3: p { background-color: rgb(137, 224, 160); background-color: rgba(180, 246, 248, .43); } Un navigateur lisant cette rgle va normalement comprendre le slecteur (le slecteur de paragraphe courant p est le plus universel de tous), et donc s'aventurer dans les dtails du bloc pour tomber sur la premire dclaration ADAPWEB.indb 41 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 42 ADAPTIVE WEB DESIGN background-color. Cette proprit de couleur de fond de texte existe dans la norme CSS depuis la version1; le navigateur va donc la comprendre et ira en lire la valeur. Justement, les codes de couleurs RGB font aussi partie de la norme CSS depuis le dbut, et le navigateur saura quoi en faire. Puisque tout s'est bien pass, l'analyseur transmet la rgle au navigateur qui applique background-color: rgb(137, 224, 160); tous les paragraphes de texte concerns. L'analyseur attaque ensuite la seconde rgle. Dans la seconde dclaration, la mme proprit background-color est redfnie avec une nouvelle valeur (mcanisme de cascade). Nous savons dj que le navigateur comprend la proprit. Il va donc lire la valeur, qui utilise la convention de codage RGBa. Si le navigateur la comprend, la valeur est transmise la proprit background-color en remplacement de la prc- dente valeur RGB. En revanche, si RGBa n'est pas gr, une erreur d'analyse survient et le navigateur ignore toute la dclaration. Le texte concern sera trait avec la valeur RGB pour background-color. Bien sr, si le navigateur gre la convention RGBa, il remplace la valeur de background-color en conformit avec le mcanisme de "cascade" (premier C de l'acronyme CSS). Je vais revenir plus en dtail sur ce mcanisme dans la suit du chapitre, mais voici sa rgle de base: pour deux proprits quivalentes (ou identiques) la dernire dfnition prime. Cette dmonstration simple permet de voir comment on peut utiliser la nature tolrante du CSS pour incorporer sans crainte des possibilits plus sophistiques que sauront exploiter les navigateurs les plus capables. Mais ce mcanisme n'est pas limit au niveau des dclarations. Vous pouvez l'appliquer pour masquer tout un groupe de jeux de rgles au moyen d'un slecteur plus slectif: html[lang] p { /* Ici vient un bloc de rgles trs modernes */ } Un navigateur qui rencontre ce jeu de rgles commence par valuer le slecteur. Si le navigateur sait grer les slecteurs bass attribut (dans l'exemple, nous dsignons tous les paragraphes qui dpendent d'un lment html possdant un attribut de langage), il va entrer dans les dtails des rgles pour appliquer les dclarations qu'il sait grer. Mais si le navigateur ne connat pas les slecteurs complexes, l'erreur d'analyse fait ignorer tout le jeu de rgles. ADAPWEB.indb 42 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 3 AMLIORATION PROGRESSIVE AVEC LE CSS 43 Un exemple assez fameux d'emploi de cette technique de distribution slective de rgles selon les capacits du navigateur (plutt titre d'illustration que pour son efet pratique) est la page du jardin CSS Zen Garden d'Egor Kloos intitule "Gemination" 3 . Figure 3.1 : La page Gemination dans IE6 (en haut) et dans IE7 (en bas). Dans ce cas d' cole, Egor Kloos a conu une structure visuelle de base destine la version 6 d'Internet Explorer et adopt la technique MOSe 3. http://www.csszengarden.com/062/ ADAPWEB.indb 43 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 44 ADAPTIVE WEB DESIGN ("Mozilla/Opera/Safari enhancement") 4 pour permettre aux navigateurs plus rcents de fournir un rendu visuel trs difrent. Kloos s'est servi de quelques slecteurs lmentaires pour la mise en pages de base et d'autres slecteurs plus complexes pour les styles volus. Voici un extrait de sa technique: #intro { margin: 0; padding: 0; width: 660px; height: 80px; background: transparent url(introkop.gif) no-repeat right top; } /* ... */ body[id=css-zen-garden] #intro { position: absolute; top: 0; left: 0; float: none; margin: 0; width: 100%; height: 350px; background: none; } Suivant l'ordre des cascades successives, le navigateur gre d'abord la premire rgle pour afcher la partie #intro. Il arrive ensuite la rgle plus volue du mme #intro. Si le navigateur sait grer les slecteurs attribut (qualifs), le rendu de #intro va tre radicalement chang. Dans le cas contraire, il ne change pas. Ce fltrage fond sur les slecteurs constitue une technique intressante, mais perturbe les auteurs de code CSS qui oublient que l'chec d'un tel slecteur composite (au moins deux instructions de slection spares par des virgules) est total: tout le bloc de rgles est ignor: 4. Dave Shea, le mainteneur actuel du site CSS Zen Garden, avait introduit l'expression en 2003, mais l'arrive d'Internet Explorer7, il est tomb dans l'oubli parce que cette nouvelle version ne soufrait pas des limitations de IE6 au niveau des slecteurs. Le texte original est disponible l'adresse http://www.mezzoblue.com/archives/2003/06/25/mose/. ADAPWEB.indb 44 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 3 AMLIORATION PROGRESSIVE AVEC LE CSS 45 p, p:not([title]) { color: red; font-style: bold; } Dans l'extrait prcdent, nous retrouvons les cinq causes d'erreur possibles vues plus haut, et une cause de plus dans le deuxime slecteur (p:not([title])). Un navigateur qui ne comprend qu'un des deux slecteurs (le p est universel) va ignorer la totalit du jeu de rgles et non seulement la variante qui cible les seuls paragraphes de texte ne possdant pas l'attribut title. Vous pourrez trouver ce choix illogique, mais c'est exactement ainsi que la norme CSS2.1 demande de procder: "Toute l'instruction doit tre ignore en cas d'erreur n' importe o dans le slecteur, quand bien mme la suite du slecteur semblerait exploitable" 5 . Lorsque vous savez cela, vous pouvez prendre de meilleures dcisions pour combiner les slecteurs. Une rgle globale consiste ne pas combiner des slecteurs complexes avec des slecteurs simples (ce qui a t fait dans le prcdent exemple), sauf si vous voulez que tous les jeux de rgles ainsi dlimits deviennent inaccessibles aux anciens navigateurs. Nous reviendrons dans quelques paragraphes cette technique, mais aprs ce bref dtour du ct de la spcifcit. Le concept de spcifcit est un autre concept majeur de CSS. Il dtermine le nombre d'lments pouvant tre slectionns par le mme slecteur. C'est la seule technique qui permette d'outrepasser le mcanisme de cascade (nous y revenons). Certains slecteurs sont plus slectifs que d'autres: un slecteur d'identifant comme #intro est dix fois plus spcifque qu'un slecteur de classe comme vcard, lui-mme plus prcis qu'un slecteur d'lment commep) 6 . L' valuation de la spcifcit d'un slecteur est la somme des spcifcits de tous ses composants. Une rgle dpendant d'un slecteur spcifque aura toujours priorit sur une rgle lie un slecteur plus large, quel que soit leur ordre d'apparition dans la cascade. Nous l'avons vu avec le slecteur d'attribut trs fut du site d'Egor Kloos: la rgle la moins spcifque apparat en dernier dans le fchier CSS, mais sa priorit reste infrieure la premire, qui est donc celle applique. 5. http://www.w3.org/TR/2009/CR-CSS2-20090908/syndata.html#rule-sets 6. Pour en savoir plus sur l'valuation du niveau de spcifcit, vous pouvez consulter l'article d'Andy Clarke "CSS Specifcity Wars" (http://www.stuffandnonsense.co.uk/archives/ css_specificity_wars.html). ADAPWEB.indb 45 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 46 ADAPTIVE WEB DESIGN Il faut du temps pour bien matriser ce concept de spcifcit des slecteurs. Prvoyez quelques maux de tte si vous dcidez d'appliquer tous vos styles en relation avec des slecteurs trs pointus (avec un slecteur identifant pour chaque style). En efet, vous serez parfois forc de dfnir des slecteurs encore plus spcifques, combinant deux identifants. Pour vous pargner de dclencher une course la spcifcit, je vous conseille de vous retenir de rendre vos slecteurs trop spcifques sans raison imprieuse. Revenons au code d'Egor Kloos. Appliquons ce que nous venons d'apprendre au niveau des erreurs d'analyse dans les slecteurs combins; l'objectif sera de rduire la spcifcit des jeux de rgles sophistiques d'Egor sans perdre l'esprit de son travail: #intro { /* Ancienne prsentation */ } /* ... */ [foo], #intro { /* Nouvelle prsentation volue */ } Dans cette reformulation, j'ai modif le second jeu de rgles en indiquant un slecteur combin qui cible un lment possdant un attribut nomm foo et un autre avec un identifant nomm intro. L'astuce est que le premier slecteur (celui attribut) est un leurre. Le nom d'attribut foo est non seulement non standard, mais il n'est utilis nulle part dans le code HTML de la page CSS Zen Garden. L'ajout de ce slecteur a pour seul efet de rendre le jeu de rgles invisible tous les navigateurs qui ne savent pas grer les slecteurs attributs. Le point le plus important est que cette redfnition ne modife en rien l'impact du slecteur #intro: sa spcifcit est la mme qu'auparavant, ce qui garantit que le mcanisme de cascade continue dterminer l'application des styles. Cette technique volue n'est sans doute pas celle que vous allez adopter systmatiquement en CSS, mais il sera utile de vous en souvenir lorsque vous voudrez fltrer des jeux de rgles sans altrer la spcifcit d'un slecteur. En termes de maintenance, cette technique est dconseille pour plus d'une rgle de temps autre. Il existe d'autres mthodes pour efectuer du fltrage en masse, et nous les dcouvrirons bientt. ADAPWEB.indb 46 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 3 AMLIORATION PROGRESSIVE AVEC LE CSS 47 DIVISER POUR BIEN RGNER Le mcanisme de "cascade" est un concept stratgique de CSS, nous l'avons dit comme nous avons dj prcis que ce livre n'ofrait pas de place pour un rappel exhaustif du concept de cascade. Cependant, un point peut vous permettre de devenir rapidement un expert en amlioration progressive : l'ordre. L'ordre compte, beaucoup. Toutes choses gales par ailleurs en termes de spcifcit, le rsultat d'une rgle CSS dpend de la proximit entre la dclaration de style et son lment cible. Nous avions vu ce point dans l'exemple qui ralisait deux afectations de couleur de fond background-color. Il en va de mme au niveau suprieur de deux jeux de rgles: h1 { font-size: 2em; } h1 { font-size: 3em; } Cet exemple va afecter une valeur de 3em la proprit font-size de tous les lments h1. Ce cas d'cole dfnissant un second jeu de rgles avec le mme slecteur juste aprs le premier ne se rencontrera pas souvent, mais quelque chose du mme genre est moins rare. Prenons comme exemple les images de l'lment article relatif l'hbergement (nomm "Lodging") du site de dmonstration Retreats 4 Geeks: ADAPWEB.indb 47 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 48 ADAPTIVE WEB DESIGN Figure 3.2 : Rendu de l'article Lodging. Voici le code source HTML de cet article: <article id="lodging">
<section class="main"> <!-- description des locaux --> </section>
<aside class="extra"> <ul class="gallery"> <li> <figure class="frame"> <img class="inner" src="i/room.jpg" alt="" title="..."/> ADAPWEB.indb 48 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 3 AMLIORATION PROGRESSIVE AVEC LE CSS 49 </figure> </li> <!-- Autres figures --> </ul> </aside>
</article> Vous remarquez que cet lment article dfnit la mme valeur "frame" de class pour chaque lment figure pour garantir la cohrence dans l'aspect des contours d'image. L' image principale a reu un complment de valeur s'crivant "focal". Cela permet d'appliquer deux rgles CSS difrentes de mme spcifcit afn d'afecter les styles appropris figure.focal. Voici un exemple de dfnition de rgles avec une redfnition: .frame { margin: 0 auto 40px; } .focal { margin: 0 20px 25px 30px; } Ces deux jeux de rgles s'appliquent l'lment figure de l'image principale de cet lment article (et de tous les autres lments de mme nom de la page). Les deux slecteurs ont la mme spcifcit, mais puisque le second jeu redfnit la proprit du premier, la valeur de la proprit margin de l'image principale (celle slectionne par "focal") sera de "0 20px 25px 30px" au lieu de "0 auto 40px." Dans la pratique, les feuilles de styles contiennent souvent des centaines de jeux de rgles. Il devient alors facile de se faire piger par les efets de la proximit. Pour nous en prmunir, nous pouvons adopter une approche par couches dans la conception CSS. Si nous revenons un peu en arrire, nous constatons que le design d'un site web comporte trois aspects majeurs: la typographie, les couleurs et la mise en page. Chacun de ces aspects apporte quelque chose, participant ainsi au rsultat fnal. Pour ce qui concerne l'amlioration progressive en relation avec le CSS, nous pouvons adopter la mme rpartition en plusieurs niveaux de support bien distincts, en correspondance avec les capacits des navigateurs: la typographie, puis la typographie avec des couleurs, et enfn, la typographie avec des couleurs et une mise en page sophistique. ADAPWEB.indb 49 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 50 ADAPTIVE WEB DESIGN Nous avons dit que l'ordre d'apparition des rgles a son importance. Pour concevoir de faon progressive, nous devons confronter notre dsir de distribuer les niveaux de conception la logique de l'interprtation en cascade de nos rgles. D'un point de vue pratique, cela suppose d'dicter les groupes de dclarations d'un mme niveau dans un ordre dfni: d'abord la typographie, puis la mise en page et enfn les couleurs. Pourquoi dans cet ordre? Nous y reviendrons trs bientt. Vous pouvez dfnir ces jeux de rgles dans des fchiers de feuilles de styles difrents (imports ou lis) ou dans un seul gros fchier 7 . L'approche multi- fchiers est facile grer et logique, mais elle a un cot en performances: il faut rapatrier chaque feuille de styles dans une requte HTTP distincte. De plus, certains navigateurs ne savent pas garder en cache local plus d'un niveau de feuille de styles dans le sens descendant (celui d'une feuille importe dans une autre). C'est la raison pour laquelle je trouve l'approche mono-fchier plus sense; c'est celle adopte pour le site de dmonstration Retreats 4 Geeks. Illustrons cette approche par niveaux de dfnition des styles en commenant par la situation la plus simple: sans aucun style. La Figure3.3 montre l'aspect de la section sur l'hbergement (lodging) dans Safari. Seuls les styles par dfaut du navigateur sont appliqus. 7. Opter pour un fchier de feuilles de styles unique ne vous empche pas de rpartir les rgles dans plusieurs fchiers CSS. Il existe plusieurs outils du ct serveur pour combiner des fchiers CSS en un seul. Vous proftez ainsi des deux avantages: vous importez les fchiers de dtails de style dans un fchier squelette destin les accueillir, fchier que vous transmettez aux clients lors de leurs requtes. Vous trouverez un exemple l'adresse http://www.easy-reader.net/archives/2010/07/11/template-based-asset-munging-in- expressionengine. ADAPWEB.indb 50 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 3 AMLIORATION PROGRESSIVE AVEC LE CSS 51 Figure 3.3 : "Lodging" sans CSS. Vous constatez que le contenu est tout fait utilisable avec ces styles implicites. L'apparence n'est pas sophistique, mais tout le contenu est lisible. En ajoutant un niveau de rgles typographiques, nous arrivons l'aspect de la Figure3.4. ADAPWEB.indb 51 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 52 ADAPTIVE WEB DESIGN Figure 3.4 : "Lodging" agrment de styles typographiques. L'amlioration est limite, mais pas ngligeable. Les navigateurs qui ont des soucis dans le rendu des styles de mise en page CSS disposent ainsi d'un niveau intermdiaire, ce qui est plus agrable pour les utilisateurs de ces navigateurs que les forcer de subir les inconvnients d'une tentative de rendu incomplte. Le niveau suivant de support des styles est celui de la couleur. C'est celui qui est en gnral accessible aux navigateurs en mme temps que la typographie de base (dans certains cas, cela va jusqu'aux images de fond). La Figure3.5 montre la mme page web avec les lgers enrichissements apports par la mise en couleur du mme article. ADAPWEB.indb 52 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 3 AMLIORATION PROGRESSIVE AVEC LE CSS 53 Figure 3.5 : "Lodging" agrment de couleurs. Nous sommes clairement dans un processus d'amlioration progressive. Le dernier niveau d'application de styles qui nous intresse ici est celui du contrle global de la disposition des lments sur la page. Son rsultat a t montr quelques pages plus haut dans la Figure3.2. J'ai dit que tous ces niveaux seront dfnis dans le mme fchier que j'ai structur en trois sections. Voici l'extrait des styles applicables aux images de l'article "Lodging": /* =Typographie */ img { display:block; } /* =Mise en page */ @media screen { .frame .inner { border: 10px solid; } } ADAPWEB.indb 53 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 54 ADAPTIVE WEB DESIGN /* =Couleurs */ .frame .inner { background-color: rgb(227, 222, 215); border-color: rgb(227, 222, 215); } Vous avez certainement not la prsence du bloc @media qui englobe les rgles de style pour afchage sur cran. Cet lment n'est pas prsent fortuitement: il garantit que tous les clients profteront des jeux de rgles concernant la typographie et les couleurs en isolant celles de l'afchage aux seuls navigateurs qui savent grer le type de mdia "screen". Le mme principe est facilement extensible aux impressions ou tout autre mdia, mais nous verrons cela plus loin. L' lment @media a un autre avantage : les navigateurs vraiment anciens (par exemple, Netscape4) ne le comprenant pas, ils ignorent ce bloc et nos styles de mise en page leur restent invisibles. Ces navigateurs proftent donc sans perturbation des rgles de typographie et mme, pour la plupart d'entre eux, de celles des couleurs. Revenons une question laisse en suspens: pourquoi ai-je relgu les rgles de couleurs en dernier? Mon raisonnement est simple. J'adore les raccourcis CSS qui permettent de combiner plusieurs rgles en une seule. Nous en avons rencontr une plus haut: border: 10px solid. Cette criture abrge quivaut aux quatre lignes suivantes: border-top: 10px solid; border-right: 10px solid; border-bottom: 10px solid; border-left: 10px solid; Ce n'est pas tout. Chacune des ces dclarations est elle-mme une version raccourcie. Par exemple, border-top: 10px solid quivaut aux trois lignes suivantes: border-top-width: 10px; border-top-style: solid; border-top-color: inherit; Vous voyez que les raccourcis CSS rduisent fortement la complexit des feuilles de styles CSS. Supposons que dans le prcdent exemple, les jeux de rgles pour les couleurs aient t placs avant celles de mise en page. L'attribut border-color aurait reu la valeur gris clair, mais le raccourci border qui arrive aprs dans les ADAPWEB.indb 54 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 3 AMLIORATION PROGRESSIVE AVEC LE CSS 55 rgles de mise en page aurait annul la valeur de border-color, parce que la spcifcit du jeu de rgles est la mme et que border redfnit toujours border-color, mme de faon implicite (la valeur par dfaut est "inherit", ce qui entrane la rutilisation de la couleur en vigueur pour le texte). Voici pourquoi je conseille de placer les rgles de couleurs en dernier. Les raccourcis CSS sont trs pratiques. Ils allgent l'criture des jeux de rgles et rduisent la longueur du fchier, mais vous devez bien contrler l'ordre dans lequel vous les faites appliquer. Puisque nous en sommes aux couleurs, j'en profte pour ajouter que dans certains cas, vous voudrez utiliser la couleur dans un contexte spcifque la mise en page (par exemple pour une couleur de fond). Dans ce cas, il peut tre intressant d'isoler une sous-section de vos rgles avec @media, comme nous l'avons fait pour tout le bloc de mise en page: /* =Couleur */ .frame .inner { /* Couleurs pour tous les mdias */ } @media screen { .frame .inner { /* Couleurs spcifiques aux crans */ } } En partant des bases saines de notre infrastructure stratife, il devient trs simple d'ajouter des modules en fonction des besoins. Voici des exemples d'efets (de style): /* =Couleurs */ a:link, a:visited { color: rgb(180, 49, 25); } a:hover { color: rgb(235, 123, 35); } /* ... */ /* =Effets */ @media screen { a { transition-duration: .5s; } } ADAPWEB.indb 55 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 56 ADAPTIVE WEB DESIGN Vous disposez maintenant d'une bonne connaissance des techniques permettant d'exploiter le mcanisme de tolrance aux pannes de CSS pour amliorer la qualit de la navigation. Nous pouvons donc aller plus loin en ajoutant une autre couche d'enrichissements. PETIT QUIPROQUO, GRANDS EFFETS De par sa tolrance aux pannes, le CSS est un complment presque idal la panoplie des outils d'amlioration progressive. L' ignorance est souvent un bien parce qu'elle nous permet de bien exploiter les nouveauts fonctionnelles et syntactiques sans craindre de perturber les navigateurs qui ne suivent pas la cadence. Mais que se passe t-il lorsqu'un navigateur croit qu'il comprend une rgle, mais qu'il la comprend mal? Oui, je veux bien sr parler d'Internet Explorer. IE9 a t lanc lorsque ce livre partait chez l'imprimeur. De ce que j'ai pu en voir, il semble que ses auteurs ont bien rpondu leur promesse de conformit aux standards (y compris le CSS), d'une manire totalement interoprable. IE8 n'tait pas non plus en retard par rapport CSS, mais si vous repensez IE7 et (frisson) IE6, les choses deviennent franchement sombres. Fort heureusement, les brillants individus de Microsoft nous avaient concoct une technique permettant d'isoler facilement les sections spcifques leurs navigateurs dans le code CSS, JavaScript et mme dans le marquage HTML: les commentaires conditionnels 8 . Il s'agit exactement de ce quoi vous pourriez vous attendre: des commentaires HTML dans un format spcial qui sont pris en compte par IE, mais ignors par tous les autres navigateurs (aprs tout, ce sont des commentaires). Les commentaires conditionnels cadrent bien avec l'approche d'amlioration progressive. En efet, mme si l'amlioration progressive n'est pas directement dpendante du type de navigateur, certains navigateurs ont besoin qu'on les aide un peu rpondre aux attentes des utilisateurs. Les commentaires condi- tionnels permettent aux concepteurs de cibler une ou plusieurs versions d'IE. En voici un court exemple d'utilisation: 8. http://msdn.microsoft.com/en-us/library/ms537512(VS.85).aspx ADAPWEB.indb 56 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 3 AMLIORATION PROGRESSIVE AVEC LE CSS 57 <link rel="stylesheet" href="c/main.css"/> <!--[if IE 9]><link rel="stylesheet" href="c/ie9.css"/><![endif]--> <!--[if lte IE 8]><link rel="stylesheet" href="c/ie8.css"/><![endif]--> <!--[if lte IE 7]><link rel="stylesheet" href="c/ie7.css"/><![endif]--> <!--[if lte IE 6]><link rel="stylesheet" href="c/ie6.css"/><![endif]--> Dans ce bref extrait, nous demandons en premire ligne d'inclure notre fchier CSS principal (main.css). Nous demandons ensuite d'inclure de faon condi- tionnelle une feuille de styles ddie IE9, au moyen de la syntaxe if IE9. Nous y reviendrons, mais intressons-nous d'abord aux trois instructions suivantes. La premire cible IE8 et les versions antrieures (l'expression if lte IE 8 signife "si infrieur ou gal IE8"), la deuxime cible IE7 et les versions antrieures avec if lte IE 7, et la dernire ne concerne que la version6 et antrieures. Si elles sont prsentes dans cet ordre, ces commentaires simpli- fent l'application des styles CSS spcifques : les correctifs (patches) que vous appliquez une version plus rcente d'IE se propagent aux versions antrieures. Quel intrt? Si la version IE7 soufrait d'un problme, il est fort probable que le problme existait dj dans IE6. Venons-en au commentaire conditionnel d'IE9. Il ne cible que cette version du navigateur. Nous aurions pu ratisser large comme pour les versions antrieures, mais IE9 constitue une importante volution par rapport IE8, y compris au niveau du support de CSS. Les problmes qu'il prsente ayant beaucoup moins de chances de concerner les versions antrieures, nous leur pargnons l'analyse de ces rgles complmentaires. Nous aurions pu procder de mme pour IE8, car son support CSS est trs difrent de celui d'IE7 et il n'hrite que de peu de problmes de son prdcesseur. Mais puisque nous devions appliquer quelques fltres pour IE, nous avons choisi de ne les crire qu'une fois. ADAPWEB.indb 57 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 58 ADAPTIVE WEB DESIGN QUITTER LA BASE Le rseau web forme une vraie rupture par rapport aux supports d' infor- mation que nous connaissions jusque-l. Ce n'est pas un nouveau mdium imprim, ni de la tlvision, ni de la radio, ni un jeu vido, un kiosque ou une application, mais un hybride de tous ces mdias et plus encore. Devant ce constat, l'organisme de normalisation W3C a dfni des possibilits de cibler un mdia en particulier. Nous en avons proft plus haut dans le bloc @media, mais vous tes sans doute plus habitu vous servir de dclarations media avec des feuilles de styles lies ou imbriques (grce l'attribut media) ou en tant que sufxe des instructions @import. C'est le W3C qui est le gardien de la liste des types de mdias ofcielle, mais il n'est pas rfractaire l'enrichir en rponse aux volutions technologiques. Pour le moment, cette liste ofcielle normalise l'application de styles CSS aux mdias suivants: cran d'ordinateur, imprim, tlvisions, terminaux portables, et dans les contextes des assistants d'accessibilit tels que les lecteurs d'crans, les imprimantes de braille, et les appareils retour de force. En l'absence d'indication de mdia cible, le choix implicite est l'cran d'ordinateur, "screen". Au dpart, les dsignations de mdias cibles sont univoques, mais comme avec les slecteurs, vous pouvez combiner plusieurs noms de mdias en les sparant par des virgules (la virgule a l'efet d'un OU logique). Dans l'exemple qui suit, le fchier main.css sera appliqu aux deux types de mdias "print" et "screen": <link rel="stylesheet" href="main.css" media="screen, print"/> Les dsignations de mdias sont tolrantes aux pannes, mais le mcanisme de tolrance est assez difrent de celui qui s'applique aux slecteurs (n'en redoutez aucune confusion): face un type de mdia inconnu dans une liste multiple virgules, les types inconnus sont simplement ignors et les types connus sont pris en charge 9 . Hlas, dans le cas des dclarations de mdias pour @import, les versions d'IE antrieures la version8 sment la zizanie mme pour les types de mdias qu'elles reconnaissent. C'est une raison de plus de s'en tenir @media, sauf lorsque vous voulez vraiment masquer certaines rgles pour ce navigateur: 9. La spcification CSS 2.1 (http://www.w3.org/TR/2009/CR-CSS2-20090908/media. html#media-types) aborde ce sujet pour @media et pour @import, mais elle est sans voix pour le cas similaire des styles lis et incorpors. Cela dit, tous les navigateurs grent les dsignations de mdias en HTML de faon homogne. ADAPWEB.indb 58 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 3 AMLIORATION PROGRESSIVE AVEC LE CSS 59 @import not-for-IE7-or-below.css' screen; @media screen, print, refrigerator { /* IE va pouvoir accder ces rgles */ } Les dsignations de mdias sont trs puissantes, puisqu'elles permettent de crer des mises en page adaptes aux mdias cibles. Un des premiers avoir utilis cette technique est Eric Meyer. En l'an 2000, il nous a montr comment abandonner les pages cran "adaptes aux imprimantes" en ajoutant une feuille de styles spcifque une sortie sur imprimante, disponible dans toutes les pages web 10 . Deux ans plus tard, Eric a tendu ce principe en nous montrant comment utiliser du CSS avanc (tel que du contenu gnr la demande) pour amliorer progressivement cette exprience 11 . Revenons notre feuille de styles principale. Nous pouvons assez aisment y ajouter un support d'autres mdias grce notre infrastructure stratife: /* =Typographie */ /* Typographie pour tous les mdias */ @media screen { /* Typographie rserve aux crans */ } @media print { /* Typographie rserve aux imprimantes */ } /* =Mise en page (Layout) */ /* Mise en page pour tous les mdias */ @media screen { /* Mise en page rserve aux crans */ } @media print { /* Mise en page rserve aux imprimantes */ } /* =Couleurs */ /* Couleurs pour tous les mdias */ @media screen { /* Couleurs rserves aux crans */ } @media print { /* Couleurs rserves aux imprimantes */ } 10. http://meyerweb.com/eric/articles/webrev/200001.html 11. http://www.alistapart.com/articles/goingtoprint/ ADAPWEB.indb 59 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 60 ADAPTIVE WEB DESIGN Une autre approche consiste regrouper tous les styles d'imprimantes dans la mme dclaration @media en fn de fchier: /* =Typographie */ /* Typographie pour tous les mdias */ @media screen { /* Typographie rserve aux crans */ } /* =Mise en page */ /* Mise en page pour tous les mdias */ @media screen { /* Mise en page rserve aux crans */ } /* =Couleurs */ /* Couleurs pour tous les mdias */ @media screen { /* Couleurs rserves aux crans */ } /* =Impression */ @media print { /* Redfinitions globales rserves aux imprimantes */ } Dans le cas de l'impression, ce regroupement dans une dclaration @media est logique, mais il est prfrable de distribuer les dclarations pour les autres mdias. Chaque projet tant difrent, vous n'aurez qu' faire des essais et voir ce qui convient le mieux. Des dclarations de mdias d'avant-garde Quelques annes aprs le support de l'indpendance des mdias, le W3C a renchri en introduisant les requtes de mdias, une sorte de dsignation de mdia anabolise. Ces requtes fournissent des dtails au sujet de l'environ- nement du poste utilisateur, comme la largeur de la fentre du navigateur ou son orientation (portrait ou paysage). La puissance des requtes de mdias vous permet d'adapter fnement vos designs des terminaux spcifques. Elles reprsentent de ce fait un outil indispensable de plus pour l'amlioration progressive. ADAPWEB.indb 60 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 3 AMLIORATION PROGRESSIVE AVEC LE CSS 61 Grce une requte de mdia (que vous pouvez placer partout o vous placez des dsignations de mdias normales), vous ajoutez dans une page un jeu de rgles adaptes aux capacits du logiciel agent utilisateur. Voyons un exemple: @media (min-width:1025px) { /* ... */ } Ce groupe de jeux de rgles n'entre en vigueur que si la largeur de fentre du navigateur est gale ou suprieure 1025pixels. Le module CSS3 qui dfnit les requtes de mdias a atteint le niveau Candidate Recommendation au milieu de l'anne 2009. Il stipule comment rcuprer les dimensions de la fentre de navigateur, parmi d'autres paramtres du terminal (orientation, nombre de couleurs afchables, rsolution, etc.). Actuellement, le standard ne gre pas encore toutes les proprits, mais il y en a assez pour que la technique soit digne d'intrt. Les requtes de mdias reprennent la syntaxe de dsignation de mdia standard en y ajoutant l'oprateur ET logique avec "and" et l'oprateur de ngation avec "not". Ils vous donnent un supplment de souplesse pour cibler le mdia. Pour une cible cran de largeur suprieure 1 024 pixels, nous crirons : screen and (min-width:1025px). Pour tous les mdias sauf les imprimantes, nous crirons: not print. Cependant, il n'y a pas d'oprateur OU. De ce fait, vous ne pouvez pas rdiger des requtes conditionnelles aussi complexes qu'avec un langage de programmation (comme dans l'expression A et B ou B et C, mais pas A et C). Mais pour obtenir l'efet de l'oprateur OU, il suft d'utiliser une virgule. Voici une requte de mdia composite assez complte suivie de commentaires en dcrivant le fonctionnement: @media screen and (min-device-width:1024px) and (max-width:989px), screen and (max-device-width:480px), screen and (max-device-width:480px) and (orientation:landscape), screen and (min-device-width:481px) and (orientation:portrait) { /* Mise en page pour fentre de navigateur de moins de 990pixels ou iPhone sous iOS3 ou iOS4 (ou quivalent) en mode Paysage ou iPad (ou quivalent) en mode Portrait */ } ADAPWEB.indb 61 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 62 ADAPTIVE WEB DESIGN Nous pouvons maintenant retoucher notre feuille de styles avec des requtes de mdias de sorte amliorer progressivement notre page en dfnissant une mise en page fondamentale applicable aux anciens navigateurs et aux tablettes. J'ai ensuite ajust cette mise en page pour l'adapter aux navigateurs sur cran de bureau comme aux petits crans des tlphones portables: /* =Mise en page minimale */ @media screen { /* ... */ } /* =Mise en page complte */ @media screen and (min-width:1025px) { /* ... */ } /* =Mise en page troite */ @media screen and (max-width:765px) { /* ... */ } La Figure3.6 montre l'aspect des trois mises en page. Certaines difrences sont drastiques entre mdias (par exemple, les modalits de navigation) et d'autres plus subtiles (comme la fche de contact au format carte postale qui s'ajuste en largeur l'cran). Sans entrer dans les dtails de ces difrences, nous constatons que les requtes de mdias permettent de crer des mises en page vraiment adaptatives uniquement par des styles CSS. Pour en savoir plus au sujet des mises en page adaptatives, consultez la bibliographie en fn de Chapitre6. ADAPWEB.indb 62 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 3 AMLIORATION PROGRESSIVE AVEC LE CSS 63
Figure 3.6 : Trois mises en page gres par des requtes de mdias. @media screen and (min-width:1025px) { /* ... */ } TROIT NORMAL/TABLETTE LARGE @media screen and (max-width:765px) { /* ... */ } @media screen { /* ... */ } ADAPWEB.indb 63 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 64 ADAPTIVE WEB DESIGN LA RICHESSE TOUS LES TAGES Nous avons dcouvert plusieurs techniques pour exploiter le langage CSS en vue d'amliorer progressivement nos pages web. Certaines de ces techniques, comme l'utilisation fructueuse des erreurs d'analyse, sont d'un emploi si simple et si courant que vous allez sans doute les adopter immdiatement. D'autres, comme la sparation en niveaux des rgles de styles, peuvent vous demander d' infchir vos pratiques actuelles ou vous paratre totalement nouvelles. En combinant fnement ces techniques, niveau par niveau, vous tes assur d'ofrir vos visiteurs une exprience de navigation optimale, quel que soit le navigateur et le terminal d'accs. ADAPWEB.indb 64 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 ADAPWEB.indb 65 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 "Je n'accepte pas d'adopter un outil avant d'tre assur que je m'en servirai bien. Faire moiti dans ce domaine est pire que ne rien faire. Les gens ne veulent pas d'une interaction de mauvaise qualit." SETH GODIN ADAPWEB.indb 66 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPI TRE 4 AMLIORATION PROGRESSIVE AVEC JAVASCRIPT Le 7 fvrier 2011, peu de temps aprs que le groupe Gawker Media a lanc le nouvel habillage unif de ses difrents sites (Lifehacker, Gizmodo, etc.), les visiteurs de ces sites tombrent sur un bel cran vide (voir Figure 4.1). La nouvelle plate-forme tait entirement fonde sur JavaScript pour le chargement de contenu dans les pages. Une erreur dans le code JavaScript a fait que toutes les pages taient afches vides 1 . Cette erreur unique a entran une "indisponibilit" de tous les sites (mme si les serveurs restaient oprationnels) de Gawker, ce qui leur a fait perdre des milliers de pages vues et d'afchages de bannires publicitaires. Cette perte sche leur aurait t pargne s'ils avaient tenu compte des principes d'amlioration progressive. 1. Cette avarie est raconte dans la page http://blogs.wsj.com/digits/2011/02/07/gawker- outage-causing-twitter-stir/. Jeremy Keith et Mike Isolani ont fourni des commentaires au sujet de la fabilit JavaScript des sites Gawker (http://adactio.com/journal/4346/ et http://isolani.co.uk/blog/javascript/BreakingTheWebWithHashBangs, respectivement). J'ai ajout mon grain de sel l 'afaire (http://easy-reader.net/archives/2011/02/09/ you-cant-rely-on-javascript/). ADAPWEB.indb 67 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 68 ADAPTIVE WEB DESIGN Figure 4.1 : Le site Lifehacker. Vide. Rares sont les outils pouvoir rivaliser avec JavaScript quand il s'agit d'animer des pages web. Ce langage permet de crer des interactions sophistiques et des interfaces dynamiques. Les concepteurs web en sont depuis longtemps convaincus et se sont jets sur l'opportunit pour produire des pages plus attrayantes, pour valider les formulaires, etc. De nos jours, un dveloppeur JavaScript n'a aucun mal crer quelque chose d'tonnant en accord avec l 'approche d'amlioration progressive. Il n'en a pas toujours t ainsi. Du milieu la fn des annes 1990, crire du JavaScript tait considr comme de la magie noire. Pour chaque bribe de code HTML un peu moins limpide, nous aboutissions en gnral dix fois pire en JavaScript parce que les deux navigateurs phares de l'poque, Netscape et Internet Explorer, avaient deux interprtations du langage HTML 2 sufsamment divergentes pour que toutes les sections vraiment captivantes deviennent horribles rdiger. 2. Le langage JavaScript a t invent par Brendan Eich. Il a vu le jour en tant que sous-systme de Netscape2 fn 1995. Microsoft a ensuite cr son dialecte de JavaScript sous le nom "JScript" (pour des raisons de droits intellectuels) et l'a lanc au cours de l't 1996 avec Internet Explorer3 (le premier navigateur avoir intgr un support des styles CSS). ADAPWEB.indb 68 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 4 AMLIORATION PROGRESSIVE AVEC JAVASCRIPT 69 Un exemple : pour trouver un lment (par exemple, #location) dans un document (au sens strict, dans le DOM, Document Object Model), il fallait deux conventions difrentes: document.layers['location']; // Netscape document.all['location']; // IE Cette cacophonie nous a obligs crire quasiment tous nos scripts deux fois, ou au moins les trufer de fourches (des points o le script prend une voie ou une autre selon le navigateur dtect), et nous avons fni par nous y perdre. Comme dcrit dans le Chapitre2, la fn des annes 1990 a t une priode frntique sur le Web : c'tait la guerre des navigateurs. Chaque nouvelle version de Netscape et de Microsoft IE proposait de nouvelles fonctions aux dveloppeurs, dans l'espoir de capter la plus grande part de march possible parmi les navigateurs. Cette course la suprmatie a caus bien des soucis aux dveloppeurs; les deux variantes incompatibles de JavaScript nous ont obligs passer tellement de temps ajuster les divergences que nous perdions de vue la faon dont fonctionnait le langage et omettions d'apprendre bien l 'articuler avec le HTML et le CSS. Un jour, l'association ECMA (European Computer Manufacturers Association) a standardis JavaScript 3 et l'organisme W3C a difus sa spcifcation DOM. Les sables mouvants sur lesquels nous btissions ont enfn laiss place du sol stable sur lequel nous allions pouvoir envisager de meilleures faons de raliser les choses: document.getElementById('location'); // DOM unifi 3. Netscape a soumis JavaScript ECMA International comme candidat un standard en 1996. La version standardise de JavaScript a t nomme "ECMAScript", mais nous utilisons toujours le nom JavaScript, sauf lorsque nous voulons parler de sa spcifcation. ADAPWEB.indb 69 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 70 ADAPTIVE WEB DESIGN QUITTER SA ZONE DE CONFORT Une des premires leons apprises une fois la poussire retombe tait que le langage JavaScript n'tait pas la panace pour l'interaction sur le Web. En fait, le langage n'tait pas si fable que cela. En efet, mme une fois que le W3C a standardis le modle DOM et que les navigateurs ont tous intgr le standard du langage, les divergences subsis- taient; elles taient assez nombreuses entre les implmentations pour qu'il soit impossible de prsupposer la disponibilit de certaines mthodes, notamment celles, vitales, de traverse de la structure arborescente du DOM, document. getElementById() (pour accder aux lments d'aprs leur identifant) et document.getElementsByTagName() (pour les trouver d'aprs leur nom). En outre, mme lorsqu'un navigateur supportait totalement la norme JavaScript, l'utilisateur (ou l 'administrateur informatique de son entreprise) gardait le dernier mot en dcidant ou pas d'activer JavaScript sur le poste client 4 . Nous avons fni par comprendre que le support de JavaScript n'allait pas de soi et avons commenc reformuler notre code source, le rendre plus limpide, plus facile maintenir, et plus apte grer l'ventuelle absence ou difcult d'accs au langage JavaScript. Intressons-nous aux concepts discuts cette poque pour mieux comprendre comment bien exploiter JavaScript dans une approche progressive. Attention : partir d'ici, nous allons lire du code source JavaScript. N'ayez crainte si vous n'en avez jamais crit ni lu, car je vais faire mon possible pour expliquer ce qui se passe chaque tape pour que vous ne perdiez pas le fl, mme si le code semble tre crit en sanscrit. 4. Pour les administrateurs informatiques, activer ou pas JavaScript tait d'abord un problme de scurit, mais les utilisateurs ont longtemps t invits le dsactiver pour viter les fentres surgissantes (popups) et publicits. Il est trs facile de dsactiver JavaScript en accdant aux prfrences du navigateur, mais il peut tre bloqu par un pare-feu ou dsactiv pour toutes les applications par les administrateurs. ADAPWEB.indb 70 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 4 AMLIORATION PROGRESSIVE AVEC JAVASCRIPT 71 Vers 100 % de fabilit Il n'tait pas rare d'crire (ou de lire) l'poque des dbuts de JavaScript des gestionnaires d'vnements onclick (du code excut en raction un clic sur un lment de la page) qui dfnissaient des liens sans cible 5 : <a href="#" onclick="newWin( 'http://easy-designs.net/' );">Easy! Designs</a> Si JavaScript est activ, le lien de l'exemple prcdent provoque l 'appel une fonction sur mesure nomme newWin(), en lui transmettant la valeur "http://easy-designs.net/". L'excution de la fonction provoque l 'afchage de la page vise dans une nouvelle fentre. En revanche, si JavaScript est dsactiv, le lien n'a aucun efet (nous en avions parl en discutant des identi- fants dans le Chapitre2). L'lment href pointe sur un identifant id vide. Quel est l'intrt d'un lien qui ne fonctionne pas en l 'absence de JavaScript? Cela m'amne prsenter ma premire maxime de l 'amlioration progressive avec JavaScript: 1. Vrifez que tout le contenu reste accessible et que toutes les actions indispensables restent oprationnelles mme lorsque le JavaScript est dsactiv. Le lien de l'exemple contrevient cette rgle (les sites de Gawker galement), mais c'est le cas de la majorit des sites web crs la fn des annes 1990 avec JavaScript. Le Web semblait infect de sites rclamant le JavaScript qui l'imposaient aux utilisateurs. Autrement dit, cette poque le JavaScript tait envahissant. Les dveloppeurs ont pris conscience du problme et ont commenc promouvoir une utilisation moins premptoire de JavaScript. Note : Je ne me fais pas ici l 'avocat des fentres popup ou de l'ouverture non dsire de fentres par JavaScript, car ces techniques causent des soucis d'acces- sibilit et d'utilisation. En revanche, j'ai choisi cet exemple car il montre bien l'volution des pratiques d'criture JavaScript d'une faon qui sera assez facile suivre. Soyez assur que ce que vous apprendrez en suivant notre exemple sera applicable tout autre projet JavaScript. 5. Parmi les variations de cette vieille technique, citons le pseudo-protocole javascript (par exemple, <a href="javascript:maFonction();">) et celle que je prfrais, l'utilisation combine de ce pseudo-protocole et d'un gestionnaire d'vnement inline (par exemple, <a href="javascript:void(null)" onclick="maFonction();">). ADAPWEB.indb 71 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 72 ADAPTIVE WEB DESIGN Se montrer discret Le JavaScript discret (unobstrusive) est une expression globale qui dsigne une faon de programmer rendant la prsence du JavaScript non indispen- sable. Il garantit que le visiteur pourra accder toutes les pages et raliser les oprations demandes en n'ayant recours qu'aux lments de base en langage HTML et au protocole HTTP. La partie JavaScript vient s'ajouter cette base pour enrichir la page. Cela vous rappelle quelque chose? Le JavaScript discret s'accorde trs bien avec l 'approche d'amlioration progressive, parce qu' il cantonne le code JavaScript un rle d'amlioration fonctionnelle, et n'en fait plus un acteur incontournable. Voici comment nous reformulons nos liens en JavaScript discret pour qu'ils supportent l 'absence de JavaScript: <a href="http://easy-designs.net/" onclick="newWin( this.href ); return false;">Easy! Designs</a> Dornavant, le lien pointe sur une adresse URL, ce qui lui assure de mener quelque part sans JavaScript. Si le JavaScript est prsent, cliquer sur le lien lance la fonction newWin(), qui reoit la valeur de l 'attribut href (autrement dit, la valeur DOM this.href). L'autre grande difrence de cette nouvelle version est que le gestionnaire onclick renvoie la valeur faux ("return false"), ce qui annule l 'action par dfaut de l'vnement (l 'afchage de la page vise), puisque cette action HTML ferait doublon. Nous venions ainsi de faire un premier grand pas dans la gestion d'une indis- ponibilit de JavaScript, mais avions chemin faisant compris qu'il devait y avoir de meilleures solutions ce genre de scnarii. Simplifer la maintenance Dans la prochaine tape d'volution de ce code, nous exploitons l'antique attribut rel (nous en avons parl au Chapitre 2) pour extraire le code JavaScript inline afn de le renvoyer dans un fchier externe, ce qui apporte deux bnfces: 1) cela ajoute du sens au lien et 2) cela simplife la mainte- nance des sites, puisque les programmeurs n'ont qu'un endroit JavaScript retoucher pour que la modifcation se propage la totalit du site (c'est le mme argument que nous avions avanc pour externaliser les feuilles de styles avec l 'attribut style). ADAPWEB.indb 72 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 4 AMLIORATION PROGRESSIVE AVEC JAVASCRIPT 73 Voici le code HTML reformul: <a rel="external" href="http://easy-designs.net/">Easy! Designs</ a> Il devient alors trs facile d'appliquer ce gestionnaire d'vnement ce lien et tous les autres liens identifs "external": var links = document.getElementsByTagName( 'a' ), rel, i = links.length; while ( i-- ) { rel = links[i].getAttribute('rel'); if ( rel && rel.match( /\bexternal\b/ ) ) { links[i].onclick = function(){ newWin( this.href ); return false; }; } } Toutes ces conditions if et boucles while pouvant rebuter certains lecteurs, je vous propose une visite guide fonctionnelle de ce script: il regroupe dans une variable links tous les liens trouvs dans la page, puis les visite un un en commenant par le dernier (trangement, c'est un peu plus rapide qu'en sens direct). Si le lien possde un attribut rel dont la valeur est "external", une fonction anonyme est associe l'vnement onclick du lien. Cette fonction va appeler la fonction newWin() (en lui transmettant la valeur de l'attribut href du lien, comme dans la version prcdente) tout en provoquant, par renvoi de false, l 'abandon de l 'action par dfaut du clic. Nous avons trouv une solution satisfaisante et la plus discrte possible. En 2006, Jeremy Keith a donn le nom Hijax cette technique. Ce nom est intressant: il combine le terme "hijack" (dtournement), qui dsigne la prise de pouvoir du fonctionnement normal du lien, et le nom "Ajax", qui est le mcanisme JavaScript permettant une interaction entre la page web et le serveur sans requrir une ractualisation de la page dans le navigateur. Nous ne savions pas l'poque qu'Ajax, alors en pleine courbe ascendante, allait nous obliger retravailler la question sur un ou deux points au niveau de la gestion d'vnements JavaScript. ADAPWEB.indb 73 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 74 ADAPTIVE WEB DESIGN Gagner en souplesse Notre vieille technique d'afectation de gestionnaires d'vnements ne tenait plus la route face l 'adoption vaste chelle d'Ajax 6 et d'autres techniques pour modifer le contenu d'une page web la vole. Voici pourquoi: au moment o du nouveau contenu est inject dans la page actuelle, et qu'il contient un lien marqu rel="external", notre fonction spciale n'a plus aucune chance d'tre associe un gestionnaire d'vnement onclick. Le script a normalement dj t excut lors du chargement initial de la page (window.onload()), donc avant injection du nouveau lien par Ajax. Nous afrontions l un vrai problme. Nous faisions apparatre le risque que deux liens en thorie identiques se comportent difremment en pratique. Ne serait-ce pas un problme d'ergonomie? Une solution vidente que certains ont alors prne consiste tout simplement forcer une nouvelle excution du script chaque fn d'injection de donnes HTML par Ajax. L'ide tait trop bonne, car les appels rptition de la mme fonction ralentissaient sensiblement le navigateur, qui devait chaque fois analyser tous les liens prsents dans la page. Christian Heilmann nous a alors rappel fort propos que tout vnement dclench en relation avec un lment entranait la traverse de l'arbre DOM depuis l'lment racine (html) jusqu' l'lment cible (phase de capture d'v- nement), puis une seconde fois dans l'autre sens (phase de bullage, bubbling) 7 . Autrement dit, l'vnement onClick d'un lien est gr deux fois pour chaque lment dans l 'arborescence entre racine et cible 8 (voir Figure4.2). Il est plus 6. La technologie XMLHttpRequest est celle que nous utilisons pour soumettre des requtes au serveur afn d'envoyer et de recevoir des donnes sans forcer le navigateur recharger/ ractualiser la page. Elle fut invente chez Microsoft pour le logiciel Outlook Web Access, introduite ensuite dans IE5, puis adopte par tous les autres navigateurs et dornavant en cours de standardisation par le W3C. XMLHttpRequest est l' pine dorsale d'Ajax (Asynchronous JavaScript and XML), mais elle n'est pas cantonne au langage XML. Le "A" d'Ajax signife "asynchrone", parce que l'utilisateur n'a pas besoin d'attendre le retour de la rponse et peut continuer interagir avec la page pendant que le script rapatrie des donnes du serveur. 7. http://icant.co.uk/sandbox/eventdelegation/ 8. En fait, pas deux fois dans tous les navigateurs. Le modle de gestion d'vnements de Microsoft, appliqu dans toutes les versions d'IE avant la 9, ne sait grer que la phase de bullage en remonte d'arbre d'un vnement. Le modle standard du W3C supporte la phase de capture et celle de bullage. ADAPWEB.indb 74 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 4 AMLIORATION PROGRESSIVE AVEC JAVASCRIPT 75 efcace de se placer en attente de l'vnement au niveau d'un lment situ plus haut dans l 'arborescence DOM (cela permet d'associer un seul gestion- naire plutt que des dizaines). Cela permet aussi de dclencher des actions pour du contenu dynamique, ce qui nous aide grer les problmes de liens similaires qui divergent. Figure 4.2 : Captures et bullages d'vnements. Ce concept a t difus sous le terme de dlgation d'vnement, puisque le mme gestionnaire pouvait dtecter des vnements et dclencher des ordres dpendants de l'lment dclencheur et pour son compte. Voici une reformu- lation compacte de l'exemple prcdent en utilisant la dlgation d'vnement: document.body.onclick = function( e ) { // Harmonisation des modles d'vnements e = ( e ) ? e : event; var el = e.target || e.srcElement, rel; // Liens externes rel = el.getAttribute( 'rel' ); if ( el.nodeName.toLowerCase() == 'a' && rel && rel.match( /\bexternal\b/ ) ) { newWin( el.href ); // Annulation de l'action par dfaut if (e.preventDefault) { e.preventDefault(); } else { e.returnValue = false; } } }; html footer section header head body p p a Retreats 4 Geeks is an venture. Phase de capture Phase de bullage lments concerns Flux des vnements ADAPWEB.indb 75 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 76 ADAPTIVE WEB DESIGN Dans ce code, nous associons un gestionnaire d'vnement l'vnement onclick de l'lment principal body, ce qui tablit l'auditeur. Dans ce dernier, nous cherchons l'lment cible (celui qui a t cliqu) puis vrifons que c'est un lment d'ancrage (a) dot d'un attribut rel dont la valeur est la chane "external". Si toutes ces conditions sont remplies, nous appelons la fonction newWin(), puis annulons l 'action par dfaut de l'vnement. Cet exemple est spcifque, mais il montre pourquoi nous devons continuer faire voluer notre approche des interactions fondes sur JavaScript. En augmentant notre comprhension de JavaScript, nous obtenons des avantages en termes d'amlioration progressive. Notre code devient plus efcace et moins envahissant. Cela nous aide aussi simplifer la maintenance et augmenter les performances. FAIRE LE NCESSAIRE Arriv en ce point, vous avez une certaine ide de ce qu'est du JavaScript discret, mais nous n'avons pour le moment considr l'exprience utilisateur que du point de vue du document. Dans de nombreux domaines, les interac- tions sont bien meilleures avec JavaScript que sans. Ainsi, la validation de saisie de formulaire sur le poste client permet d'informer immdiatement l'utilisateur des erreurs ou oublis de saisie sans l'obliger transmettre d'abord les donnes au serveur. ADAPWEB.indb 76 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 4 AMLIORATION PROGRESSIVE AVEC JAVASCRIPT 77 Figure 4.3 : Contrle de disponibilit d'un pseudo dans Twitter.com. Nous savons qu'une de nos contraintes est de garantir que l'interface peut fonctionner sans JavaScript, mais comment faire lorsque le fonctionnement de JavaScript requiert des marquages spcifques ? La rponse m'amne formuler ma deuxime maxime d'amlioration progressive avec JavaScript: 2. Utilisez JavaScript pour gnrer les balises supplmentaires dont le script a besoin. JavaScript est vraiment dou pour gnrer et modifer des balises en temps rel. Lorsque vous devez enrichir une interface l 'aide de JavaScript, commencez par un groupe initial de balises et de styles signifants et pratiques, puis ralisez par le script les modifcations HTML et CSS pour aboutir votre nouvelle interface, mais seulement une fois que vous avez vrif qu'elle fonctionne sans erreurs. Voyons un exemple de mise en pratique de ces conseils en revenant la page Retreats 4 Geeks. ADAPWEB.indb 77 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 78 ADAPTIVE WEB DESIGN Figure 4.4 : La page web Retreats 4 Geeks. Un de mes objectifs ici tait d'utiliser de faon efcace l'espace limit des terminaux nomades. Les translations (navigation horizontale) sont exploitables sur un petit cran, mais les zones cibles seront trop rduites pour tre slec- tionnes sans efort. Je pourrais bien sr basculer l 'afchage pour proposer une navigation verticale, ce qui permettrait d'ofrir des liens plus spacieux, mais cela dvorerait trop de surface d'cran. Une troisime approche consiste crer une liste droulante (dropdown), soit en CSS, soit avec un lment select. La liste en CSS pur est tentante, mais l 'autre a l 'avantage de prsenter l'utilisateur une interface qui lui sera familire. J'opte donc pour l'lment select. Je pars du marquage HTML du Chapitre2 pour vous guider dans la cration d'un script qui va convertir le contenu de l'lment nav en un lment select seulement lorsque les dimensions de l'cran deviennent infrieures une valeur plancher. Pour que le code reste assez simple tudier, j'exploite la librairie jQuery JavaScript 9 . Les librairies, fort pratiques, apportent toutes faites des dizaines ou centaines de fonctions rpondant aux besoins les plus courants (comme l 'ajout et la suppression d'une classe class). Ne vous inquitez pas la lecture du code; je vais commenter son fonctionnement. 9. http://jQuery.com ADAPWEB.indb 78 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 4 AMLIORATION PROGRESSIVE AVEC JAVASCRIPT 79 Nous isolons d'abord le script dans une fonction anonyme 10 qui sera excute ds que les donnes du DOM seront disponibles, mais avant que soient tlcharges les images, fchiers CSS et vidos ( l'instant onDOMReady). Cela rend l 'afchage de la page plus vif que si l'on doit attendre que tout ait t rapatri ( l'instant window.onload). Toute la suite du code sera place dans les limites de cette fonction: $(function(){ // Les choses intressantes seront ici. }); Nous pouvons crer les variables dont nous aurons besoin. Nous les regroupons dans une dclaration var par souci de compacit (concept de minifcation) 11 . var $window = $(window), // Rfrence la fentre $old_nav = $('#top nav > *'), // Rcupre la navigation $links = $old_nav.find('a'), // Rcupre les liens showing = 'old', // Suivi de l'action en cours trigger = 765, // Largeur plancher de fentre $new_nav, $option, // Utilises plus loin timer = null; // Un timer sera requis Les commentaires doivent vous clairer sur l'utilit de chaque variable. Mme si vous connaissez jQuery, vous pouvez vous demander pourquoi je stocke les lments dans des variables locales au lieu de faire directement rfrence aux expressions fondes sur jQuery (comme dans $('#top nav> *')) lorsque nous en avons besoin. En fait, j'ai de bonnes raisons de travailler ainsi: les rfrences locales rduisent l'impact de l'excution du script sur les perfor- mances parce que l'afectation n'est faite qu'une fois et non chaque rencontre d'une utilisation de $(). Pour ne pas confondre les rsultats de jQuery avec les autres variables, j'ai fait dbuter chaque nom de variable associe par le signe dollar ($). Ces techniques sont employes tout au long du script; ce sont de bonnes pratiques qu'il est conseill d'adopter. Les variables tant en place, vous pourriez penser que le moment est venu de passer au noyau dur du script, mais il reste une prcaution coder avant d'excuter le code: vrifer que les lments requis sont bien prsents: 10. Une fonction anonyme n'est rien d'autre qu'une fonction qui ne possde pas de nom. 11. http://www.alistapart.com/articles/javascript-minification-part-II/ ADAPWEB.indb 79 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 80 ADAPTIVE WEB DESIGN if ( $old_nav.length && $links.length ) { // Nous savons que les lments DOM existent, // et nous pouvons les utiliser. } Il est capital de tester les dpendances et j'y reviendrai dans la section suivante. Passons maintenant ce noyau dur. Nous commenons par gnrer la nouvelle navigation fonde sur select en crant le bloc select, puis son premier lment option: $new_nav = $('<select></select>'); $option = $('<option>-- Navigation --</option>') .appendTo($new_nav); Une fois que nous disposons du nouveau marquage, nous pouvons balayer la liste des liens rcolts (dans $links) pour construire une option pour chacun d'eux en rptant l'lment option que nous venons de coder: $links.each(function(){ var $a = $(this); $option.clone() .attr( 'value', $a.attr('href') ) .text( $a.text() ) .appendTo( $new_nav ); }); Une fois tous les lments options crs et ajouts select, nous terminons en ajoutant des retouches de marquage et en confgurant le gestionnaire pour l'vnement select onchange: $new_nav = $new_nav .wrap('<div id="mobile-nav"/>') .parent() .delegate('select', 'change', function(){ window.location = $(this).val(); }); Il s'agit ici d'une version un peu simplife du vrai code de la page Retreats 4 Geeks (j'ai notamment supprim quelques astuces de gestion des sauts par # dans les adresses URL). Le but est de vous laisser vous concentrer sur l'essentiel. Dans les trois premires lignes, nous imbriquons notre select ($new_nav) dans un lment div, puis rafectons ce div la variable $new_nav en sorte que l'ensemble soit vu par JavaScript comme un paquet complet. Dans la ligne suivante, j'utilise la dlgation d'vnement (dcrite plus haut) pour pouvoir surveiller l'vnement onchange depuis un point plus lev ADAPWEB.indb 80 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 4 AMLIORATION PROGRESSIVE AVEC JAVASCRIPT 81 de l 'arbre DOM (en fait, du niveau de l'lment div). Nous associons une fonction anonyme l'vnement pour injecter une nouvelle adresse dans la barre d'adresse du navigateur (ce qui fait afcher la nouvelle section de page ou une autre page, selon le type de lien). Et voil! Nous avons cod une navigation oprationnelle base select. Voyons maintenant comment l'ajouter la page quand les conditions en sont remplies. Nous crons une autre fonction nomme toggleDisplay(), qui surveille la largeur de fentre du navigateur et active un style de navigation ou l 'autre: function toggleDisplay() { var width = $window.width(); if ( showing == 'old' && width <= trigger ) { $old_nav.replaceWith($new_nav); showing = 'new'; } else if ( showing == 'new' && width > trigger ) { $new_nav.replaceWith($old_nav); showing = 'old'; } } Ici aussi, le script est un peu allg, mais l'essentiel y est : la navigation est change si le plancher de largeur de fentre est franchi (trigger) et si le style de navigation actuel n'est pas dj le bon (selon la valeur de showing). Avec cette fonction, il nous suft de l'excuter une fois pour initialiser les variables et afcher le bon style de navigation ds le dpart. Nous pouvons ensuite l 'associer l'vnement de fentre onresize: toggleDisplay(); // Initialise le bon style $window.resize(function(){ if ( timer ) { clearTimeout(timer); } timer = setTimeout( toggleDisplay, 100 ); }); Vous pourriez vous demander pourquoi je ne transmets pas directement toggleDisplay() comme gestionnaire d'vnement? Sachez que cela provo- querait de multiples excutions de la fonction (plusieurs centaines de fois) pendant que l'utilisateur retaille sa fentre de navigateur. Pour limiter le nombre d'excutions (et viter de surcharger le processeur du poste client), le gestionnaire se fonde sur une minuterie (timer) pour n'appeler toggle- Display() qu'aprs 100millisecondes. Si la fonction est dclenche rptition pendant une retaille de fentre, cela provoque la destruction de la variable timer pour la recrer et repartir zro. C'est ce qui permet de n'appeler ADAPWEB.indb 81 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 82 ADAPTIVE WEB DESIGN toggleDisplay() qu'une fois par retaille (sauf si l'utilisateur dplace sa souris vraiment lentement). Rsultat? Un excellent exemple d'amlioration progressive avec Javascript. Figure 4.5 : Une navigation base select sur iPhone. Cet exemple simple prouve que JavaScript est en mesure de gnrer ce dont le script a besoin tout en cartant tout le superfu. Vous pourriez tendre cette fonction pour qu'elle soit encore moins dpendante du balisage en permettant de transmettre dynamiquement la fonction un point de dpart racine (qui est ici le niveau des lments enfants de nav). Je vous laisse chercher la rponse. Exprimentez! RESTER EXCELLENT Nous avons dit que la plupart des techniques d'amlioration progressive au niveau HTML et CSS taient assez simples et faisaient peut-tre dj partie de vos pratiques antrieures. En revanche, l'amlioration progressive en JavaS- cript est un peu plus complexe, car JavaScript ne peut pas tre aussi tolrant du fait que c'est un langage de programmation. Les langages HTML et CSS dcrivent du contenu et en organisent le rendu visuel dans une fentre de navigateur. Le langage JavaScript s'en distingue, car ADAPWEB.indb 82 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 4 AMLIORATION PROGRESSIVE AVEC JAVASCRIPT 83 il excute des commandes dans le navigateur. Puisqu'ils dpendent de la bonne ralisation d'une squence d'actions, les programmes JavaScript se bloquent ds qu'ils rencontrent une erreur. Les causes de ces erreurs vont de la simple faute de frappe la boucle de rptition dont on ne sort jamais. Dans tous les cas, lorsque vous crivez du code qui ne convient pas au module interprteur de JavaScript du navigateur, vous recevez en pleine face un bon gros message d'erreur, mais vos clients aussi. S'en passer serait salutaire. Nous savons que la mise en place de l 'amlioration progressive n'est pas un processus binaire qui se limite valuer si la technologie espre existe ou non sur le poste client. L'exprience utilisateur est au contraire variable chaque niveau selon les capacits de son navigateur. Si ce dernier sait grer ds le dpart la convention de couleurs RGBa, mais pas les arrondis d'angles, ce n'est pas menaant au point d'empcher l'utilisateur de prendre connaissance du contenu. Nous devons adopter la mme approche pour JavaScript; abandonner tout manichisme. Sans vouloir abuser des mtaphores culinaires, il nous faut proposer les technologies la carte en distribuant les fonctions en petits paquets autonomes et bien dlimits. Ces scripts multiples peuvent vrifer leurs dpendances et dcider de se poursuivre seulement si l'environnement d'excution et la page vise leur sont favorables. Le prcdent script de navigation fond sur select donne un bon exemple de mise en pratique de la premire partie de ce concept; il est entirement autonome. Cependant, il ne prend pas les prcautions requises pour vrifer ses nombreuses dpendances, parmi lesquelles la prsence de l'incontournable jQuery. Pour y parvenir, il nous faut enchsser le tout dans une instruction conditionnelle: if ( typeof( jQuery ) != 'undefined' ) { // Le code existant se place ici } Dans ce test, nous vrifons que l'objet nomm jQuery existe dans l'environ- nement d'excution, et cet objet est cr si la librairie jQuery est disponible, ce qui dtermine la valeur de "undefned". Le test de dpendance est une technique vitale, qui vous vite de laisser survenir une erreur sur le poste client, sans compter que cela peut vivifer le fonctionnement du navigateur en empchant l'excution inutile de certains blocs de code. ADAPWEB.indb 83 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 84 ADAPTIVE WEB DESIGN Voici un autre exemple qui pourra vous sembler familier: if ( document.getElementById ) { // Code dpendant de document.getElementById() ici } Nous nous assurons ainsi que la mthode de traverse de l 'arbre DOM document.getElementById() existe avant de tenter d'y faire appel. Vous vous souvenez que nous avions utilis cette approche dans l'exemple de dlgation d'vnement lors du test de event.preventDefault(). Revenons au test de la librairie jQuery. Voyons si nous pouvons tre plus prcis en cherchant connatre la version de jQuery, prcaution indispensable si vous utilisez une mthode qui n'est apparue que dans une version rcente de la librairie. Il est en gnral plus efcace de tester l'existence d'une mthode en particulier, mais le test de version devient appropri pour une version de librairie qui entrane un remaniement profond de l'interface de programmation API pour une mthode qui existait auparavant: if ( typeof( jQuery ) != 'undefined' && parseFloat( jQuery.fn.jquery ) >= 1.4 ) { /* Code dpendant de jQuery 1.4 au minimum ici */ } Le test de dpendance vous vite les situations d'erreur et plus vous l'efectuez tt, plus vous conomisez l'espace mmoire et le processeur lorsque le poste du client ne dispose pas de l'environnement requis pour profter de vos scripts. jQuery n'est pas la seule dpendance de ce script: vous vous souvenez que nous avions tenu compte de ses dpendances au balisage lors du test de longueur des deux listes $old_nav et $links: if ( $old_nav.length && $links.length ) { Une fois cet autre test en place, le script va gentiment se terminer s'il constate ne pas pouvoir fonctionner. Il ne perd pas de temps crer des lments ou implanter un gestionnaire d'vnement inutilement. En vous inspirant de l'exemple, vous trouverez des centaines d'occasions d'interroger l'environnement du navigateur et la confguration de la page pour dcider de lancer ou pas un script. Vous pouvez tester l'existence d'un objet, les dpendances aux balises, la disponibilit d'une mthode ou d'un cookie, le support Ajax, etc. Il n'y a aucune raison de se priver d'ajouter le code de ADAPWEB.indb 84 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 4 AMLIORATION PROGRESSIVE AVEC JAVASCRIPT 85 test pour que les scripts repartent illico d'o ils viennent en toute discrtion s'ils se sentent indsirables. Le concept de test des dpendances est analogue aux requtes de mdia du CSS. Puisque nous venons d'en parler, il nous faut voir maintenant comment bien grer les interactions entre les scripts et les styles CSS. EXCUTER AVEC STYLE Le CSS est un volet des dpendances de script dont nous n'avons pas encore parl. Dans neuf cas sur dix, si votre code JavaScript interagit avec le modle DOM, vous devez grer le CSS d'une manire ou d'une autre. Dans l'approche d'amlioration progressive, il faut choisir la meilleure manire d'appliquer et de contrler les styles en JavaScript. Vous ne voudriez pas crer des inter- faces qui perturberaient l'utilisateur par un fonctionnement dfectueux. Nous reviendrons sur ce sujet plus loin. Notre comprhension des modalits d'interaction entre JavaScript et CSS a beaucoup volu au cours des dernires annes. Dans les dbuts du JavaScript, la gestion des styles tait quasiment absente des scripts; tout tait crit en ligne par modifcation de l 'attribut style des lments: function highlight() { var el = document.getElementById( 'message' ); el.style.color = '#f00'; el.style.backgroundColor = '#ffcfcf'; } Du point de vue de la maintenance du code, cette faon de faire est une catastrophe. Au moindre changement de l 'aspect ou de la structure, vous deviez aussi trouver un spcialiste du JavaScript. Efcacit nulle et viol de la rgle de sparation des couches fonctionnelles: en mlangeant prsentation et comportement, on rend le travail plus difcile dans les deux univers. L'tape d'volution suivante a consist stocker les donnes qui voluent dans des variables, soit dans le script, soit en transmettant ces donnes dans un objet de confguration (en conservant sous le coude des valeurs par dfaut au cas o cette confguration serait contourne): function highlight( config ) { var el = document.getElementById( 'message' ); el.style.color = config.color || '#f00'; el.style.backgroundColor = config.backgroundColor ADAPWEB.indb 85 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 86 ADAPTIVE WEB DESIGN || '#ffcfcf'; } highlight({ color: '#ebebeb', backgroundColor: 'black' }); La mise jour des chanes ne requiert dornavant que quelques connaissances lmentaires en JavaScript, et toutes les rgles de styles sont runies en un seul endroit, facilitant ainsi la maintenance. Nous avons cependant constat qu'il tait beaucoup plus efcace d'extraire les donnes des styles dans un fchier externe, puis de le solliciter en travaillant avec la classe de l'lment de page vis: function highlight() { document.getElementById( 'message' ) .className += ' highlight'; } Cela rduit le volume de code requis pour obtenir l'efet et entrane moins de manipulations du modle DOM (l'efet sur les performances est norme). De plus, le CSS peut alors tre retouch sans que l'on ait modifer le code JavaScript qui utilise ces styles. Je ne vais pas m'engager dans l'intressante discussion au sujet des manires possibles de combiner scripts et styles tout en conservant assez de sparation entre les deux domaines 12 . Je considre plus important de passer un peu de temps dcouvrir quand et comment appliquer efcacement des styles depuis un script. Ces points sont d'une grande importance et font donc l'objet de ma troisime et dernire maxime de l 'amlioration progressive avec JavaScript: 3. Appliquer les styles seulement le moment venu. Nous l'avons dj dit, les scripts qui exploitent les donnes DOM demandent en gnral certaines modifcations des styles, que ce soit pour dplier/replier le contenu d'un lment, mettre en exergue les nouveaux contenus ou ajouter des efets visuels une interface glisser-dposer. Ce domaine d'exploitation des styles est tout fait recommandable, mais les dveloppeurs ont souvent 12. J'ai donn un aperu de ce sujet dans un article nomm "Keeping the hot side hot and the cold side cold" dans Scroll Magazine (http://scrollmagazine.com/number-1/keeping-the- hot-side-hot). ADAPWEB.indb 86 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 4 AMLIORATION PROGRESSIVE AVEC JAVASCRIPT 87 pris l'habitude d'appliquer les styles de chaque widget avant de savoir si ce widget va efectivement tre utilis. Prenons en guise d'exemple un widget accordon gomtrie variable. Dans ce type d'interface utilisateur, les blocs de contenu sont masqus et seul l'onglet de chacun est visible. Si les styles de masquage des sections de contenus sont appliqus par dfaut et qu' il s'avre ensuite que le script ne peut pas tre excut, l'utilisateur ne peut plus cliquer sur les onglets pour afcher les dtails. Les styles auront t la cause d'une perte d'accessibilit aux contenus pour la simple raison qu'ils ont t appliqus trop tt. En revanche, si c'est le script qui dclenche l 'application des styles de l'tat initial une fois que son excution a t confrme, il n'y aura pas de problme. Si le script ne peut pas tre excut, les styles du widget ne sont pas appliqus et le contenu reste visible, donc utilisable. En optant pour cette approche d'application des styles, vous grez un jeu de rgles pour le contenu lorsque le widget n'est pas utilisable, et un second lorsqu'il l'est, optimisant ainsi les deux situations. Cela est-il possible? Je rponds oui, c'est de l 'amlioration progressive mise en uvre la perfection. Figure 4.6 : Un widget accordon avec la premire section dplie et les trois autres replies. Si l'on clique dans un onglet/titre d'une autre section, elle est dplie et la prcdente est replie. ADAPWEB.indb 87 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 88 ADAPTIVE WEB DESIGN Une technique efcace pour grer ce genre de styles d'interface conditionnelle consiste associer une classe "d'activation" l'lment racine du widget. Le tableau suivant donne quelques exemples. STRATGIE CLASSE "SUSPENDUE" CLASSE "ACTIVE" Ajout d'un sufxe "-on" la classe de base .accordion .accordion-on Ajout d'une autre classe .auto-submit .auto-submit.active Changement de forme de la classe .replace-me .replaced Tableau 4.1 : Exploitation d'une classe "d'activation". Cette prcaution vous assure de ne jamais appliquer de style avant qu'il soit devenu ncessaire. Un autre souci li l 'application des styles en JavaScript est le risque de collisions. Il est capital d'isoler vos scripts les uns des autres pour viter des doublons de variables, de fonctions ou de mthodes. De mme, il est conseill d'isoler les styles de script des autres styles. Vous ne pouvez pas prvoir quels autres noms de classes seront en vigueur sur une page (surtout si vous concevez des scripts que d'autres vont rutiliser). Si vous n'isolez pas bien vos noms de styles, ils peuvent dborder et occuper l'espace smantique du reste de la page (ils risqueraient d'tre appliqus des lments de manire fortuite). Pour isoler vos noms de styles, faites dbuter le nom de chaque slecteur par un marqueur reprable qui aura trs peu de chances d'entraner un confit avec un autre lment class ou id dans la page. Personnellement, je fais commencer les noms par celui de l'objet JavaScript concern. Si je conois par exemple un widget accordon nomm fort propos WidgetAccordeon, je peux classer l'lment racine activ sous le nom "WidgetAccordeon-on", puis dduire mes styles de ce radical: .WidgetAccordeon-on .heading { /* Styles de titrage */ } .WidgetAccordeon-on .content-block { /* Styles des blocs de contenu */ } ADAPWEB.indb 88 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 4 AMLIORATION PROGRESSIVE AVEC JAVASCRIPT 89 .WidgetAccordeon-on .content-block.collapsed { /* Styles des blocs de contenu replis */ } Dans le sens inverse, il y a de faibles chances qu'une rgle de style extrieure vienne polluer le contenu du widget cause des particularits de la spci- fcit et de la cascade. En anticipant ces problmes, vous pouvez prendre les mesures adquates en rendant vos slecteurs encore plus spcifques ou, plus radicalement, en dfnissant explicitement chacune des proprits contrler dans le widget au lieu de laisser les valeurs par dfaut. PLANIFICATION ET RETENUE Il est indniable que l 'amlioration progressive en relation avec JavaScript suppose plus d'eforts qu'avec le CSS et le HTML. En prenant le temps de rfchir aux nombreux facteurs qui infuent sur la qualit de l'exprience des utilisateurs, cela deviendra vite une seconde nature. Au moindre doute, rappelez-vous les trois maximes: 1. Vrifez que tout le contenu reste accessible et que toutes les actions indis- pensables restent oprationnelles mme lorsque le JavaScript est dsactiv. 2. Utilisez le JavaScript pour gnrer les balises supplmentaires dont le script a besoin. 3. Appliquez les styles seulement le moment venu. En tant mieux arm pour tirer le proft maximal de la puissance de JavaScript, vous tes certain de prendre les meilleures dcisions et d'obtenir des sites encore plus ergonomiques. ADAPWEB.indb 89 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 "Il faut bien des eforts pour se btir une bonne rputation, mais une seule mauvaise action fait tout perdre." BENJAMIN FRANKLIN ADAPWEB.indb 90 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPI TRE 5 AMLIORATION PROGRESSIVE ET ACCESSIBILIT En fvrier 2006, l 'association nationale des aveugles des tats-Unis a intent un procs contre la socit Target en raison de l'impossibilit d'accder son site web. Un mois plus tard, le procs a t transfr la cour fdrale ( la demande de Target). La socit a tent de faire rejeter la plainte, mais elle a eu tort, puisque le procs est devenu une action collective que Target a fnalement teinte en 2008 en payant plus de 6 millions de dollars US (sans compter les frais d'avocat). Cette somme est remarquable quand on la rapproche de la raison premire du procs : Target n'avait tout simplement pas pris la peine de grer les problmes d'accessibilit aux handicaps, dont ils avaient pourtant t avertis au pralable. Il n'y avait pas de texte de rechange alt pour les images, ils utili- saient normment les mosaques d'images avec liens et obligeaient utiliser la souris pour valider les formulaires. Ces difrents petits soucis auraient pu tre rgls rapidement et facilement pour bien moins que 6 millions de dollars. Personnellement, j'aurais rgl le problme contre quelques billets de100. Si vous n'avez pas encore t confront l'accessibilit, qui est dans le cadre de ce chapitre la mesure de facilit d'utilisation d'un site par les gens soufrant de handicaps et par les technologies d'assistance correspondantes 1 , vous pourriez 1. Les technologies d'assistance sont trs varies. Les non-voyants utilisent des logiciels de lecture audio du contenu de l'cran. Ceux dont la vision est faible peuvent zoomer sur le texte dans le navigateur. Les malentendants utilisent des sous-titrages pour les vidos. ADAPWEB.indb 91 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 92 ADAPTIVE WEB DESIGN prendre peur parce qu'il faut tenir compte de nombreux critres. Mme si vous tes un des utilisateurs ayant des "besoins spciaux", il est fort probable que votre exprience et que vos capacits ne soient pas les mmes que celles des autres. Vous pouvez par exemple soufrir de daltonisme lmentaire (absence de vision du rouge et du vert), mais de faon moins lourde que d'autres. Mme avec ce handicap, vous ne pourrez pas aisment vous mettre la place de personnes qui soufrent de ttranopie (incapacit de voir le bleu et le jaune). Si vous vous intressez aux problmes d'accessibilit, que ce soit parce que vous voulez que votre message puisse tre accessible par le plus de gens possible, ou parce que vous ne voulez pas que quelqu'un reste sur la touche, vous devrez apparemment vous imposer une telle pression pour que les choses soient parfaites qu'il ne peut en rsulter qu'une apprhension certaine. Vous serez heureux d'apprendre qu'en choisissant de concevoir et de dvelopper des sites web dans l'approche d'amlioration progressive, vous amliorez aussi l 'accessibilit. En efet, l 'amlioration progressive vous invite concevoir vos sites web d'abord au service du contenu, ce qui vous amnera en gnral prendre la dcision approprie en termes d'accessibilit. Mais il y a bien sr toujours moyen d'amliorer les choses, et c'est la raison d'tre de ce chapitre. ENFIN, TU ME VOIS Une des techniques JavaScript les plus utilises consiste masquer et cacher du contenu. Cela sert concevoir des interfaces onglets, des lments pliables et repliables, des gadgets en accordon. Vous en trouverez partout. En soi, cette pratique n'est pas critiquable, mais rares sont les personnes qui savent quel point les choix faits pour cacher du contenu ont une infuence sur l'accessibilit de ce contenu par les technologies d'assistance telles que les lecteurs d'cran. Le tableau qui suit prsente les difrents mcanismes disponibles pour cacher du contenu, chacun ayant un impact difrent sur la page rsultante. ADAPWEB.indb 92 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 5 AMLIORATION PROGRESSIVE ET ACCESSIBILIT 93 RGLES CSS EFFET VISUEL EFFET D'ACCESSIBILIT visibility: hidden; L'lment est masqu sans tre supprim du fux de donnes (il occupe l'espace correspondant). Ce contenu est ignor par les lecteurs d'cran. display: none; L'lment est supprim du fux et masqu, l'espace cor- respondant tant rcupr. Le contenu est ignor par les lecteurs d'cran. height: 0; width: 0; overflow: hidden; L'lment est repli et le contenu est masqu. Le contenu est ignor par les lecteurs d'cran. text-indent: -999em; Le contenu est dcal pour sortir de l'cran, ce qui le masque, mais les liens peuvent cibler les lments actifs. De plus, la translation ngative peut tre insuf- sante pour bien cacher le contenu. Les lecteurs d'cran ont accs aux contenus, mais seulement au texte et aux lments inline. position: absolute; left: -999em; Le contenu est supprim du fux normal et dcal du ct gauche. L'espace occup est rduit. Les lecteurs d'cran ont accs au contenu. Tableau 5.1 : Mcanismes de masquage de contenu. Les deux premires techniques sont les plus utilises. display: none; est exploite par quasiment toutes les librairies JavaScript de notre plante, et par la plupart des widgets JavaScript prdfnis. Ces deux approches vous conviendront si vous ne voulez pas que le contenu masqu soit lu par les lecteurs d'cran. Dans le cas contraire, si vous voulez que le contenu soit lu, mme masqu, c'est la dernire option qu'il faut adopter. Si vous avez prvu de concevoir votre propre librairie JavaScript, la technique consistant placer du contenu en dehors des limites de l'cran est assez simple mettre en place. Cela devient en revanche beaucoup plus difcile si vous vous fondez sur une librairie JavaScript prprogramme telle que jQuery ou Prototype. En efet, cela suppose de pouvoir redfnir certains lments internes la librairie. Vous pouvez cependant parvenir vos fns avec un zeste d'intelligence. ADAPWEB.indb 93 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 94 ADAPTIVE WEB DESIGN En efet, la plupart des librairies possdent dans le cadre de leurs fonctions d'animation un mcanisme permettant de dfnir une fonction de rappel (callback function). Ce genre de fonction est transmis par vous une fonction de la librairie (ou une mthode d'un objet), charge pour cet objet de dclencher l'excution de la fonction un certain moment. Si vous avez dj utilis JavaScript pour charger du contenu via Ajax, vous connaissez le concept de fonction de rappel qui permet d'efectuer certains traitements en attendant que les donnes demandes reviennent du serveur. En gnral, les librairies JavaScript proposent une fonction de rappel capable de s'excuter la fn d'une certaine activit. Certaines ofrent en complment des points d'ancrage d'autres tapes de l'excution d'une routine, par exemple avant son commencement. Dans tous les cas, mme sans ces ancrages compl- mentaires, vous pouvez crer des mcanismes de masquage plus accessibles. Prenons comme exemple l'extrait suivant fond sur jQuery: (function(){ var $button = $('#myButton'), $text = $('#myText'), visible = true; $button.click(function(){ if ( visible ) { $text.slideUp('fast'); } else { $text.slideDown('fast'); } visible = ! visible; }); })(); Ce script cherche deux lments nomms #myButton et #myText, en les afectant deux variables locales nommes $button et $text, respectivement. Il dfnit ensuite une troisime variable locale nomme visible qui permet de suivre l'tat courant des choses. Le script afecte ensuite un gestionnaire d'vne- ments onclick l'lment #myButton pour inverser la visibilit de #myText en modifant sa hauteur. Trs simple, non? Ce script fonctionne comme prvu, sauf que jQuery utilise display: none lorsque vous appelez slideUp(). En consquence, #myText est masqu par une mthode qui en empche la lecture par un lecteur d'cran. Nous pouvons efectuer une lgre retouche ce code pour ajouter une classe qui nous appar- tient afn de rendre le contenu masqu plus accessible: ADAPWEB.indb 94 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 5 AMLIORATION PROGRESSIVE ET ACCESSIBILIT 95 (function(){ var $button = $('#myButton'), $text = $('#myText'), visible = true; $button.click(function(){ if ( visible ) { $text.slideUp('fast',function(){ $text.addClass('accessibly-hidden') .slideDown(0); }); } else { $text.slideUp(0,function(){ $text.removeClass('accessibly-hidden') .slideDown('fast'); }); } visible = ! visible; }); })(); Cette version du script est trs proche de la prcdente: lorsque le contenu est masqu, la librairie peut grer l 'animation. La difrence est que le script inverse ensuite l'tat de compltion de notre classe personnalise nomme "accessibly-hidden". C'est ce qui permet de maintenir le contenu accessible aux technologies d'assistance. Les tapes sont inverses lorsqu'il s'agit de rafcher le contenu. Il est masqu par le script avant que la classe ne soit supprime, puis l 'animation est ralise. L'avantage de cette approche est qu'elle vous laisse matre de la mthode de gestion du masquage du contenu, au lieu de dpendre de ce que permet la librairie JavaScript. Vous pouvez ainsi facilement faire voluer votre classe "accessibly-hidden" pour qu'elle adopte une autre technique ou une version amliore. Vous n'avez plus attendre que les auteurs de la librairie procdent la mise jour du mcanisme de masquage (s'ils acceptent de le faire). Tout cela suppose bien sr que vous vouliez masquer du contenu de l'cran tout en le maintenant accessible aux anciens appareils d'assistance. Si vous ne voulez pas que le contenu soit lu par un lecteur d'cran, vous pouvez utiliser display: none, mais ce n'est pas la meilleure approche, car vous n'avez dans ce cas aucun moyen simple de faire savoir l'utilisateur que du nouveau contenu est disponible. Pour ofrir le meilleur service vos utilisateurs, mieux vaut adopter les rles et les statuts qui sont dfnis dans la spcifcation WAI-ARIA ADAPWEB.indb 95 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 96 ADAPTIVE WEB DESIGN ou ARIA en abrg (Web Accessibility Initiative's Accessible Rich Internet Applications) 2 . Masquer du contenu avec ARIA est trs simple, puisqu'il suft d'adopter l 'attribut aria-hidden. <p aria-hidden="true">Devinez ? Je suis masqu mais accessible grce ARIA.</p> ARIA propose une srie de rles, d' tats et de proprits prdfnis qui peuvent s'avrer trs utiles pour concevoir un site fortement fond sur JavaS- cript. Et certains lments seront utiles pour construire des applications trs interactives. Dcouvrons-les d'abord. EMBAUCHER DES GUIDES Un des nombreux aspects par lesquels ARIA amliore l 'accessibilit d'une page web consiste proposer des rles de repres et de structures. La plupart de ces rles constitue une formalisation des lments smantiques que nous avons tent d'appliquer depuis des annes des lments HTML en ajoutant une classifcation smantique et des identifants (nous l 'avions voqu dans le Chapitre2). Les rles de repre et de structure d'ARIA (ainsi que les rles de widgets que nous verrons bientt) doivent tre afects des lments au moyen de l 'attribut nomm role. Je sais ce que vous allez dire : role n'est pas un attribut reconnu dans HTML4.x, ni dans XHTML1.x. C'est vrai. ARIA ajoute un certain nombre d'attributs au lexique du HTML. Il en rsulte que vous ne pourrez pas valider vos pages avec les mmes dfnitions de type de document que d'habitude. Pour valider des pages utilisant ARIA dans l'un de ces deux langages, il vous faudra utiliser un nouveau jeu de DTD 3 ou bien faire le saut vers HTML5 qui reconnat les attributs du type role. Voici un premier exemple utilisant ARIA: 2. http://www.w3.org/TR/wai-aria/ 3. Pour HTML 4.01 plus WAI-ARIA, le DOCTYPE est <!DOCTYPE html PUBLIC "-//W3C// DTD HTML+ARIA 1.0//EN" "http://www.w3.org/WAI/ARIA/schemata/html4-aria-1.dtd">. Pour le XHTML plus WAI-ARIA, le DOCTYPE est <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+ARIA 1.0//EN" "http://www.w3.org/WAI/ARIA/schemata/xhtml-aria-1.dtd">. ADAPWEB.indb 96 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 5 AMLIORATION PROGRESSIVE ET ACCESSIBILIT 97 <ol role="navigation"> <li><a href="#details">Details</a></li> <li><a href="#schedule">Schedule</a></li> <li><a href="#instructors">Instructors</a></li> <li><a href="#lodging">Lodging</a></li> <li><a href="#location">Location</a></li> </ol> Vous reconnaissez le code HTML du Chapitre 2, puisque c'est celui des lments de navigation de la page Retreats 4 Geeks. La seule difrence est l 'ajout l'lment ol d'un attribut role dont la valeur est "navigation". Vous aurez devin que le repre ARIA nomm "navigation" permet de prciser qu'un lment fait partie d'un mcanisme de navigation dans la page. Tous les rles de reprage d'ARIA fournissent des informations concernant les difrentes rgions de la page et permettent de naviguer globalement. Certaines technologies d'assistance permettent l'utilisateur d'accder ces repres; il peut ainsi naviguer directement d'une rgion l 'autre avec le clavier ou un autre moyen. Ces repres sont les successeurs logiques de cette fope de liens "aller " 4 . En revanche, les rles structurels sont des outils d'organisation proches des lments HTML5 tels que section et article. Vous vous souvenez peut-tre que dans l'exemple original, nous avions englob l'lment de navigation ol dans un nouvel lment HTML5 nomm nav. Une brve rfexion vous permettra de conclure que cet lment nav est quivalent au niveau smantique au rle de repre de "navigation". Sachez ds prsent que ce n'est pas le seul domaine de chevauchement entre HTML5 et ARIA. Redondant et raisonnable Les deux spcifcations (HTML5 et ARIA) ont progress de faon indpen- dante au cours de la mme priode. Chacune a cherch rpondre aux problmes qu'elle considrait comme les plus urgents dans la norme actuelle du HTML. (De l, la redondance invitable.) La spcifcation ARIA est l'heure actuelle un peu plus mre pour devenir une recommandation que HTML5. La plupart de ces caractristiques particulires sont de ce fait incorpores au projet HTML5, dont la spcifcation continue d'voluer. Nous pouvons sans 4. Les liens "Aller " sont ceux qui permettent de sauter directement une autre rgion de la page avec un ancrage. Ce sont ceux qui portent des lgendes du style "Aller au contenu" ou "Aller au menu". Ils taient trs utiliss depuis des annes, mais les rles de repres ARIA les rendent redondants. ADAPWEB.indb 97 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 98 ADAPTIVE WEB DESIGN grand risque nous attendre ce que les deux spcifcations aient sufsamment fusionn pour qu' il n'y ait quasiment plus de redondances au moment o HTML5 aura atteint le statut Candidate Recommendation. Pour l'instant, il reste beaucoup de doublons entre ARIA et HTML5, d'abord au niveau des rles structurels, et un peu moins au niveau des rles de repres. Le Tableau5.2 donne un aperu comparatif entre la smantique traditionnelle, le rle ARIA quivalent et l'lment HTML5 qui atteint le mme objectif, s'il existe. SMANTIQUE AD-HOC RLE ARIA LMENT HTML5 SIGNIFICATION #header, #top banner header (approx.) Rgion de la page cible au niveau site et non au niveau page #main, #content main aucun Contenu focalis dans le document #extra, .sidebar complementary, note aside Section complmentaire du document relie au contenu principal (le contenu "complementary" reste signifcatif, mme spar du principal). #footer, #bottom contentinfo footer Rgion contenant des informations au sujet du document #nav navigation nav Rgion contenant des liens de navigation .hentry article article Rgion de la page consti- tuant une section indpen- dante du document Tableau 5.2 : Comparaison entre smantique traditionnelle, rle ARIA et lment HTML5 ventuel. Pour l'instant, on remarque des allers-retours entre la communaut dfnissant le HTML5 et les dfenseurs de l 'accessibilit. La question est de savoir comment grer la redondance. En termes pratiques, mme si vous avez ADAPWEB.indb 98 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 5 AMLIORATION PROGRESSIVE ET ACCESSIBILIT 99 opt pour les quivalences smantiques HTML5 du ARIA, il est conseill d'ajouter les rles de repres ARIA en doublons parce que toutes les techno- logies d'assistance ne grent pas les lments HTML5 correspondants. En revanche, pour les rles structurels, vous faites comme bon vous semble, car ce sont des lments d'organisation qui n'entrent pas en ligne de compte pour les technologies d'assistance aux utilisateurs. Une rapide lecture du code source de la page Retreats 4 Geeks permet de voir cette redondance dans les lments nav et footer. Lorsque les technologies d'assistance seront mises jour pour HTML5, nous pourrons supprimer les attributs de rles devenus inutiles et claircir un peu notre code. En plus des doublons avec HTML5, ARIA comporte plusieurs rles qui dupliquent la smantique disponible depuis longtemps en HTML. C'est par exemple le cas des rles de repres et de structures ARIA suivants: column- header, definition, form, heading, img, list, listitem, row, rowheader et separator. Certains d'entre eux sont en quivalence univoque avec le HTML (par exemple,"form"), alors que d'autres sont des variantes plus gnrales de ce dont nous disposons en HTML (par exemple, "list"). Alors que l'on peut aisment concder qu'il y ait quelques chevauchements entre ARIA et HTML5 en raison de leur dveloppement parallle, vous pourriez vous demander pourquoi ARIA cherche recrer des lments smantiques qui existent en HTML depuis plus de dix ans. La rponse est trs directe: pour une raison ou une autre, certaines entreprises (<humhum>Google</ humhum>) aiment employer un balisage non smantique (par exemple, div) comme structure de base de l'interface, en exploitant JavaScript pour que le rsultat ressemble un contrle HTML natif. Rien que pour cette raison, ARIA dfnit des rles qui sont en chevauchement. Vous ne me verrez jamais utiliser un lment div dans un rle de formulaire "form" (j'utilise tout simplement un lment form, merci). Mais on ne discute pas des Goo et des couleurs Nous avions dit plus haut que la page Retreats 4 Geeks employait plusieurs des lments HTML5 quivalents en termes smantiques aux rles de repres et de structures d'ARIA (nav, footer, article). Nous avons ajout l'qui- valent en rle ARIA afn d'tre certains de servir le plus grand nombre de visiteurs. (Rappelons qu'il s'agit bien de l'objectif primordial de l 'amlioration progressive). Mais nous n'en avons pas fni. Comme le montre le Tableau5.2, l'quivalent smantique du rle ARIA "banner" en lment header du HTML5 ADAPWEB.indb 99 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 100 ADAPTIVE WEB DESIGN peut se discuter. Pour tre absolument clair dans le service que je rends mes visiteurs, j'ai donc ajout ce rle: <header role="banner"> Le seul rle que nous n'avons pas encore abord pour l'instant (il n'est pas encore gr en HTML5) correspond "main". Il permet de dsigner le contenu focalis du document. Dans le Chapitre2, j'avais choisi d'englober dans un lment section les difrents lments article de la page. J'avais choisi le mme lment comme racine de notre micro-format hCalendar. Cet lment section rve d'endosser le rle de "main": <section id="content" class="vevent" role="main"> Ces deux simples retouches nous ont permis de prendre en compte tous les rles de repres qu'il semble utile d'exploiter dans le site Retreats 4 Geeks. Au passage, nous avons amlior l 'accessibilit globale de la page en permettant aisment aux utilisateurs des technologies d'assistance de naviguer dans le document. INDISPENSABLES INDICES ? La spcifcation ARIA fournit aux utilisateurs les moyens de naviguer dans les documents, mais elle propose d'autres fonctions utiles, et notamment une collection de rles et d'tats de widgets. Un rle de widget (un composant d'interface) correspond la description du rle d'un lment. Ces rles sont en gnral classs en deux catgories: ceux qui s'intressent la structure et les autres. En d'autres termes, il y a ceux des conteneurs et ceux des contenus que sont les composants. Les conteneurs sont les lments qui hbergent les composants d'un widget de l'interface. Prenons comme exemple l'interface onglets de la Figure5.1. Une interface onglets se fonde sur deux parties: une liste d'onglets et une collection de panneaux correspondant ces onglets. Il en rsulte trois rles distincts en ARIA: les onglets qui portent le rle de "tab", la liste d'onglets qui porte le rle de "tablist", et le panneau correspondant chaque onglet qui porte le rle de "tabpanel". Les deux rles "tab" et "tabpanel" sont des rles de composants alors que "tablist" est un rle de conteneur (la liste qui contient les onglets). ADAPWEB.indb 100 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 5 AMLIORATION PROGRESSIVE ET ACCESSIBILIT 101 Figure 5.1 : Exemple d'interface onglets. La spcifcation ARIA dfnit toute une srie de rles de widgets. Cela vous permet de construire des contrles complexes de formulaires (par exemple, des curseurs de rglage et des slecteurs numriques rotatifs) ou bien des menus arborescents, des botes de dialogue modales ou mme des interfaces glisser-dposer, et tout cela en garantissant l 'accessibilit. Au niveau des rles de structures, ARIA permet de redfnir un lment HTML n'ayant aucun sens pour qu'il en prenne un en termes fonctionnels. <div role="button">Je ne suis pas un vrai bouton, mais je fais comme si sur le web</div> Tout cela est trs prometteur, mais pour qu'un widget fonctionne, il faut du code JavaScript. Habituellement, c'est un contexte auquel l 'accessibilit n'a pas accs. La principale raison pour laquelle les techniques du type Ajax ne s'entendent pas trs bien avec l 'accessibilit est lie au fait que le langage HTML ne propose aucun mcanisme permettant au code JavaS- cript d'informer l'utilisateur (ou la technique d'assistance qu'il a choisie) en temps rel, hormis les deux techniques trs lmentaires et intrusives que sont alert() et confirm() (on pourrait les comparer des perturbateurs qui crient du fond de la classe). ADAPWEB.indb 101 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 102 ADAPTIVE WEB DESIGN Dans ARIA, la gestion du contexte est confe des "tats". Un tat ARIA correspond un groupe d'attributs pouvant tre appliqus quasiment tous les lments. Certains tats sont globaux (ils s'appliquent tous les lments), alors que d'autres sont spcifques au contexte de certains widgets. Tous ces tats portent un nom commenant par "aria-". Ils transmettent des informa- tions utiles au visiteur concernant ce qui a chang pour un lment dsign. Saviez-vous que vous connaissiez dj l'un des ces tats: aria-hidden? Cet attribut aria-hidden a t vu en dbut de chapitre. Il accepte une valeur boolenne ("true" ou "false") et indique l 'agent du poste client ou la techno- logie d'assistance s' il faut ou non faire connatre l'utilisateur le contenu concern. Parmi les autres tats ARIA prdfnis, nous pouvons citer aria- disabled, aria-expanded, aria-invalid, aria-pressed et aria-selected. Si nous revenons l'interface onglets de la Figure5.1, nous pouvons tirer proft de l'tat aria-hidden pour contrler l'tat des panneaux et de l'tat aria-selected pour grer l'tat des onglets. Mais la spcifcation ARIA va plus loin encore. Elle dfnit des attributs d'tats, mais galement un certain nombre de proprits pouvant tre associes un lment. Citons notamment aria-label, aria-labelledby, aria-readonly et aria-required. La lecture de cette liste vous permet de deviner que la plupart de ces proprits sont destines aux composants des formulaires, bien que certaines (par exemple aria-controls) puissent s'appliquer notre interface onglets. Vous vous doutez sans doute qu'aria-controls a besoin d'une rfrence id comme paramtre. Cet identifant doit correspondre l'lment dont le contenu ou la prsence est contrl par un autre lment auquel l 'attribut est appliqu. Dans notre interface onglets, c'est l'onglet qui contrle le panneau associ (comme le montre la Figure 5.2). Une fois que cette relation entre onglets et panneau est tablie, nous pouvons tablir une autre relation, en exploitant aria-labelledby. Le fonctionnement est exactement le mme que pour aria-controls. ADAPWEB.indb 102 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 5 AMLIORATION PROGRESSIVE ET ACCESSIBILIT 103 role="tab" id="recipe-0-tab" aria-controls="recipe-0" role="tabpanel" id="recipe-0" aria-labelledby="recipe-0-tab" Figure 5.2 : Grce aux proprits ARIA, nous pouvons mettre en relation les difrents composants de l'interface. Les tats et les proprits ARIA aident beaucoup maintenir l'utilisateur inform. Voyons un autre concept ARIA qui est simple et dont l' intrt pratique est vident: les rgions actives (Live Regions). MAIS C'EST VIVANT ! L'apparition du mcanisme Ajax et de la recrudescence du JavaScript ont eu pour rsultat qu'une des choses les plus dsagrables dans l'exprience utilisateur est devenue la mise jour en temps rel de certaines rgions d'une page. Cela entrane de nombreux problmes d'usage, les deux principaux tant les suivants: 1) les technologies d'assistance n'taient pas informes des changements et n'avaient aucun moyen d'informer l'utilisateur leur tour ; et 2) un utilisateur qui efectue un zoom ou qui dfle sur un appareil petit cran n'est pas inform des mises jour du contenu qui se produisent en dehors de la zone afche. La spcifcation ARIA propose un attribut qui rsout directement ce problme: aria-live. ADAPWEB.indb 103 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 104 ADAPTIVE WEB DESIGN Le plus tonnant dans aria-live est sa simplicit. Il suft d'appliquer cet attribut un lment pour contrler quand et comment sa mise jour est communique l'utilisateur. L'attribut aria-live accepte l'une des trois valeurs suivantes: 1. "off" lorsque les mises jour sont frquentes et de peu d' importance, comme dans le cas d'un fux dynamique de votre compte Twitter (n'est-ce pas?); 2. "polite" pour les mises jour assez importantes pour en informer l'utili- sateur lorsqu'il ne fait rien d'autre, ce qui peut tre le cas des grands titres d'un magazine web lorsqu'ils sont mis jour; 3. "assertive" pour les mises jour sufsamment importantes pour devoir tre immdiatement annonces, ce qui est le cas des messages de validation de formulaire. Dans notre site Retreats 4 Geeks, nous pouvons valablement appliquer l 'attribut aria-live au formulaire de contact: <article id="contact" aria-live="assertive"> Cette simple retouche permet de garantir que l'utilisateur sera inform de toute erreur pendant le remplissage du formulaire et d'avoir la confrmation que le formulaire a bien t transmis. ADOPTION ET MANQUES Depuis son lancement, ARIA a fait l'objet d'un bon accueil de la commu- naut web. Au jour o nous crivons ceci, tous les grands navigateurs ont incorpor une certaine dose de support ARIA, de mme pour les outils de lecture d'cran rpandus tels que JAWS, Windows Eyes, NVDA et Orca. De grandes entreprises comme IBM, Sun Microsystems, Adobe, Yahoo! et Google travaillent d'arrache-pied augmenter l'efcacit et l'exhaustivit d'ARIA. La communaut JavaScript a aussi adopt ARIA, les deux outils Dojo Dijits 5
et jQuery UI 6 ayant incorpor les rles, tats et proprits ARIA dans leurs composants. La spcifcation est encore en cours de dveloppement et aucune mise en place n'est encore complte, mais les progrs sont permanents. 5. http://dojotoolkit.org/widgets 6. http://jqueryui.com/ ADAPWEB.indb 104 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 5 AMLIORATION PROGRESSIVE ET ACCESSIBILIT 105 Ce serait pch de ma part de ne pas mentionner le principal problme qui empche ARIA de se fondre harmonieusement dans notre approche d'am- lioration progressive, tout du moins au niveau des rles et des tats des widgets. En efet, nous ne disposons d'aucun moyen de tester la disponibilit du support ARIA dans le navigateur ou dans la technologie d'assistance. Nous ne pouvons donc pas bien dcider comment exploiter au mieux chaque widget. Derek Featherstone avait soulev ce problme dans son excellent article pour le site A List Apart sous le titre "ARIA and Progressive Enhancement 7 ". J'en conseille la lecture tous ceux qui veulent mieux comprendre ce problme. Pour le moment, aucune solution n'a encore t trouve, mais croisons les doigts. LES RACCOURCIS CLAVIER, C'EST BIEN Le dernier sujet que je veux aborder avant de clore ce chapitre est l'accessibilit au moyen du clavier. L'utilisation systmatique de la souris et la multiplication des appareils tactiles tels que les tablettes font qu'il est assez facile d'oublier notre bon vieux clavier, ce qui serait une grave erreur. Le clavier reste un outil extrmement pratique, et il constitue l'interface de prdilection de la plupart des utilisateurs non-voyants tout autant que des utilisateurs chevronns. Nous avons appris beaucoup en ce qui concerne le clavier au cours des dernires annes. Nous avons tout d'abord compris que les touches d'accs constituaient une bonne ide, mais que dans la pratique ce n'tait pas si intressant 8 . Nous avons galement compris qu'une application trop rigou- reuse de l 'attribut tabindex pouvait plonger les utilisateurs dans une frnsie de sauts d'un lment l'autre (et un nervement certain) 9 . Ce que nous avons surtout dcouvert, c'est que nous pouvions nous servir du code JavaScript pour modifer dynamiquement la valeur de l 'attribut tabindex pour simplifer le cheminement de l'utilisateur parmi les difrents composants d'un widget complexe, comme c'est le cas d'une interface onglets ou d'un formulaire en accordon. quoi correspond cette technique appele jonglage tabindex? Au cours de l'anne 2005 (on n'a pas retrouv l'origine exacte), quelqu'un a dcouvert qu'en donnant la valeur "-1" l'attribut tabindex d'un lment, cela cartait l'lment 7. http://alistapart.com/articles/aria-and-progressive-enhancement/ 8. http://www.wats.ca/show.php?contentid=32 9. http://webaim.org/techniques/keyboard/tabindex ADAPWEB.indb 105 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 106 ADAPTIVE WEB DESIGN de la squence de focalisation par la touche TAB dans le document 10 . Ce qui est intressant, c'est que bien que le composant concern ne fasse plus partie de la squence de tabulation dans le document, on peut encore le cibler en code JavaScript (avec element.focus()), ce qui ouvre de nouvelles possibilits pour contrler prcisment l'exprience de l'utilisateur. Parcourons un scnario typique en revisitant l'interface onglets prsente un peu plus haut: 1. L'utilisateur arrive dans l'interface onglets et actionne la touche TAB de son clavier, ce qui focalise sur le premier onglet (qui est associ au panneau actuellement afch). 2. S'il actionne nouveau la touche TAB ou le bouton du clavier tactile, le focus passe l'lment de contenu ciblable suivant en quittant la section des onglets. Cela ne l'emmne pas l'onglet suivant dans la liste. 3. S'il maintient la touche MAJ tout en actionnant la touche TAB, il revient dans la liste des onglets et ractive l'onglet courant. 4. Il peut utiliser les fches du curseur pour circuler parmi les difrents onglets de la liste, en afchant chaque fois le panneau correspondant. 5. S'il actionne la touche ENTRE pendant qu'il navigue dans la liste des onglets, il focalise sur le panneau correspondant l'onglet actif. Je reconnais que cela reprsente beaucoup d'utilisation de la touche TAB (et un df remarquable). Cependant, en jouant bien avec tabindex et en ajoutant un peu de code JavaScript, vous y arrivez aisment. Voici comment: 1. Vous commencez par afecter la valeur "-1" au tabindex de chacun des onglets et panneaux, ce qui les carte de la squence de tabulation de la page. 2. Vous rafectez ensuite la valeur "0" l'onglet courant pour le rapatrier dans la squence de tabulation sa position par dfaut. 3. En JavaScript, vous pouvez ensuite rgler dynamiquement la proprit tabindex de chacun des onglets en fonction des commandes frappes au clavier par l'utilisateur, par exemple les touches gauche, droite, haut et bas. Vous permettez ainsi l'utilisateur de se dplacer facilement dans l'interface. 10. Ce comportement a t particulirement intressant parce que, selon la spcifcation du W3C, tabindex ne pouvait accepter une valeur qu'entre 0 et 32767. ADAPWEB.indb 106 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 5 AMLIORATION PROGRESSIVE ET ACCESSIBILIT 107 Voici un extrait de la mthode nomme swap() de TabInterface qui montre comment jongler avec tabindex (vous y trouvez galement un peu de manipu- lation des attributs ARIA et d'interversion d'lments class): function swap( e ) { // ... // Dsactivation du panneau et de l'onglet actifs removeClassName( old_tab, 'active' ); old_tab.setAttribute( 'aria-selected', 'false' ); old_tab.setAttribute( 'tabindex', '-1' ); removeClassName( old_folder, 'visible' ); old_folder.setAttribute( 'aria-hidden', 'true' ); // Activation du nouveau panneau et onglet addClassName( tab, 'active' ); tab.setAttribute( 'aria-selected', 'true' ); tab.setAttribute( 'tabindex', '0' ); addClassName( new_folder, 'visible' ); new_folder.setAttribute( 'aria-hidden', 'false' ); // ... } Pour voir cette technique en pleine action, allez dcouvrir TabInterface.js sur le site Github 11 . AGISSEZ ACCESSIBLE L'accessibilit est un sujet complexe. Un peu de temps est ncessaire pour vous y habituer, mais cela deviendra ensuite une seconde nature. Comme toutes les autres techniques de ce livre, l'accessibilit devra de prfrence tre applique en plusieurs niveaux, afn de construire l'interface utilisateur progressivement. Vous pourrez ainsi crer un rsultat qui rpondra aux attentes de tous vos utilisateurs. 11. http://github.com/easy-designs/TabInterface.js ADAPWEB.indb 107 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 "Quand tu veux construire un bateau, ne commence pas par rassembler du bois, couper des planches et distribuer du travail, mais rveille au sein des hommes le dsir de la mer grande et belle." ANTOINE DE SAINT-EXUPERY ADAPWEB.indb 108 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPI TRE 6 EMPORTER Nous avons visit bien des aspects durant cette courte promenade ensemble. Nous avons vu l 'amlioration progressive en action, en partant d'un simple document texte pour aboutir une page web attrayante, fonctionnelle et restant accessible tous. Le rythme de croisire a t soutenu, mais nous esprons que vous repartez avec une ide plus prcise de ce qu'est l 'amlio- ration progressive, pourquoi cela fonctionne et comment l'incorporer dans vos prochains projets, au niveau conception et dveloppement. Vous avez peut-tre dj mis en pratique certaines techniques. Bien que ce livre soit de pagination rduite et que nous ayons la chance de pouvoir faire appel un excellent concepteur d'index, vous pourriez aisment ne plus savoir o a t abord un concept que vous voudriez revoir. Je fournis cet efet dans les pages suivantes un rapide rsum des principales techniques prsentes, avec des conseils d'utilisation. Cette checklist de l 'amlioration progressive vous permettra de vrifer que vous tenez compte avec toute la considration requise des aspects essentiels de l 'amlioration progressive. votre tour de mettre tout cela en pratique en concevant des choses superbes! ADAPWEB.indb 109 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 110 ADAPTIVE WEB DESIGN LA CHECKLIST DE L'AMLIORATION PROGRESSIVE Contenu & HTML (Chapitre 2) UN MANUSCRIT/TAPUSCRIT BIEN RDIG ET NE PERDANT PAS SON SENS LORSQU'IL EST LU PAR UN LECTEUR CRAN AUDIO Il s'agit du niveau fondamental de l'exprience utilisateur; il doit faire l'objet de tous vos soins. Nous donnons quelques pistes dans la biblio- graphie. CHOISISSEZ VOS LMENTS HTML EN FONCTION DE LEUR SIGNIFICATION Le simple fait de tirer proft de la smantique standard des lments (balises) HTML reprsente un grand pas vers une meilleure accessi- bilit (et optimise le travail des moteurs de recherche). EXPLOITEZ LES MICRO-FORMATS POUR PALLIER LES MANQUES DU HTML Les micro-formats forment des extensions au lexique HTML et sont reconnus par de nombreux navigateurs et plusieurs moteurs de recherche. SERVEZ-VOUS DES CLASSIFICATIONS POUR REGROUPER DES LMENTS QUI PARTICIPENT LA MME FONCTION La classifcation (au moyen de l 'attribut class, par exemple) donne du sens aux lments HTML pour lesquels le standard n'en fournit pas assez et lorsqu'il n'existe pas de micro-format appropri. IDENTIFIEZ LES LMENTS STRUCTURANTS L'identifcation (par exemple par l'utilisation de l 'attribut id) est une excellente solution pour ajouter du contexte une rgion de page ou une instance spcifque d'un lment de classifcation. ADAPWEB.indb 110 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 6 EMPORTER 111 CSS (Chapitre 3) VRIFIEZ MINUTIEUSEMENT VOS SLECTEURS COMPOSITES Vous prenez des risques en mlangeant des slecteurs de niveaux de complexit trs difrents, car lorsque le navigateur ne comprend pas un des slecteurs, il ignore tout le jeu de rgles. Cela devient en revanche une bonne astuce si votre but est de masquer tout un jeu de rgles pour les anciens navigateurs. ORGANISEZ VOS RGLES CSS EN PENSANT AU MCANISME DE CASCADE L'ordre d'apparition est signifcatif. Une bonne organisation de vos rgles de styles vous aidera concevoir une structure amlioration progressive, ce qui rendra votre code CSS plus facile maintenir. MASQUEZ LES JEUX DE RGLES CSS RCENTES AUX ANCIENS NAVIGATEURS Un des plus puissants outils CSS pour masquer slectivement des jeux de rgles est le bloc @media. GREZ LES DIVERGENCES D'IE AVEC DES COMMENTAIRES CONDITIONNELS Les anciennes versions d'Internet Explorer sont rputes pour leurs imperfections. Les Commentaires Conditionnels du type <!--[if IE constituent la meilleure technique pour ajouter des correctifs en CSS et en JavaScript selon la version d'IE. Pensez les organiser en squence descendante, de la plus rcente la plus ancienne version grer. ASSUREZ-VOUS D'AVOIR PRIS EN COMPTE LES MDIAS ET CONTEXTES DE RECHANGE Les dsignations et les requtes de mdias permettent d'adapter le rendu visuel et l'interaction aux possibilits du contexte d'utilisation. ADAPWEB.indb 111 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 112 ADAPTIVE WEB DESIGN JavaScript (Chapitre 4) VRIFIEZ QUE VOTRE CODE JAVASCRIPT RESTE DISCRET ET NON BLOQUANT Les scripts doivent tre les plus gnriques possible et rester le moins possible imbriqus avec le marquage. C'est ce qui vous permettra de les reformuler de faon indpendante. Vos scripts JavaScript ne doivent pas dpendre d'un marquage spcifque, mais tre assez souples pour pouvoir s'adapter aux volutions du contenu de la page. VRIFIEZ QUE TOUT LE CONTENU EST ACCESSIBLE ET QUE TOUTES LES ACTIONS INDISPENSABLES PEUVENT TRE FAITES MME LORSQUE LE JAVASCRIPT EST DSACTIV Vous ne devez pas rendre la prsence de JavaScript obligatoire. Un point, c'est tout. Lorsque vous voulez enrichir la page avec du JavaS- cript, adoptez l 'approche Hijax. SERVEZ-VOUS DE JAVASCRIPT POUR GNRER TOUT LE MARQUAGE SUPPLMENTAIRE QU'IL NCESSITE JavaScript est un excellent outil pour appliquer des traitements au modle DOM. Il n'y a donc aucune raison pour injecter de faon fge le marquage qui n'a t ajout que pour le fonctionnement du script. SERVEZ-VOUS DE JAVASCRIPT POUR ACTIVER LES STYLES LIS AU SCRIPT Une des situations les plus navrantes consiste englober du contenu dans un composant widget puis constater que le widget ne fonctionne pas, parce que JavaScript est dsactiv ou que le script contient une erreur. Prvoyez une option binaire pour que JavaScript active les styles lis au widget. CONCEVEZ DES SCRIPTS DDIS DS QUE C'EST POSSIBLE Essayez toujours de concevoir des scripts pouvant fonctionner en indpendance et appliquez les tests unitaires qui vous permettent de vrifer qu'ils sont autonomes. ADAPWEB.indb 112 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 6 EMPORTER 113 Accessibilit (Chapitre 5) EMPLOYEZ DES REPRES ARIA PARTOUT O ILS SONT APPROPRIS Si vous travaillez en HTML5, certains repres ARIA vous sembleront redondants, mais il vaut mieux les prvoir aussi pour tre par. Leur utilisation est facile et ils peuvent fortement augmenter l 'accessibilit de vos pages. SERVEZ-VOUS DES RLES ET DES TATS ARIA POUR DONNER AUX UTILISATEURS DES DTAILS SUR LES WIDGETS Lorsque vous implantez un widget conu en JavaScript, les utilisateurs ont peu d'indices sur ce que dclenche leur interaction avec lui. Les rles et les tats remplissent cette absence. SERVEZ-VOUS DE TABINDEX POUR GUIDER L'UTILISATEUR PARMI LES LMENTS INTERACTIFS DE LA PAGE L'attribut tabindex permet d'tablir une trajectoire travers la page, et guide l'utilisateur vite et bien vers les repres importants. Vous pouvez aller plus loin en exploitant JavaScript pour dcider la vole de ce qui peut ou ne peut pas tre focalis en fonction des interactions de l'utilisateur avec les composants de la page. ADAPWEB.indb 113 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 114 ADAPTIVE WEB DESIGN BIBLIOGRAPHIE Contenu et rdaction Livres parus The Elements of Content Strategy par Erin Kissane, A Book Apart, 2011 Disponible en franais chez Eyrolles : Stratgie de contenu Web (ISBN : 2212132794), traduction de Muriel Vandermeulen. Content Strategy for the Web par Kristina Halvorson, New Riders, 2009 Articles sur le Web "Writing Content that Works for a Living" par Erin Kissane, A List Apart http://www.alistapart.com/articles/writingcontentthatworksfora- living/ "Reviving Anorexic Web Writing" par Amber Simmons, A List Apart http://www.alistapart.com/articles/revivinganorexicwebwriting/ "Better Writing Through Design" par Bronwyn Jones http://www.alistapart.com/articles/betterwritingthroughdesign/ "Calling All Designers: Learn to Write!" par Derek Powazek, A List Apart http://www.alistapart.com/articles/learntowrite/ "Attack of the Zombie Copy" par Erin Kissane, A List Apart http://www.alistapart.com/articles/zombiecopy/ ADAPWEB.indb 114 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 6 EMPORTER 115 Marquage HTML Livres parus HTML5 for Web Designers par Jeremy Keith, A Book Apart, 2010 Disponible en franais chez Eyrolles: HTML5 pour les web designers (ISBN: 2212128614), traduction de Charles Robert. Web Standards Solutions: The Markup and Style Handbook, Special Edition par Dan Cederholm, Friends of ED, 2009 Disponible en franais chez Pearson: Bonnes pratiques des standards du web (ISBN: 2744025720), traduction de Sandrine Burriel. Designing with Web Standards, 3rd Edition par Jefrey Zeldman et Ethan Marcotte, New Riders, 2009 Developing with Web Standards par John Allsopp, New Riders, 2009 Microformats: Empowering Your Markup for Web 2.0 par John Allsopp, Friends of ED, 2007 Articles sur le Web "Where Our Standards Went Wrong" par Ethan Marcotte, A List Apart http://www.alistapart.com/articles/whereourstandardswentwrong/ "How to Grok Web Standards" par Craig Cook, A List Apart http://www.alistapart.com/articles/grokwebstandards/ "Using XHTML/CSS for an Effective SEO Campaign" par Brandon Olejniczak, A List Apart http://www.alistapart.com/articles/seo/ ADAPWEB.indb 115 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 116 ADAPTIVE WEB DESIGN CSS Livres parus CSS3 for Web Designers par Dan Cederholm, A Book Apart, 2010 Disponible en franais chez Eyrolles: CSS3 pour les Web Designers (ISBN: 2212129874), traduction de Charles Robert. CSS Mastery: Advanced Web Standards Solutions, Second Edition par Simon Collison, Andy Budd, Cameron Moll, Friends of ED, 2009 Disponible en franais chez Pearson: Matrise des CSS (2e dition) (ISBN: 2744024465) traduction de Patrick Fabre. More Eric Meyer on CSS par Eric Meyer, New Riders, 2004 En franais, voyez ce livre du mme auteur chez Pearson: CSS, techniques professionnelles pour mise en page moderne (ISBN: 2744025763). Handcrafted CSS: More Bulletproof Web Design par Dan Cederholm et Ethan Marcotte, New Riders, 2009 Bulletproof Web Design: Improving fexibility and protecting against worst- case scenarios with XHTML and CSS (2nd Edition) par Dan Cederholm, New Riders, 2007 Eric Meyer on CSS: Mastering the Language of Web Design par Eric Meyer, New Riders, 2002 Articles sur le Web "Adaptive Layouts with Media Queries" par Aaron Gustafson, .Net Magazine, Issue 205 ADAPWEB.indb 116 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 6 EMPORTER 117 "Responsive Web Design" par Ethan Marcotte, A List Apart http://www.alistapart.com/articles/responsive-web-design/ "Accessible Data Visualization with Web Standards" par Wilson Miner, A List Apart http://www.alistapart.com/articles/accessibledatavisualization/ "Big, Stark & Chunky" par Joe Clark, A List Apart http://www.alistapart.com/articles/lowvision/ "Elastic Design" par Patrick Grifths, A List Apart http://www.alistapart.com/articles/elastic/ "CSS Design: Going to Print" par Eric Meyer, A List Apart http://www.alistapart.com/articles/goingtoprint/ JavaScript Livres parus Bulletproof Ajax par Jeremy Keith, New Riders, 2007 DOM Scripting par Jeremy Keith, Friends of ED, 2006 En franais, nous conseillons JavaScript, les bons lments de Douglas Crockford (ISBN: 2744025828). Articles sur le Web "Test-Driven Progressive Enhancement" par Scott Jehl, A List Apart http://www.alistapart.com/articles/testdriven/ "Behavioral Separation" par Jeremy Keith, A List Apart http://www.alistapart.com/articles/behavioralseparation/ ADAPWEB.indb 117 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 118 ADAPTIVE WEB DESIGN "Improving Link Display for Print" par Aaron Gustafson, A List Apart http://www.alistapart.com/articles/improvingprint/ "JavaScript Triggers" par Peter Paul Koch, A List Apart http://www.alistapart.com/articles/scripttriggers/ Accessibilit & ARIA Livres parus Designing with Progressive Enhancement: Building the Web that Works for Everyone par Todd Parker, Scott Jehl, Maggie Costello Wachs, Patty Toland, New Riders, 2010 Just Ask: Integrating Accessibility Throughout Design par Shawn Lawton Henry, Lulu, 2007 Design Accessible Web Sites: 36 Keys to Creating Content for All Audiences and Platforms par Jeremy Sydik, Pragmatic Bookshelf, 2007 Articles sur le Web "Accessible Web 2.0 Applications with WAI-ARIA" par Martin Kliehm, A List Apart http://www.alistapart.com/articles/waiaria/ "HTML5 and the myth of WAI-ARIA redundance" par Steve Faulkner, The Paciello Group Blog http://www.paciellogroup.com/blog/?p=585 "DHTML Style Guide" par AOL Developer Network http://dev.aol.com/dhtml_style_guide "Making Compact Forms More Accessible" par Mike Brittain, A List Apart http://www.alistapart.com/articles/makingcompactformsmoreacces- sible/ ADAPWEB.indb 118 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 CHAPITRE 6 EMPORTER 119 "High Accessibility Is Efective Search Engine Optimization" par Andy Hagans, A List Apart http://www.alistapart.com/articles/accessibilityseo/ "What Is Web Accessibility?" par Trenton Moss, A List Apart http://www.alistapart.com/articles/wiwa/ ADAPWEB.indb 119 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758
ADAPWEB.indb 120 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 Symboles .accordion 88 .accordion-on 88 .auto-submit 88 .auto-submit.active 88 <humhum> 99 <!--[if 57 @import 58 #intro 44 @media 58 .replaced 88 .replace-me 88 A a 16 Aaron Gustafson vi, 116 abbr 16 Accessibilit ARIA 91 checklist 113 et clavier 106 redondance 98 accessibly-hidden 95 Accordon 92 INDEX acronym 16 Adobe 9, 104 Adoption et manques 104 Adresse URL 26 AIR 9 Ajax 8, 73, 94, 101 A List Apart vi Aller 97 alt 20 Amber Simmons 114 Amlioration progressive checklist 110 concept 1 couches 10 exemple illustr 53 Ancrage 76 Android 9 Andy Clarke 45 Apple 9 ARIA attributs 96, 102 concept 12 tat 102 et clavier 107 mcanisme 96 ADAPWEB.indb 121 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 NP ADAPTIVE WEB DESIGN 122 ADAPTIVE WEB DESIGN repre 97 aria-controls 102 aria-disabled 102 aria-expanded 102 aria-hidden 102 aria-invalid 102 aria-label 102 aria-live 103 aria-pressed 102 aria-readonly 102 aria-required 102 aria-selected 102 article 27, 49 Attribut CSS 40 ARIA 96 B b 31 background-color 42 Blog 23 body 75 bold 41 border 54 Braille 58 Brandon Olejniczak 115 Brendan Eich 68 C Cacahute 6 Callback function 94 Chrome 9 class 22, 49 Classe d'activation 88 Classe racine 33 Clavier 97, 105 color 41 columnheader 99 Commentaires Conditionnels 56 Contenu accs 1 checklist 110 collecte 7 comparaison 51 et CSS 39 masquage 93 Contraintes technologiques 1 Craig Cook 115 CSS 2.1 45 3 61 amlioration progressive 39 checklist 111 couleurs 42 CSS3 4 dmonstration 43 et accessibilit 93 et crans 62 guerres 45 liste 78 ordre 47 pannes 6 slecteur 45 syntaxe 40 tolrance 39 versions 1 D Daltonisme 92 Dan Cederholm 115 Darwin 3 datetime 34 Dave Shea 44 definition 99 Dgradation lgante 4 Dlgation d'vnement 75 Derek Featherstone 105 description 33 Director 4 display 93 div 18 ADAPWEB.indb 122 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 <CHAPNUM> <TITRE CHAPITRE> NP INDEX 123 div#content 22 document.all 69 document.getElementById 69 document.layers 69 Dojo Dijits 104 DOM 33, 69, 85, 112 Dropdown 78 dtend 33 dtstart 33 E easy-designs.net 71 Easy! Readers 130 ECMA 69 ECMAScript 69 cran troit 63 large 63 largeur 61 Egor Kloos 43 element.focus 106 Epiphany 9 Eric Meyer vi, 25, 116, 117 Erin Kissane 114 Ethan Marcotte 115, 116 F Feuille de styles et XFN 25 figure.focal 49 Flash 4, 12 Flickr 26 fn 28 Fonction de rappel 94 fondation smantique 16 font 39 font-size 47 font-weight 41 footer 26, 99 form 99 Frisbee 20 G Gawker Media 67 Gemination 43 Gospize 3 getAttribute 73 GIF 39 Gizmodo 67 Glenn Jones 26 Google 104 H h1 16, 47 H2VX 27 Handicap et HTML 16 et web 91 hAtom 26 hCalendar 26, 33, 100 hCard 26, 28 header 17 heading 99 hgroup 18 highlight 85 Hijax 73, 112 href 71 hResume 26 html 42 HTML 3.0 22 4.0 22 5 23 amlioration progressive 15 attributs 21 checklist 110 lment 15 lment b 31 et ARIA 97 HTML5 4 ADAPWEB.indb 123 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 NP ADAPTIVE WEB DESIGN 124 ADAPTIVE WEB DESIGN pannes 6 smantique 11 versions 1 HTTP 50, 72 I IBM 104 id 18 Ident Engine 26 IE8 56 IE9 56 les Galapagos 3 Image 17, 39 img 17, 99 Internet Explorer 68 versions 43, 56 iPhone 82 J Java 12 JavaScript absence 19 accessibilit 92 Ajax 8 checklist 112 code source 70 collisions de styles 88 dpendance 67 dsactiver 70 discret 72 erreurs 6, 83 et ARIA 96 et clavier 106 et HTML 68, 77 fabilit 71 librairie 93 principes 68 JAWS 104 Jefrey Zeldman vii, 115 Jeremy Keith 67, 73, 115 Jeu de rgles 46 Joe Clark 117 John Allsopp 115 jQuery 83, 93, 104 JScript 68 K Kelly iv Kiosque 58 L Lecteur d'cran 20 Lzard 2 Lifehacker 67 list 99 Liste droulante 78 listitem 99 location 21, 33 Lodging 47 lte 57 Lynx 4, 19 M Macromedia 4 Maggie Costello Wachs 118 main.css 57 Malentendants 91 Mange interdit 8 margin 49 Martin Kliehm 118 Matthew Mullenweg 25 max-width 63 Mmoire 84 Microformat 22, 25 Microsoft 74 Mike Brittain 118 Mike Isolani 67 Minuterie 81 M&M's 6 ADAPWEB.indb 124 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 <CHAPNUM> <TITRE CHAPITRE> NP INDEX 125 Mosaic 4 MOSe 43 Movable Type 26 Mozilla 44 N nav 78, 97 Navigateur blocage de l'accs 5 guerre 69 Lynx 4 Mosaic 4 NCSA 4 Netscape 68 Netscape Navigator 8 Non-voyants 91 NVDA 104 O ol 18 onclick 72, 74 Onglets 100 Oomph 27 Opera 44 Operator 27, 36 Optimus 27 Orca 104 Ordre des jeux de rgles 47 org 28 P PageRank 16 parseFloat 84 Parsing error 40 Patrick Grifths 117 Peter Paul Koch 118 Petit quiproquo, grands efets 56 photo 28 Pinson de Darwin 3 Pixels 61 Planifcation et retenue 89 Principe de tolrance 5 Proprit CSS 40 ARIA 102 Protocoles 2 Prototype 93 px 49 R Radio 58 rel 25, 72 rel-nofollow 26 rel-tag 26 Remerciements iv Requte de mdia 61 Restaurant 10 Retreats 4 Geeks 47, 80, 99 Retreats4Geeks.com 12 RGB 42 RGBa 41 role 28, 96 row 99 rowheader 99 S Safari 9, 44 Scott Jehl 117 screen 63 Script capture et bullage 75 excution 74 exemple de masquage 95 indpendance 112 section 27 select 78 Slecteur 40 Smantique ad hoc 21 separator 99 ADAPWEB.indb 125 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 NP ADAPTIVE WEB DESIGN 126 ADAPTIVE WEB DESIGN setTimeout 81 Shawn Lawton 118 Showcase 9 showing 81 Site web en rideau 67 HTML5 4 minimaliste 6 smartphone 7 tolrance aux pannes 4 slideDown 94 slideUp 94 Smartphone 7 Social Graph 26 Sons 11 Spiders 26 Steve Champeon 6 style 85 stylesheet 25 summary 33 Sun Microsystems 104 Symbian 9 T tab 100 tabindex 105 TabInterface 107 table 15 Tablette 63, 105 tablist 100 tabpanel 100 Tantek elik 25 Target 91 Technologies d'assistance 92 Tlvision 58 Terminaux portables 58 Tests unitaires 112 Ttranopie 92 text-indent 93 time 34 title 20, 45 Todd Parker 118 Trenton Moss 119 trigger 81 Twitter 26 Typographie 49 U url 28 URL 26 V vcard 28, 45 vevent 33 Vidos 11, 79 visibility 93 W W3C 58, 74, 106 WAI-ARIA 12 Web et clavier 105 et tlvision 58 information 7 W3C 58 Webkit 9 WebOS 9 Web Standards Project 6 Widget 87, 100, 113 Wilson Miner 117 WIM CROUWEL 14 Windows Eyes 104 WordPress 26 X XFN 25 XHTML 25 XML 18 XMLHttpRequest 74 ADAPWEB.indb 126 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 <CHAPNUM> <TITRE CHAPITRE> NP INDEX 127 Y Yahoo! 104 Z Zen Garden 43 Zoom 91 ADAPWEB.indb 127 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 ADAPWEB.indb 128 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 129 PROPOS DE L'AUTEUR Aaron Gustafson travaille dans le monde du Web depuis quinze ans, ce qui lui a permis de renforcer son intrt pour les standards du Web et d'acqurir de solides connaissances sur la stratgie et l 'architecture des sites web, sur la conception des interfaces et sur de nombreux langages (parmi lesquels XHTML, CSS, JavaScript et PHP). Aaron et sa femme Kelly McCarthy sont propritaires d'Easy! Designs, une agence de consultants web situe Chattanooga, Tennessee. Lorsqu'il n'est pas plong dans le code, Aaron est en gnral en train de porter la bonne parole et de partager ses connaissances avec les autres acteurs du milieu du Web. Aaron a form des professionnels au New York Times, chez Gartner et l'agence US Environmental Protection Agency (entre autres). Il a pris la parole dans les confrences web les plus vues, et notamment An Event Apart et Web Directions. Il est chef de groupe du projet WaSP (Web Standards Project) et Invited Expert l 'alliance OWEA (World Wide Web Consortium's Open Web Education Alliance). Il est fondateur d'eCSStender, diteur technique chez A List Apart, contributeur pour .net Magazine et a commenc se constituer une petite bibliothque partir de ses travaux d'auteur et d'diteur technique. ADAPWEB.indb 129 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 130 ADAPTIVE WEB DESIGN PROPOS D'EASY READERS Les livres Easy! Readers sont des publications explorant les meilleures pratiques et les standards du Web destination des professionnels. Le grand praticien du Web Aaron Gustafson et d'autres tnors du Web ont produit une collection de livres qui proposent une approche globale du design de sites web de haute tenue. Trs orient ergonomie et accessibilit, Easy! Readers se donne pour objectif de guider le lecteur dans les origines, la philosophie et l 'application pratique des difrents sujets lis aux standards du Web. Le rseau web est un mdia en volution permanente en termes d'tendue, d'audience et d'infrastructure. Nous nous engageons reprer, puis vous proposer des contenus pertinents propos de ces volutions. ADAPWEB.indb 130 17/04/13 12:47 Proprit de david damour <damourlalchimiste@gmail.com> customer 272758 at 2014-04-04 14:08:47 +0200 272758 Crer des sites riches avec lamlioration progressive ADAPTIVE WEB DESIGN Aaron Gustafson Prface de Jeffrey Zeldman Le Web est en perptuelle mutation : ses supports et ses usages, sa porte et ses applications ne cessent de changer et d'voluer. Si vous travaillez dans le Web, vous avez certainement entendu parler lamlioration progressive (progressive enhancement). Mais que recouvre rellement cette notion ? Comment la rendre oprante dans son travail de dveloppement quotidien et dans le design de ses sites ? Dans ce guide, Aaron Gustafson fait la gense de lamlioration progressive, explique ses origines, sa philosophie, son fonctionnement et propose de nombreuses techniques de mise en uvre pour les langages HTML, CSS et JavaScript. Grce lamlioration progressive, vous remettrez les contenus au cur de vos dveloppements, de faon proposer des expriences qui servent les utilisateurs plutt que les navigateurs. Vous donnerez accs vos contenus sans limite technologique, pour les supports dhier, daujourdhui et de demain. Adaptive Web Design constitue non seulement lexplication la plus claire et la plus lgante de lamlioration progressive que jaie jamais lue, mais en plus, ce livre est bourr de savoir-faire pratiques qui viennent s'installer directement dans votre nocortex, grce au style chaleureux et amical d'Aaron. Jeremy Keith, auteur de HTML5 pour les web designers Enn. Lamlioration progressive explique avec un parfait quilibre entre thorie et pratique. Dan Cederholm, auteur de CSS3 pour les web designers Aaron Gustafson a plus de 15 ans dexprience dans le Web et a dvelopp une connaissance profonde des standards du web, de larchitecture des sites, des stratgies de contenu et du design dinterface. Il dirige le Web Standards Projects (WaSP), est expert technique pour A List Apart, et contribue rgulirement .Net Magazine. ISBN : 978-2-7440-5600-0 www.pearson.fr adaptivewebdesign.info
Personnaliser votre site Wordpress: 40 thèmes, extensions et plugins utiles pour bien débuter avec Wordpress.org, astuces et conseils pour améliorer la sécurité, l'ergonomie, la rapidité de votre site
D'un Livre Électronique À Un Livre Audio - Un Guide Pour Les Auteurs À Succès: Gagner De l'Argent Avec Vos Livres Électroniques En Les Vendant Sous Forme De Livre Audio