This manual is geared for University Students taking a 2-Day Web Design Workshop. This is a beginner-level workshop for those who have never designed a website before.
Descripción completa
Descrição completa
Descrição completa
This is a website design proposal for an e-commerce website.
Full description
Contoh Proposal web design
Do better web design by learning about its psychology.
lllllllDescripción completa
Design of an Adaptive Frequency Hopping Algorithm
Architecture. Adaptive Reuse.Case Study. Antillan House. Public Library.Full description
ADAPTIVE REUSE
Controlling meshing distortion
adaptive fiter for desired filter performanceFull description
Web Designing is the process of building and maintaining websites. It is used to describe the design process relating to the front-end design of a website including writing mark up. By using this, we can design dynamic web pages for further communica
Descripción: Book Adaptive controller design
the concept of Adaptive Reuse giving examples in india. and a few over the world. History Project.
Full description
Modified RSI - Adaptive
Full description
ADAPTIVE WEB DESIGN Créer des sites riches avec l’amélioration progressive
Aaron Gustafson Préface de Jeffrey Zeldman
Propriété de david damour
ADAPTIVE WEB DESIGN Créer des sites riches avec l'amélioration progressive Aaron Gustafson
Traduit par Olivier Engler
Pearson France a apporté le plus plus grand soin à la réalisation réa lisation de ce livre afin de vous fournir une information inform ation complète complète et fiable. Cependant, Pearson France n’ n’assume assume de responsabilités, ni pour son utilisation, ni pour les contrefaçons de brevets ou atteintes aux droits de tierces personnes qui pourraient résulter de cette utilisation. Les exemples ou les programmes présents dans cet ouvrage sont fournis pour illustrer les descriptions théoriques. Ils ne sont en aucun cas destinés à une utilisation commerciale ou professionnelle professionnelle.. Pearson France ne pourra en aucun cas être tenu pour responsable des préjudices préjudices ou dommages de quelque nature que ce soit pouvant résulter de l’utilisation l’utilisation de ces exemples exem ples ou programmes. program mes. Tous les noms de produits ou marques cités dans da ns ce livre sont des marques déposées par leurs propriétaires respectifs.
Publié par Pearson France Immeuble Terra Nova II 74, rue r ue de Lagny 93100 93 100 Montreuil Montreu il Tél : +33 (0)1 43 62 31 00 www.pearson.fr
Aucune représentation ou reproduction, même partielle, pa rtielle, autre que celles prévues à l’article L. 12 122-5 2-5 2˚ 2˚ et 3˚ a) du code de la propriété intellectuelle ne peut être faite sans l’autorisation expresse de Pearson France ou, le cas échéant, sans le respect des modalités prévues à l’article 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 FR ENCH Language edition published published by Pearson France.
Pour Kelly
iv
ADAPTIVE WEB DESIGN
REMERCIEMENTS Sans les conseils et le soutien de tous mes amis et collègues 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 sincère gratitude : Pour Molly Holzschlag et Jeffrey Zeldman qui m'ont pris sous leurs ailes et m'ont ont permis permi s de renforcer mes compétences en tant ta nt que conférencier et auteur. Et aux nombreux organisateurs de conférences et directeurs de publications qui m'ont donné l'occasion de mettre ces compétences en pratique. Pour Carolyn Wood qui m'a aidé à peaufiner mes premiers brouillons et pour Krista Stevens qui a épuré mes arguments, fluidifié 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 efficace et lisible. Merci aussi à tous les relecteurs qui m'ont donné de précieux conseils (et des corrections) : Dan Cederholm, Simon Collison, Kristina Halvorson, Christian Heilmann, Whitney Hess, Jeremy Keith, Dan Rubin et Jonathan Snook. Merci à l'équipe l' équipe Easy Designs Design s pour son souci des détails et son aide précieuse précieuse 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é afin de créer pour moi cette couverture absolument superbe. Et enfin, merci à Kelly qui m'a dégagé du temps pour écrire ce livre, qui m'a aidé à organiser mes idées et qui m'a encouragé encouragé à aller jusqu'au jusqu 'au bout.
REMERCIEMENTS
TABLE DES MATIÈRES vi
AVANT-PROPOS
1
CHAPITRE 1 PENSEZ À L'UTILISATEUR, PAS AU NAVIGATEUR
15
CHAPITRE 2 AMÉLIORATION AMÉLIORA TION PROGRESSIVE AVEC LE HTML
39
CHAPITRE 3 AMÉLIORATION AMÉLIORA TION PROGRESSIVE AVEC LE CSS
67
CHAPITRE 4 AMÉLIORATION PROGRESSIVE AVEC JAVASCRIPT
91
CHAPITRE 5 AMÉLIORATION AMÉLIORA TION PROGRESSIVE ET ACCESSIBILITÉ
109 CHAPITRE 6 À EMPORTER INDEX
v
vi
ADAPTIVE WEB DESIGN
AVANT-PROPOS Par un glorieux après-midi de mars 2006, je passai en trombe avec un ami devantt l'hôtel devan l 'hôtel Hilton du centre d'Austin d 'Austin pour rejoindre la prochaine conférence du festival SXSW Interactive quand Interactive quand un jeune inconnu nous arrêta net dans notre course. Sans même se présenter, il nous annonça qu'il était disponible pour prendre la parole lors de la conférence An Event Apart, un événement destiné aux web designers que j'avais initié trois t rois mois plus tôt 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 arr iviste impétueux, impétueux, Smithers ?" Le jeune arriviste impétueux est très vite devenu un de mes collègues les plus intimes. Au fil des mois et des ans, Aaron Gustafson a produit du code client et serveur pour quelques-uns des clients les plus exigeants de ma société. Tout aussi important, il a brillamment assuré le rôle d'éditeur technique de la troisième édition de Designing With Web Standards. Standards. Son travail consistait surtout à informer Ethan Marcotte et moi-même moi-même des choses que nous ignorions à propos des standards du Web. Imaginez ce que cela représente. Depuis cinq ans maintenant, Aaron est un éditeur rigoureux mais impartial pour la revue A List Apart ; Apart ; il aide les auteurs à atteindre leurs objectifs tout en s'assurant qu'ils restent toujours innovants, que leurs méthodes sont accessibles et sémantiques et (grâce à ses connaissances presque encyclopédiques) qu'ils créditent bien leurs prédécesseurs. Aaron a aussi rédigé des articles fondamentaux pour la revue. Enfin, oui, il a pris la parole à la conférence An Event Apart. Apart. Vu mon expérience de l'homme et mon admiration pour son savoir et ses compétences, j'ai été enthousiasmé lorsqu'Aaron m'a parlé de ce projet de livre et m'a laissé en lire li re quelques chapitres. chapitres. Ce n'est pas un livre de plus sur le web design. C'est une pièce qui manquait à la littérature fondamentale sur le sujet. Notre secteur d'activité a longtemps manqué d'un guide des meilleures pratiques de design web adaptatif adaptatif et conforme aux standards. Av Avec ec la déferlante des terminaux mobiles, les récentes améliorations des navigateurs web sur ordinateur de bureau comme sur téléphone et les nouvelles possibilités qu'apportent le HTML5, le CSS3 et les interfaces gestuelles,
AVANT-PROPOS
ceux qui conçoivent des sites web doivent plus que jamais disposer d'une source fiable leur montrant comment comment tirer au mieux profit de ces opportunités opportun ités en créant du contenu compatible avec tous les modèles de navigateurs, tous les formats d'affichage et tous les niveaux de capacités. Cette source fiable est entre vos mains. La convergence entre ces nouveaux éléments et ces nouvelles opportunités pousse les professionnels du Web à enfin envisager leur travail de design tel qu'il aurait dû l'être l' être depuis le début. début. Le design adaptatif est la voie à emprunter, emprunter, et personne ne maîtrise mieux qu'Aaron la pensée et les techniques nécessaires pour la pratiquer avec excellence. Ces techniques et cette approche sont exposées dans da ns les pages qui suivent. Vous Vous ne perdrez plus des journées entières à vous demander comment concevoir concevoir de belles pages page s web en rédigeant du code de qualité qui fonctionne pour tous les visiteurs. J'ai prévu de distribuer ce livre à tous mes étudiants, étudi ants, et à tous ceux avec lesquels j'ai ai l'occasion l 'occasion de travailler. travailler. Je vous invite à faire de même. Et maintenant, assez de préliminaires. Plongezvous dans la lecture et profitez-en bien ! Jeffrey Zeldman Auteur de Designing With Web Standards 3rd Edition
vii
CHAPITRE 1
PENSEZ À L'UTILISATEUR, PAS AU NAVIGATEUR Si vous avez avez un minimum m inimum d'expérience en design desig n web, il est fort probable probable que vous ayez entendu parler du concept "d'amélioration progressive" (ou que vous l'ayez pratiqué). Vous savez donc qu'il s'agit en matière de design web du modèle idéal vers lequel tendre. Mais Mai s qu'est-ce est-ce au juste que l'amélioration progressive ? Quelle est sa signification ? Comment doit-on la mettre en pratique ? Et de quelle manière peut-on incorporer cette approche à notre mode de travail dans un contexte d'évolution rapide des langages et des navigateurs ? Toutes ces questions sont très pertinentes et j'y réponds au long de ce livre. Comme vous le constaterez, l'amélioration progressive n'est pas un problème de gestion des différents navigateurs, ni de choix des versions versions de HTML HT ML ou de CSS qu'il faut utiliser. Il s'agit agit d'une d 'une approche approche philosophique philosophique visant à produire des situations qui permettent à vos utilisateurs d'accéder au contenu du site sans subir de contraintes technologiques. Que demander de mieux ? Tout cela semble très séduisant, mais la quantité de travail à prévoir paraît impressionnante. N'a N 'ayez yez crainte. Une fois que vous aurez assimilé le principe de l'amélioration 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 découvrirez découvrirez de nomb nombreux reux cas pratiques d'application de l'amélioration progressive qui combinent le HTML, le CSS et le JavaScript de façon à créer des sites web adaptatifs qui ne vont
2
ADAPTIVE WEB DESIGN
pas seulement convenir à vos utilisateurs, mais leur proposer une expérience utilisateur satisfaisante, et ce, quels que soient le navigateur ou l'appareil l'appareil avec lesquels ils y accéderont. Mais avant de plonger dans la pratique, il nous faut aborder le pourquoi et le comment de l'amélioration progressive, c'est-à-dire les fondements de cette philosophie.
S'ADAPTER OU PÉRIR S'il faut attaquer le sujet par la base, l'amélioration progressive repose sur un grand principe : la tolérance aux pannes. Cette tolérance aux pannes désigne la capacité d'un système à continuer à fonctionner même s'il rencontre une erreur imprévue. C'est cette capacité qui permet à un lézard de faire repousser sa queue et au cerveau humain de créer de nouvelles nouvelles connexions neuronales lorsqu'i lorsqu'ill se remet d'un d 'un traumatisme crânien. La nature se montre très friande fr iande de ce mécanisme de robustesse robustesse ou de résilience, et l'humain l' humain s'est est inspiré d' d 'elle elle en adoptant ce principe dans ses inventions, comme dans le cas des réseaux de distribution d'électricité intelligents qui évitent ou réduisent l'impact des surcharges réseau en détectant (et parfois en prévenant) les situations problématiques. Que vous utilisiez le réseau web en tant que simple visiteur de sites ou en tant que professionnel, vous profitez déjà en permanence de ce mécanisme de tolérance tolérance aux pannes. Ce principe principe est en action dans les modes d'a d 'achemicheminement des paquets de données (les ( les protocoles) protocoles) entre le navigateur client et le serveur web que vous voulez voulez visiter, et il est même intimement inti mement imbriqué imbriqué dans dan s les langages qui incarnent le Web d'aujourd'hui : le HTML et le CSS. Les spécifications de ces deux langages édictent une obligation pour les navigateurs d'ig d 'ignorer norer ce qu'ils qu'ils ne parviennent pas à interpréter. C'est C'est cette condition simple qui rend possible l'amélioration progressive. Mais nous y reviendrons dans un instant. Un autre aspect intéressant de la tolérance aux pannes est son ouverture à l'évolution. Revenons au modèle qu'est la nature : vous voyez la capacité d 'a'adapta daptation tion en action dans les régions ayant connu connu des changements climatiques ou environnementaux suffisants pour forcer les organismes vivants à choisir entre s'adapter, quitter les lieux ou périr.
CHAPITRE CHAPI TRE 1
PENSEZ À L'UTILISA L'UTILISATEUR, TEUR, PAS AU NAVIGA NAVIGATEUR TEUR
En 1977, les Îles Galapagos ont connu une sécheresse telle qu'elle a fait fortement baisser la quantité de petites graines qui constituaient la nourriture de prédilection des pinsons de Darwin (géospizes) habitant ces îles. Quatrevingt-cinq pour cent des géospizes sont morts de faim, seuls les plus gros spécimens ayant survécu. Pourquoi ? Parce qu'ils possédaient 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 compétitif, mais avec la sécheresse, ils ont tiré avantage de la situation. Non seulement ils ont survécu, mais ils ont transmis leurs gènes aux générations suivantes qui sont évidemment dotées d'un bec plus grand.
Figure 1.1 : Compar Comparaison aison de la taille des becs des pinsons des Galapagos Galapagos ( pinsons pinsons de Darwin ou Geospiza Geospiza fortis) tirée tirée d'une illustration du livre
Zoologie du voyage voyage du H.M.S. H.M .S. Beagle, Be agle, de de John Gould. Le HTML et le CSS ont plusieurs points communs avec les pinsons de Darwin. Darw in. Ils Il s sont en effet également conçus pour être compatibles avec avec le futur, ce qui signifie que tout ce qui fonctionne aujourd'hui fonctionnera encore demain, l'an prochain et dans dix ans. Ce sont en quelque quelque sorte des pinsons parfaits : créés pour survivre quelle que soit l'ampleur des changements de l'environnement de la navigation web. Puisque ces langages ont été prévus pour évoluer dans le temps, les navigateurs web ont été forcés de se conformer aux règles de tolérance 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
3
4
ADAPTIVE WEB DESIGN
d'atteindre un point à partir duquel le contenu et le style qu'ils véhiculent risquent de devenir illisibles ou entraînent un blocage du navigateur. La tolérance aux pannes permet de visiter un site web conçu en HTML5 avec le navigateur en mode texte Lynx ou de profiter des nouveautés du CSS3 sans craindre de se rendre inaccessible aux personnes utilisant Internet Explorer 6. Il est capital de comprendre la tolérance aux pannes pour intégrer la notion d 'a'amélior mélioration ation progressive. progressive. La tolérance aux pannes permet à l'amélio l'amélioration ration progressive de fonctionner et garantit que tous les contenus diffusés sur le Web sont accessibles à tout un chacun. Puisque la tolérance aux pannes a été incorporée dès le départ dans d ans les normes des langages HTML HT ML et CSS, CSS , vous pourriez en déduire que les professionnels professionnels du Web Web (comme (comme nous) ont ont pris soin d'en reconnaître l'i l 'importance mportance et la valeur pour concevoir nos sites web. Hélas, cela n'a pas toujours été le cas.
DES FAUTES ÉLÉGANTES Pendant la première décennie du Web, ce média a beaucoup évolué. Tout au début est apparu le navigateur Mosaic du NCSA (National ( National Center for Supercomputing Applications de Applications de l'université de l'Illinois) ; c'était le premier navigateur graphique et le HTML a accueilli l'élément nommé img. Puis est arrivé l'audio, puis la vidéo, puis l'interaction. Rester en phase avec cette évolution évol ution technologique effrénée était éta it un véritable défi. Dans notre course en avant, nous en avons oublié la tolérance aux pannes en cherchant à profiter sans cesse des dernières techniques. Nombre de nos sites finissaient par ne comporter que des cartes à liens pleine page posées sur des fonds JPEG élégants. Certains devenaient dépendants 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 théorie appelée "dégradation élégante" ( graceful graceful degradation degradation).). La dégradation élégante constitue le pendant philosophique de la tolérance aux pannes, une parente superficielle et obsédée par les apparences, qui désire uniquement mettre les plus riches atours et sortir avec les beaux garçons. Dans le contexte du Web, Web, la dégradation dég radation élégante revenait à rassasier les plus récents et puissants navigateurs av avec ec des mets de choix, tout en jetant quelques
CHAPITRE CHAPI TRE 1
PENSEZ À L'UTILISA L'UTILISATEUR, TEUR, PAS AU NAVIGA NAVIGATEUR TEUR
miettes aux pauvres hères qui approchaient avec leur minable navigateur d'ancienne génération. À l'époque de l'apogée de cette dégradation élégante, notre obsession était de garantir que nos sites seraient bien rendus par les navigateurs modernes les plus utilisés. Les tests de compatibilité avec les anciens navigateurs, lorsque nous en faisions, étaient repoussés au bas de notre liste de priorités. Le raisonnement était limpid li mpidee : le HTML HTM L et le CSS étant tous deux tolérants aux pannes, l'utilisateur verrait toujours quelque chose s'afficher. Mais nous ignorions que le JavaScript, comme d'autres langages de programmation, n'était pas tolérant aux pannes (si vous appelez par exemple une méthode inexistante, vous faites subir une erreur au visiteur). visiteur). Les scripts et app applications lications écrits en JavaScript doivent contenir des procédures spécifiques pour être capables de survivre aux erreurs (par exemple en tentant d'exécuter la même action par un autre moyen) ou du moins de pressentir une erreur potentielle en quittant avant qu'elle ne se produise. Rares étaient éta ient ceux qui prenaient ce genre de précautions, précautions, parce que nous étions focalisés sur la marche en avant, à l'affût du dernier jouet avec lequel nous pourrions embellir nos sites. Nous supposions que les anciens navigateurs ne permettraient qu'une expérience inférieure. Nous justifiions en considérant que le temps qu'il aurait fallu y consacrer pour au minimum s'assurer que le résultat restait décent et sans erreur n'en valait pas la peine. Bien sûr, nous gérions les erreurs les plus flagrantes, mais pour les autres, nous laissions gentiment les utilisateurs se débrouiller. (Et c'est triste à dire, mais certains parmi nous allaient jusqu'à bloquer l'entrée aux navigateurs qu'ils ne voulaient pas prendre la peine de gérer.)
ÉMERGENCE DU PRINCIPE DE TOLÉRANCE Après quelque temps, des développeurs web avisés ont commencé à réaliser que la prédilection de la dégradation élégante pour les images au détriment du contenu allait dans la mauvaise direction. Ils constatèrent que la dégradation élégante était la cause directe d'une réduction de la disponibilité et de l'accessibilité des contenus. Ces concepteurs et développeurs virent que le Web avait pour raison d'être la diffusion et la consommation de contenus
5
6
ADAPTIVE WEB DESIGN
(mots, images, vidéos, etc.) Ils décidèrent de reprendre les choses à zéro en considérant consid érant leurs marquages, leurs styles et leurs choix d'interaction d 'interaction en tenant compte de l'impact de ces choix sur la disponibilité des contenus. En réorientant leurs efforts, les développeurs ont commencé à exploiter la nature tolérante aux pannes du HTML et du CSS ainsi que le mécanisme de détection d'erreurs de JavaScript, et à comprendre qu'une expérience du visiteur positive ne devait devait pas être de type ty pe tout ou rien (c'était le cas sous l'e l 'effet ffet de la dégradation dég radation élégante). élégante). Au contraire, les technologies web pouvaient être exploitées sous forme de strates se complétant les unes les autres en offrant off rant une expérience et un niveau d'interaction de plus en plus riches. Steve Champeon du projet Web Web Standards Standard s Project a parfaitement capté l'l 'essence de cette philosophie en inventant l'expression "amélioration progressive"1.
Délicieux à tous les niveaux J'aime utili utiliser ser comme analog analogie ie de l'amélioration progressive la confiser confiserie ie M&M's. Au cœur de cette petite bille se trouve une cacahuète (vous le saviez ?) Cette cacahuète est en soi une bonne source de protéines et de graisses, un aliment que tout le monde apprécie (sauf ceux qui y sont allergiques, évidemment). De même, le contenu de notre site web doit pouvoir être consommé même sans aucun embellissement.
Figure 1.2 : Un continuum alimentaire.
Enrobez cette cacahuète de chocolat et vous obtenez une friandise qui met l'eau à la bouche et qui a bon goût, comme la cacahuète seule. De même, des contenus bien présentés et organisés grâce aux styles CSS sont souvent plus faciles à lire, et en tout cas, plus agréables à consommer.
PENSEZ À L'UTILISA L'UTILISATEUR, TEUR, PAS AU NAVIGA NAVIGATEUR TEUR
Si nous ajoutons une coquille d'enrobage sucré, l'expérience est encore meilleure. De même, nous pouvons enrichir notre belle mise en pages avec des interactions écrites en JavaScript qui simplifient la navigation parmi les contenus ou les font apparaître d'une manière originale et attrayante. Cette comparaison est bien sûr une simplification excessive de ce qu'est l'amélioration progressive, mais elle vous procure une idée générale de son fonctionnement. Les technologies sont appliquées sous forme de strates – le HTML, puis le HTML avec le CSS, puis le HTML, le CSS et le JavaScript –, afin de fournir des expériences différentes, dont chacune est aussi pertinente que les autres (et aussi goûteuse). goûteuse). 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 informations sont diffusées, demandées et collectées. Ces échanges sont devenus des éléments 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 représente un aspect important du Web, l'échange d'informations doit devenir notre objectif prioritaire lors de la construction de toute interface web. L'amélioration progressive garantit que tous les contenus (les informations que diffuse le site web) restent accessibles et utilisables par n'importe qui, quelle que soit la situation géographique, le type d'appareil utilisé ou les capacités capacités du logiciel d'a d 'affichage ffichage de ces contenus. contenus. De même, les outils de collecte de contenus (formulaires web, questionnaires, etc.) profitent grandement de l'amélioration progressive, progressive, car elle leur garantit une exploi exploitation tation universelle, ce qui leur permet de mieux faire leur travail d'extraction. Par définition, l'amélioration progressive s'intéresse à l'accessibilité, mais pas dans le sens sen s limité lim ité qu'on on lui prête habituellement, à savoir savoir celui d' d 'ensemble nsemble des efforts d'aménagement visant à rendre du contenu accessible aux individus ayant des besoins particuliers (handicap moteur, cérébral ou sensitif). Notre amélioration 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'accède j'accède à un site web depuis mon smartphone, smartphon e, je suis limité visuellement visuellement par la résol résolution ution et la taille de l'l'écran écran (d'autant plus avec un navigateur qui permet de zoomer) et gestuellement
7
8
ADAPTIVE WEB DESIGN
par l'interface l 'interface tactile pour activer les boutons boutons et les liens, l iens, car mes doigts sont moins précis qu'un pointeur de souris. Nous avons dit plus haut que les sites conçus dans un esprit de dégradation élégante fonctionnaient bien dans les navigateurs modernes, mais beaucoup moins bien ou pas du tout dans les navigateurs plus anciens. Dans un sens général, c'est comme si l'utilisateur visitait un parc d'attractions : les plus beaux manèges lui seraient interdits interdits parce qu'il ne fait pas la taille t aille suffisante. De même, le visiteur qui ne possède pas le "bon" navigateur va subir des problèmes probl èmes (et des erreurs) pour accéder au contenu des sites, et encore, lorsqu'i l parvient à y accéder. À l'opposé, un site web conçu en accord avec la philosophie d'amélioration progressive sera utilisable par tous, depuis tous les appareils, avec tous les navigateurs. Bien sûr, le visiteur utilisant le navigateur en mode texte Lynx n'aura pas la même expérience que celui qui possède la dernière version de Safari, mais ce sera une expérience positive et non une absence de résultat. Le contenu du site sera accessible dans une version édulcorée, ce qui n'est nullement garanti dans l'approche de dégradation élégante. Alors que leurs philosop philosophies hies sont très différentes, l'améli l 'amélioration oration progressive progressive et la dégradation élégante peuv peuvent ent facilement se confondre en termes pratiqu pratiques, es, ce qui est dommage. Pour bien souligner ces différences, j'aime utiliser cette formule : toutes les expériences conçues selon l'amélioration progressive garantissent une dégradation dég radation élégante dans les anciens navigateurs, alors que peu d'expériences conçues selon la dégradation élégante vont permettre une amélioration progressive.
Des limites ? Quelles limites ? Pendant l'âge d'or de la dégradation élégante, les sites web finissaient par ressembler aux parcs d'attractions évoqués plus haut : "Manège interdit aux personnes mesurant moins de 1,20 m de hauteur". Le Web s'était rempli (il l'est hélas encore) encore) de sites affichant fièrement une mise mis e en garde du style "Site optimisé optimi sé pour Netscape Navigator 4". 4". Nous avons abandonné cette pratique déplorable grâce à l'amélioration progressive et à la diffusion des standards web, mais ce phénomène de cloisonnement est réapparu lorsque les sites ont commencé à adopter la technique JavaScript nommée Ajax. De plus en plus de sites ont réclamé la présence de JavaScript ou même restreint l'entrée à certains modèles et versions versions de navigateurs. Nous assistions à une rediffusion rediff usion de cet épisode tant redouté de l'l ' histoire du Web Web : le retour des sales méthodes
CHAPITRE CHAPI TRE 1
PENSEZ À L'UTILISA L'UTILISATEUR, TEUR, PAS AU NAVIGA NAVIGATEUR TEUR
de blocage des navigateurs et d'a d 'anti-ergon nti-ergonomie omie que nous pensions avoir avoir définitivement abandonnées. Comme "avec le temps va, tout s'en va", la ferveur autour d'Ajax s'est calmée et nous avons pu recommencer à construire (et parfois à reconstruire) des sites fondés sur Ajax conformes à l'approche l'approche d'a d 'améliora mélioration tion progressive. Mais un beau jour, il y eut la présentation d'Apple HTML5 Showcase avec ses superbes transitions et animations en CSS 2. À peine avions-nous essuyé la salive tombée sur nos bureaux que nous décidions, nombreux, nombreux, d'incorporer d' incorporer ces élégantes nouveautés dans nos sites, soit par impatience, soit sous la pression de nos clients. Conséquence : ont commencé à se multiplier des sites qui obligeaient leurs visiteurs à disposer d'une variante très récente de Webkit 3 pour être vus v us (et au au diable les quatre-vingts quatre-ving ts pour cent de navigateurs navigateur s qui n'en étaient pas dotés). Mais les concepteurs de sites ont fini par comprendre que l'adoption de technologies spécifiques allait à l'encontre de la philosophie d'amélioration progressive. Certains d'entre eux ont alors persisté en déclarant que cette philosophie était limitante et sont revenus à l'ancienne approche de dégradation élégante. Ils estimaient que l'amélioration progressive les obligeait à prendre en charge les anciens navigateurs qui n'étaient pas aussi gratifiants à utiliser. Ce que ces gens n'ont pas compris, c'est que ce n'était pas l'amélioration progressive qui les bridait, mais leur mauvaise interprétation de cette philosophie. Il faut savoir que l'amélioration progressive ne se focalise pas sur les navigateurs. Son but est de guider la conception de scénarii qui permettent aux utilisateurs d'accéder aux contenus sans subir de contraintes technologiques. L'amélioration progressive progressive ne vous demande pas de tenter de fournir la même expérience sur différents navigateurs, et ne vous empêche empêche nullement d' d 'a dopter les dernières innovations ; elle vous demande uniquement de faire honneur à vos contenus (et à vos visiteurs) en appliquant les technologies de façon 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 gérer certaines fonctions évoluées 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, OmniWeb, Epiphany, Epiphany, pour n'en citer que quelques-uns. quelques-uns. Il I l est à la base du système WebOS de Palm et a été incorporé dans plusieurs produits Adobe parmi lesquels AIR (Adobe Integrated Runtime) et la suite CS5.
9
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'amélioration progressive et votre désir de vous montrer innovant en réalisa réalisant nt des choses étonnantes dans les navigateurs, à condition de faire des choix avisés et de ne jamais perdre de vue vos utilisateurs.
L'amélioration progressive pour un excellent service au client Supposez un instant que vous soyez serveur dans un grand restaurant. Votre travail et vos pourboires sont liés à votre attention aux détails et à la perfection de votre service. Un critère de contrôle de votre attention consiste à vérifier le niveau des verres d'eau de vos clients avant de venir les remplir. Un serveur distrait laissera les verres vides plusieurs minutes. Quelqu’un 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 aperçoive. Vous devinez quels clients quitteront le restaurant les plus satisfaits du service. Si nous considérons seulement la bonne hydratation des clients, qui recevra le meilleur pourboire, pourboire, d'après d 'après vous ? Puisque nous sommes concepteurs et développeurs développeurs de sites web, nous devons devons tendre vers la même excellence que le serveur idéal, mais ce n'est pas simple. De même que le serveur ne peut savoir à l'avance à quel rythme ses clients vont vider leurs verres, nous ne pouvons pas prévoir les besoins de chaque visiteur de nos sites. Il nous faut les devancer. Si nous sommes vraiment concentrés, nous saurons y parvenir sans que les visiteurs se rendent compte que nous déployons tous ces efforts pour eux. Cet objectif devient aisément accessible en adoptant l'approche orientée utilisateur et contenus de l'amélioration progressive (et non l'approche de suiveur des dernières modes de la dégradation élégante).
SAISISSEZ L'OCCASION Lorsque vous démarrez un projet dans une perspective d'amélioration progressive, vous vous centrez d'abord sur les contenus, puis sur tout ce qui s'y ajoute. Cette approche par strates incarne i ncarne la l a prévenance avec laquelle vous répondez par avance aux attentes des visiteurs en gérant le contexte dans lequel se fait l'accès aux pages web. Ce contexte est lié aux possibilités du
CHAPITRE CHAPI TRE 1
PENSEZ À L'UTILISA L'UTILISATEUR, TEUR, PAS AU NAVIGA NAVIGATEUR TEUR
navigateur et, dans une moindre mesure, mesu re, aux capacités capacités du matériel sur lequel il fonctionne. fonc tionne. Le but final fi nal est d 'a'adapte dapterr l'l 'expérience expérience du visiteur v isiteur en conséquence. conséquence. Le premier niveau d'expérience correspond toujours à du texte. Dans cette strate n'intervient aucune technologie remarquable ; le succès ou l'échec de la visite ne dépend que des capacités littéraires du rédacteur du contenu. Il est évident qu'un texte bien rédigé se rend ainsi universellement accessible et fait faire un pas de géant en termes d'accessibilité du contenu. Et quelles que soient les évolutions à venir du langage HTML, l'impératif de tolérance aux pannes imposée aux navigateurs dans leur interprétation du marquage HTML garantit que le contenu marqué sera toujours accessible dans son format le plus élémentaire : des chiffres et des lettres. Le deuxième niveau d'expérience correspond à la sémantique du langage HTML. Les éléments de langage et leurs attributs fournissent une description de ce que signifie 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 signification d'une d 'une expression expression peu familière. famil ière. R U E T A S I L I T U N O I T C A F S I T A S
Minimales
CAPACITÉS DU NAVIGATEUR
Evoluées
Figure 1.3 : Graphe de l'amélioration progressive.
Le troisième niveau d'expérience correspond à l'enrichissement audiovisuel avec les styles CSS et l'ajout d'images fixes, de sons et de vidéos. Comme le HTML,, le CSS est par nature tolérant aux pannes, les navigateurs HTML navigateurs ignorant ce qu'ils ne savent pas interpréter ; c'est en cela que l'amélioration l 'amélioration progressive est possible au niveau du langage CSS.
11
12
ADAPTIVE WEB DESIGN
Le quatrième niveau d'expérience est celui des interactions avec le visiteur. Dans le monde des standards, il s'agit presque toujours de code JavaScript, même si d' d 'autres technologies tech nologies d'interaction d' interaction web web ont été employées, employées, notamment Flash ou même les applets Java. Le dernier niveau d'expérience consiste à appliquer la spécification WAI-ARIA (Web Accessibility Initiative's Accessible Rich Internet Applications) Applications) et les règles de sémantique augmentées et meilleures meil leures pratiques qu'elle elle mentionne. Ces enrichisen richissements des pages web prennent la relève là où s'arrêtait arrêtait normalement norma lement le HTML (même si le HTML5 a incorporé dans son lexique quelques points sémantiques évolués issus d'ARIA). Ces différentes strates (qui sont autant de niveaux de support) permettent de proposer une expérience qui s'améliore progressivement d'une strate à la suivante. Ce ne sont pas les seuls scénarii que vous pouvez présenter à vos utilisateurs, mais mai s elles constituent des jalons jalons clairement identifiés sur le chemin qui va de l'expérience minimale à l'expérience exceptionnelle. L'expérience réelle d'un utilisateur peut varier à chaque niveau sur quelques points. Cela reste sans conséquence sur le service offert aux utilisateurs tant que nous, concepteurs, conc epteurs, ne perdons pas de vue v ue le principe d 'a'amélio mélioration ration progressive. progressive.
EN AVANT, TOUTE ! La suite du livre vous invite à visiter les différentes étapes sur l'autoroute de l'amélioration progressive. Nous découvrirons successivement le marquage HTML,, les styles HTML styles CSS, le JavaScript JavaScript et enfin ARIA. AR IA. Le périple sera illustré illustré par une page de démonstration démonstration qui met en prati pratique que ces techniques d'a d 'améliomélioration progressive, à l'adresse Retreats4Geeks.com. Par principe, ce livre ne prétend pas constituer une référence exhaustive des techniques d'amélioration progressive. Les exemples sont épurés et se concentrent sur leur but premier : vous présenter les meilleures pratiques pour vous permettre d'adopter sur-lechamp l'amélioration progressive dans vos projets.
CHAPITRE CHAPI TRE 1
PENSEZ À L'UTILISA L'UTILISATEUR, TEUR, PAS AU NAVIGA NAVIGATEUR TEUR
Figure 1.4 : La pag pagee de présentat présentation ion d'un d 'un événement de formation sur sur le site
Retreats4Geeks.com qui sera étudiée tout au long de ce livre.
13
"La signification est dans le contenu du texte, pas dans la forme des caractères." — WIM CROUWEL
CHAPITRE 2
AMÉLIORATION PROGGRES PRO RESSIVE SIVE AVEC AVEC LE LE HTML Quand on parle de Web, le marquage HTML HTM L est incon i ncontournabl tournable. e. Il constitue la fondation de toute mise en page réussie et de toute expérience utilisateur positive. positiv e. Que vous préfériez préfériez le HTML HTM L ou son cousin plus rigoureux XHTML XHT ML,, chaque élément (balise) a un but clairement défini. La manière dont vous utilisez ces éléments a un puissant impact sur l'expérience 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 négligé l'importance d'un bon marquage. Ceux qui venaient du monde de la programmation ont considéré que l'apprentissage du langage HTML allait de soi, et n'ont n'ont donc jamais pris le temps d'étudier d' étudier sa sémantique particulière. Ceux qui venaient du monde de la création graphique n'ont pas non plus plus senti l'l 'importance de la sémantique. Nous nous sommes tous focalisés sur la partie présentation 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'élément table, qui ne sont pour la plupart que des remplacements d'éléments sémantiques existants (et parfaitement gérés par les navigateurs) tels que les listes.
16
ADAPTIVE WEB DESIGN
Dans de nombreuses entreprises de la planète, les promoteurs d'une utilisation sémantique rigoureuse du langage HTML n'ont pas été entendus ; leurs arguments étaient considérés comme relevant d'une position d'intellectuels puristes, pour deux raisons principales : 1) force était de constater que les anciens sites web se présentaient toujours très bien dans les nouveaux navigateurs ; 2) comme bien des personnes ne souffrent 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 sémantique redevenait un sujet important. Google a été le premier moteur de recherche prenant en compte les éléments sémantiques pour indexer les pages web. Se fondant au départ sur le très élémentaire éléme ntaire élément élément d'a d 'ancrage ncrage (a) comme pierre angulaire de son algorithme a lgorithme PageRank, Google est devenu le pionnier dans l'exploitation des marqueurs sémantiques sémantiqu es pour extraire du sens et de la pertinence des pages scrutées. Les autres moteurs de recherch recherchee ont rapidement rapidement suivi, et les moteurs de recherche se sont lancés dans la traque d'autres éléments 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 sémantique est ainsi devenu un critère significatif dans le monde des entreprises, puisque son utilisation avisée permettait d'être mieux placé dans les résultats des recherches, et en conséquence d'augmenter les chances d'entrer en contact avec de nouveaux clients.
LA FONDATION SÉMANTIQUE Si l'o l 'onn compare le contenu au substrat, le marquage sémantique est le compost que vous ajoutez ajoutez pour garantir la fertilité de votre jardin. Il enrichit enr ichit le contenu contenu en fournissant aux visiteurs des indices au sujet du contexte et des intentions de l'émetteur, l' émetteur, et en proposant des informations complémentaires complémentaires au contenu. Prenez comme exemple l'élément d'abréviation abbr. Il sert à désigner une abréviation (ou un acronyme, ce qui lui permet dorénavant de remplacer l'élément acronym) : Gatlinburg, ssee">TN TN
Dans cet extrait HTML, vous voyez comment l'élément enrichit les deux lettres "TN" en rappelant au visiteur qu'elles signifient "Tennessee".
CHAPITRE CHAPI TRE 2
AMÉLIORATION AMÉLIORA TION PROGRESSIVE AVEC LE HTML
Le langage HTML a évolué sans cesse pour offrir de plus en plus d'options de description des contenus que les éléments délimitent (encapsulent). La publication pub lication de la norme HTML5 HTM L5 a donné naissance à une flopée de nouvelles nouvelles options sémantiques (telles que header) et à des enrichissements de quelques éléments élémen ts préexistants (comme (comme l'l'élémen élémentt abbr déjà cité, qui remp remplace lace l'élément l 'élément acronym). Nous utiliserons au cours de ce chapitre plusieurs éléments nouveaux nouveaux ou enrichis ; j'en profiterai 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 de Retreats 4 Geeks Geek s , vous pouvez vous demander par où commencer. Intéressons-nous au contenu le plus important qu'est le nom du site et la série de liens qui mènent aux différentes sections de la même page (pour l'ex l 'exemple, emple, le site ne compte qu'une une page) pag e).. 1
web montrant le nom du site et les éléments éléme nts de Figure 2.1 : La page du site web navigation. Intéressons-nous à cette page dans une approche de sémanticien, et commençons par le logo de Retreats 4 Geeks2. C'est une image, et nous . Si vous n'a n'avez vez pas encore encore téléchargé le le fichier archive archive des exemples, exemples, faites-le maintenant en vous rendant à l'adresse adaptivewebdesign.info. Cherchez le bouton Download the project files. files. 2. Oui, je sais que que vous pouvez aussi utiliser l'élément object ou définir un texte puis le remplacer par une image avec des instructions CSS, CS S, mais ma is je préfère m'en en tenir au plus simple. 1
17
18
ADAPTIVE WEB DESIGN
utilisons logiquement un élément img pour la baliser. L'élément est assez important, puisqu'il fournit un contexte pour toute la page. Nous devons donc l'incorporer l'i ncorporer à un élément élément de titre h1, l'élément l 'élément qui est réservé au contenu majeur de la page. png"/>
Notre page d'e d 'exemp xemple le est écrite en HTML5, H TML5, mais m ais j'ai toujours été plus plus à l'aise l 'aise avec la sérialisation XML de ce langage et j'ai choisi de rester fidèle à cette syntaxe (ce dont dont témoigne la barre bar re oblique fermante de l'élément l' élément img). Il s'agit plus d'une question de préférences que d'une obligation. Au niveau des moyens moyens de navigation locale, locale , nous proposons une liste de liens qu'il faut donc marquer en tant qu'éléments de liste. L'ordre des liens devant correspondre à l'ordre des sections de contenu dans la page, nous opterons pour une liste ordonnée (ol). Chaque lien est inséré dans un élément de liste (li) à l'intérieur d'un élément d'ancrage (a) :
Au point où nous en sommes, nous avons avons fait les choix de marquage m arquage évidents, en profitant des possibilités sémantiques offertes par le langage HTML depuis ses origines. Voici encore un an, nous en serions restés là et aurions considéré notre en-tête en-tête comme terminé, mais le HTML5 nous permet d'a d 'aller ller plus plus avant avant au niveau de la sémantique et de l'accessibilité du contenu. Traditionnellement, nous aurions eu recours à une division de page (div ) munie d'un identifiant sémantique (id) de valeur "header" pour regrouper ces deux éléments. Vous vous souvenez sans doute que les divisions servent à regrouper des éléments, mais qu'elles ne fournissent aucun contexte pour préciser le domaine d'emploi ou la fonction du groupe (c'est d'ailleurs pourquoi nous décidons décidons de lui attribuer l'identifiant "header") " header").. Le HTML5 introduit un nouvel élément pour préciser la signification (la sémantique) d'une division. Il s'agit de l'élément header.
CHAPITRE CHAPI TRE 2
AMÉLIORATION AMÉLIORA TION PROGRESSIVE AVEC LE HTML
Un élément header sert à identifier le contenu de première importance d'une page ou d'une section de page. Il permet d'abord d'englober les en-têtes ou groupes d'en-têtes (placés dans le nouvel élément hgroup), les aides à la navigation et le contenu de sommaire ou d'introduction. Cet élément constitue de ce fait le conteneur idéal pour le titre de page et la liste des ancrages qui mènent à chacun des articles de notre page. Le langage HTML5 offre une autre option encore plus appropriée pour la navigation. Alors qu'a q u'auparav uparavant, ant, nous aurions identifié la liste ordonnée avec "nav" ou "main-nav", nous pouvons avec le HTML5 profiter de son élément nav pour exprimer expri mer de façon plus directe l'aspect sémantique que nous voulons ajouter à la liste ol en fournissant cet identifiant sémantique id. L'élément nav permet de réunir tout un groupe de liens et de fonctions de navigation pour former l'équivalent sémantique du rôle de repère de l'élément ARIA "navigation" (que nous décrirons dans le Chapitre 5). Ces ajouts étant faits, le marquage de la section devient le suivant : .png"/>
Ce marquage fonctionnera dans tous les navigateurs, même les plus anciens, grâce à leur comportement consistant à ignorer tout ce qu'ils ne savent pas interpréter. Les navigateurs les plus récents sauront bien sûr quoi faire des éléments élémen ts nouveaux, nouveaux, mais ma is les plus anciens, comme le navigateur en mode texte Lynx, pourront trouver le contenu et l'afficher. Ce marquage sans styles ni interactivité JavaScript fonctionne et répond ainsi au deuxième niveau de
19
20
ADAPTIVE WEB DESIGN
support demandé dans l'ap support l'approche proche d'a d 'améliora mélioration tion progressive. (Souvenez-v (Souvenez-vous ous que c'est le contenu qui constitue le premier niveau, si important).
INVISIBLE ET CONSULTATIF Le marquage est déjà 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'élément alt). Rappelons que ce genre de "texte alt"3 donne un minimum d'inform d 'informations ations au sujet sujet d'une image lorsque lorsque l'utilisateur n'a pas accès à celle-ci, soit parce qu'il a désactivé l'affichage des images,s, soit parce qu'il est malvoyant et utilise la image l a fonction de lecture audio du contenu cont enu de l'écran, l' écran, d'o d 'oùù l'importance l 'importance de cet attribut. Voici comment j'ai donc ajouté un attribut alt très simple à l'exemple : alt="Retreats s 4 Geeks" />
CHAPITRE CHAPI TRE 2
AMÉLIORATION AMÉLIORA TION PROGRESSIVE AVEC LE HTML
utiliser title pour donner à l'utilisateur des informations i nformations sur la cible de chaque lien :
Tennessee">Location
Plus bas dans la page, dans la section "location", l'attribut contexte au lien qui mène à la carte de situation :
Figure 2.2 : Vue de la section location de la page avec le pointeur de souris
sur la carte.
SÉMANTIQUE AD HOC Le langage HTML regorge d'attributs permettant d'enrichir les éléments concernés. Certains de ces attributs ont un usage dédié, et c'est le cas de alt
21
22
ADAPTIVE WEB DESIGN
et de title, mais d'autres, et ils sont nombreux, peuvent être employés pour augmenter la densité sémantique accessible avec les possibilités initiales du langage, et ce de façon moins formelle. Je veux bien sûr parler des attributs id et class. Lorsque Dave Raggett travaillait à la spécification5 du HTML HTM L 3.0, il y av avait ait introduit les nouveaux concepts de classification et d'identification, incarnés respectivement par les attributs class et id6. Ces attributs n'ont été rendus publics de façon formelle au sein du langage HTML que lors de la sortie du HTML 4.0, mais les navigateurs les ont pris en compte à peu près à la même époque que les feuilles de styles CSS (Cascading (Cascading Style Sheet). Sheet). Et le CSS a introduit deux sélecteurs très simples destinés expressément à ces deux attributs. Cela a entraîné dès le départ une certaine confusion au niveau de la compréhension de l'usage attendu des attributs class et id. Pendant des années, quasiment tous les développeurs web qui utilisaient les styles CSS ont cru à une corrélation intentionnelle entre les attributs et les sélecteurs. Ils étaient persuadés que class et id avaient été inventés pour être utilisés avec les feuilles de styles. Les blâmer serait injuste, car la norme CSS Level 1 n'offrait pas beaucoup de mécanismes pour sélectionner un élémentt ; il semblait opportun de considé élémen considérer rer les sélecteurs class (par exemple, ul.menu) et id (par exemple, div#content) comme ayant été conçus (avec leurs attributs respectifs) pour appliquer les styles de façon globale pour class et locale pour id7. Heureusement, nous savons dorénavant comment les attributs class et id doivent être utilisés. L'attribut class a été créé spécialement pour répondre 5. Le HTML HTM L 3.0 constituait une spécification ambitieuse en apportant de nombreux nouveaux nouvea ux attributs et balises, ba lises, dont la plupart ont été abandonnés au moment où la norme est arrivée à maturité avec la version HTML 3.2. Mais les deux attributs class et id ont survécu à ce grand ménage. Il est amusant de constater que certaines des constructions proposées à l'origine dans le HTML 3.0 ont refait leur apparition dans le monde du HTML, soit officiellement dans la version HTML5, soit officieusement en tant que microformats. 6. Il n'est pas pas inutile de remarquer remarquer que que class et id ont fait une brève apparition dès la spécification HTML 2 (http://www.ietf.org/rfc/rfc1866.txt), mais sans avoir été formellement définis comme attributs. Ils servaient à faire la preuve du mécanisme de tolérance à l'inconnu l' inconnu dont devaient devaient être capables capables les navigateurs en ignorant ig norant les attributs qu'ils ne reconnaissaient pas. 7. Le document de travail HTML 3 autorisait cette utilisation, utilisation, parmi d'autres d 'autres.. Il est disponible à l'adresse http://www.w3 http://www.w3.org/MarkUp/html .org/MarkUp/html3/html3.txt 3/html3.txt.
CHAPITRE CHAPI TRE 2
AMÉLIORATION AMÉLIORA TION PROGRESSIVE AVEC LE HTML
au faible nombre d'éléments disponibles dans le lexique de mots réservés du HTML : Le temps passant, les attentes des personnes évol évoluent uent et le langage HTM HTML L sera de plus en plus sollicité. Un des indices de cette tendance est la pressio pressionn ressentie pour introduire toujours toujours plus de balises. Le HTML 3.0 introduit une technique pour créer des sous-classes d'éléments de façon ouverte. Elle permet de différencier le rôle d'un élément de type paragraphe en tant que couplet d'un quatrain, ou de dénoter un terme mathématique en tant que tenseur. Cette possibilité de créer des distinctions à la volée permet de gérer des styles de rendu spécifiques ou d'envisager des mécanismes de recherche plus fins, sans pour autant compliquer le format général des documents HTML8. Le but de cet attribut est de lui faire englober une liste de sous-classes pour l'élément auquel elles sont appliquées, les classes étant listées de la plus générale à la plus spécialisée9 : >
Les deux attributs class et id permettent à l'auteur de concevoir sa propre sémantique en complément complément de celle définie dans dan s la spécification. spécificat ion. L'ensemble indépendante des autres pour pouvoir éventuellement faire l'objet d'une page distincte. La différence sémantique entre ces deux approches n'est normalement pas significative et dépend d'abord des préférences de l'auteur de la page.
CHAPITRE CHAPI TRE 2
AMÉLIORATION AMÉLIORA TION PROGRESSIVE AVEC LE HTML
qui en résulte enrichit le marquage en signification. Le temps aidant, cela aboutit à un ensemble de classifications et d'identifiants partagés par toute la planète (par exemple, div#header et ul#nav). Ce jeu de classifications et d'identifiants d' identifiants partagés a à son tour alimenté l'l'évo évolution lution du langage HTML (par exemple avec les ajouts tels que les éléments header et nav du HTML5, vus plus haut) et suscité l'apparition d'une série d'extensions au HTML conçues de façon collaborative et connues sous le nom de "microformats".
CONVENTIONS CODIFIÉES Les microformats sont des spécifications non officielles produites de façon collaborative pour définir les modalités de marquage de contenus de sorte à exprimer des éléments de sémantique (et des métadonnées) au-delà de ce qui est possible avec la norme HTML (ou XHTML). Par essence, un microformat formalise des conventions de codage. Ces conventions sont le fruit des réponses trouvées sur le terrain pour constituer une spécification visant à combler combler un manque ou une limitation de la norme HTML HT ML.. Par exemple, exemple, le HTML HTM L ne proposant aucune solution solution robuste pour marquer de façon précise des données de contacts professionnels ou d'évén d' événements, ements, la communauté a créé des microformats pour répondre à ces besoins spécifiques mais très courants. Le premier microformat a été suscité par le besoin d'e d 'exprimer xprimer des associations entre des individus présents sur le Web. Il a été baptisé XHTML Friends Network (abrégé Network (abrégé "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 sémantique sémantique du HTML HTM L dans un domaine clairement clai rement délimité. délimité. XFN a été conçu 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'élément link pour référencer une feuille de styles externe (rel="stylesheet"). Il permet donc de déclarer une relation entre la cible d'un ancrage et la page actuelle. L'idée de XFN était simple : si j'ai besoin de gérer un lien entre mon blog et celui d'un collègue, j'ajoute dans l'esprit XFN un attribut rel="collegue" à mon lien. Pour faire un lien avec le blog
25
26
ADAPTIVE WEB DESIGN
de mon épouse, je spécifie rel="amie coloc epouse muse amour soutien" parce qu'elle représente toutes ces qualités pour moi11. Vu ainsi, cet attribut se limite à fournir un complément d'informations concernant une relation et des détails 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 collègues font de même, nous obtenons au final un véritable réseau de liens dans lequel nous pouvons naviguer par programme, ce qui crée une foule de nouv nouvelles elles opportunités d'e d 'extraction xtraction et de réutilisation de données. C'est d'a d 'ailleurs illeurs exactement ce qui s'est produit produit : le XFN s'est répandu comme comme une traînée traî née de poudre. Les Le s concepteurs de logiciels ont ajouté ajouté ce microformat dans leurs outils outi ls de création c réation de blog (par exemple, exemple, WordPres WordPress,s, Movable Type) Type) et les créateurs des sites de Web Web social socia l (par exemple, exemple, Twitter, Twitter, Flickr, Flick r, Last.fm) ont commencé à ajouter ajouter aux pages des profils d' d 'utilisateurs une section spéciale rel="me" (regroupant les liens vers d'autres sites web). Cela a permis l'apparition d'o d 'outils utils comme Social S ocial Graph de Google pour constituer rapidement rapidement un profil complet complet d'utilisateur en partant d'une d 'une seule adresse URL12. Nous fournissons un exemple d'utilisation du microformat XFN dans da ns le pied de page footer de notre page Retreats 4 Geeks13 :
11. Waouuuuuuuuu ! 12.Pour en savoir plus sur l'API Social Graph, voyez voyez la page http://code.google.com/apis/ socialgraph/. Glenn Jones s'est servi de cette interface API dans sa superbe librairie JavaScript Jav aScript nommée Ident Engine (http://identengine.com/). Il l'a l 'a présentée présentée dans le livre l ivre A List Apart (http://www.alis http://www.alistapart.com/artic tapart.com/articles/discovering les/discovering-magic/ -magic/). 13. L' élément footer est une autre nouveauté de la spécification HTML5 prévue pour englober des "méta"-informations pour un article, une section ou une page entière : nom de l'auteur, droits intellectuels, etc.
CHAPITRE CHAPI TRE 2
AMÉLIORATION AMÉLIORA TION PROGRESSIVE AVEC LE HTML
Après avoir ainsi commencé de façon très simple (mais puissante), les microformats se sont multipliés pour répondre à de nombreux besoins très variés : gestion des informations du profil d'un individu (hCard), gestion de listes d'événements (hCalendar), syndication de contenus (hAtom), gestion de CV (hResume), gestion de données de licences d'utilisation (rel-license), protection contre les robots scruteurs (spiders (spiders)) des moteurs de recherche (rel-nofollo (rel-nofollow w) et aide au marquage (rel-tag)14. Pour accompagner le développement de ces microformats, sont apparus plusieurs outils pour les utiliser. La mention faite plus haut au Social Graph de Google vous laisse deviner que les moteurs de recherche ont commencé à tenir compte des microformats, au point parfois de classer les contenus dotés de microformats avant les autres. Les extensions de navigateurs telles qu'Operator15 et Oomph16 permettent à l'u l 'utilisateur tilisateur d'e d 'extraire xtraire et de réutiliser les contenus contenus des microformats. Vous Vous disposez en outre d'a d 'analyseurs nalyseurs de microformats pour quasiment tous les langages de programmation et des services basés Web tels qu'Optimus17 ou H2VX18, qui assurent un accès direct aux contenus des microformats des sites. Vous constatez que les microformats constituent une phase supplémentaire dans la progression continue continue vers l'l 'amélioration mélioration progressive. progressive. Ils nous permettent de rendre nos sites web encore plus utiles à nos visiteurs. Ne trouv t rouvez-vous ez-vous pas vraiment intéressant de pouvoir, à l'aide d'un outil tel qu'Operator ou d'un service tel qu'Optimus, permettre à nos utilisateurs d'importer un événement dans leur agenda ou nos coordonnées coordonnées dans leur carnet d'a d 'adresses dresses directement depuis notre page web ? Personnellement, je trouve cela formidable.
Appelle-moi quand tu veux ! Puisque notre site web de démonstration se consacre à un événement (un stage de formation), nous pouvons commencer par adopter le microformat hCalendar. Mais voyons d'abord comment appliquer ce format hCard à mon élément section dans l'élément article "Instructors". Passons en revue les principales princip ales classes définies dans hCard. 14. La page Wiki des microformats (http://microformats.org/wiki/) propose la liste des microformats avec la documentation d'utilisation. 15. http://kaply.com/weblog/operator/ 16. http://visitmix.com/labs/oomph/ 17. http://microformatique.com/optimus/ 18. http://h2vx.com/
27
28
ADAPTIVE WEB DESIGN
CL ASSE
DESCRIPTION
vcard
Indique l'utilisation du microformat hCard. (Cette classe doit être la classe de l'l'élément élément racine du contenu contenu hCard.)
fn
Abréviation de Formatted Name. Sert à englober le nom du propriétaire des données hCard.
url
Indique qu'un un lien guide g uide l'utilisateur l'utilis ateur vers une page web décrivant la personne concernée.
photo
Dénote une photographie de la personne.
org
Identifie l'entreprise ou l'organisation à laquelle appartient la personne.
role
Identifie la fonction de la personne dans l'entreprise/organisation.
Tableau 2.1 : Classes principales du microformat hCard.
Le microf microformat ormat hCard compte compte bien d'autres d 'autres options de description du profil d'un individu. Celles indiquées dans le tableau suffisent à nos besoins dans le contexte de la page d'exempl d'exemplee Retreats 4 Geeks. Geek s. Parmi ces cinq classes, cla sses, seules vcard et fn sont obligatoires. Découvrons d'abord le contenu sur lequel nous allons travailler :
Aaron Aaro n Gu Gust staf afso son n
Aaron n ha has s be been en wo work rkin ing g on th the e we web b fo for r ne near arly ly 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 Easy! Designs , 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.
CHAPITRE CHAPI TRE 2
AMÉLIORATION AMÉLIORA TION PROGRESSIVE AVEC LE HTML
>Aaron n ha has s tr trai aine ned d pr prof ofes essi sion onal als s at The New York Times , 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 We b Di Dire rect ctio ions ns. . He is Gr Grou oup p Ma Mana nage ger r of th the e Web Standards Project (WaSP) (WaSP) and and serves as an Invited Expert to the World Wide Web Consortium's Open Web Education Alliance (OWEA) (OWEA) . . He created eCSStender eCSStender , , serves as Technical Editor for A Li A List st Ap Apar art t , , is a contributing writer for .net .net Magazine Magazine, , and has filled a small library with his technical writing and editing credits. His next book, Adapti Adap tive ve We Web b De Desi sign gn: : Cr Craf afti ting ng Ri Rich ch Ex Expe peri rien ence ces s wi with th Progressive Enhancement Enhancement , , is due out in early 2011.
Vous constatez que l'élément section comprend un élément de titre h1. Ne vous en inquiétez 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 après tout très logique et cela permet bien de pallier le faible nombre de niveaux de sous-titres19. Si vous avez bien étudié cet extrait, vous savez déjà à quel endroit doit être placée chacune des classes de hCard. Je vais néanmoins les traiter une à une,
à commencer par la plus simple, "vcard". Cette classification doit correspondre à l'élément conteneur global, qui est ici l'élément section :
La classe suivante est celle qui va englober mon nom, donc "fn". Du fait que mon nom est déjà indiqué comme contenu de l'élément de titre h1, nous qualifions ce titre par la classe "fn" pour indiquer que le texte de l'élément correspond à mon nom.
Aaron Gustafson Gustafson
Passons ensuite ensuite à la classe de l'a l 'adresse dresse "url" menant à la page "Easy! " Easy! Designs" qui est un site web dont je détiens le contrôle : ... Easy! net"> Easy! Designs, ...
En descendant, nous pouvons pouvons ensuite ensu ite ajouter ajouter la classe "photo" à ma photo, qui se trouve dans un élément figure , élément élément qui a été introduit dans HTML5 HT ML5 pour héberger un contenu non fractionnable, tel qu'une image ou un dessin avec un titre en option (figcaption). Cet élément doit pouvoir être supprimé du document sans en altérer le sens :
Il nous reste à insérer les deux classes "org" et "role" "role" dans le dernier paragraphe de ma biographie, mais un problème se pose. Plusieurs entreprises et organisations sont citées. Laquelle choisir ? Et peut-on en mentionner plusieurs ? Rien dans le microformat hCard n'interdit de désigner plusieurs entités et plusieurs fonctions dans la même fiche hCard, mais en pratique rares sont les analyseurs de microformats qui vont chercher plus loin que la première occurrence rencontr rencontrée. ée. En effet, les logiciels de gestion de carnet d 'a'adresses dresses ne savent souvent souvent pas gérer plusieurs employeurs employeurs et plusieurs fonctions pour la même personne. Pour simplifier, nous allons associer ces classes cla sses à ma première fonction, celle de chef de groupe du projet des standards web (Group (Group Manager/ Web Stand St andards ards Project). Project). La classe "org" est facile à implanter, car la donnée "Web Standards Project" est déjà dans un élément. En revanche, ma fonction est indiquée dans un texte plus long sans être marquée par un élément spécifique. Pour ne cerner
CHAPITRE CHAPI TRE 2
AMÉLIORATION AMÉLIORA TION PROGRESSIVE AVEC LE HTML
que mon premier rôle avec cette classe, nous allons ajouter un élément sans signification sémantique comme b20 : ... He is > Group Manager of the Web Standards Project (WaSP) Web (WaSP) ...
Si nous regardons maintenant ma intenant le résultat global, vous pouvez constater que les aménagements liés au microformat hCard sont en fait assez limités :
Pourtant, ces quelques ajouts permettent dorénavant de faire produire assez aisément un profil de ma personne par un analyseur ana lyseur de microformats. microformats.
20.Et pourquo pourquoii l'l'élément élément b ? Pourquoi pas span ? En HTML5, l'élément b a été remis à l'honneur pour englober une séquence de texte devant se démarquer visuellement du reste du paragraphe sans pour autant prendre une importance particulière. particul ière. Rien ne vous empêche d'utiliser l'élément span, mais b est plus approprié et plus bref.
31
32
ADAPTIVE WEB DESIGN
Figure 2.3 : Informations de profil extraites d'une page web avec l'outil
Operator. Un grand intérêt des microformats est que vous avez toute latitude dans la manière de les utiliser. Les noms de classes ne doivent pas nécessairement survenir dans un ordre précis (mais ils doivent être insérés dans un élément parent de la classe appropriée) et leur contenu ne doit pas obligatoirement correspondre à un format d'exportation prédéfini. Comme notre exemple le montre, le microformat hCard ne doit pas même être marqué dans une même partie comme une entrée d'annuaire ; vous pouvez en distribuer les
CHAPITRE CHAPI TRE 2
AMÉLIORATION AMÉLIORA TION PROGRESSIVE AVEC LE HTML
composants dans votre prose à la seule condition d'employer les noms class appropriés pour désigner vos classes.
Notez-le sur vos tablettes ! Une fois les données pour hCard gérées, nous pouv pouvons ons passer au microfo m icroformat rmat hCalendar présenté plus haut. Avant de procéder au marquage, découvrons quelques classes de hCalendar parmi les plus usitées.
CLASSE
DESCRIPTION
vevent
Indique l'utilisation du microformat hCalendar pour un événement. (Cette classe doit être la classe de l'élément racine du contenu hCalendar.)
dtstart
Désigne la date de début de l'événement.
dtend
Désigne la date de fin de l'événement.
summary
Désigne le nom de l'événement.
location
Désigne le lieu de déroulement de l'événement.
description
Fournit des détails sur l'événement.
Tableau 2.2 : Classes principales du microformat hCalendar.
Puisque toute la page d'e d 'exemp xemple le est dédiée à l'annon l 'annonce ce d'un d 'un événement, événement, notre processus d'injection de classes doit commencer plus haut dans l'arborescence 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 élément ancestral, nous disposons di sposons de toute la souplesse souplesse pour ajoute ajouterr d'autres d 'autres propriétés propriétés hCalendar hCalendar dans d 'autres éléments article :
J'ai mentionné mentionné que le premier premier élément élément (article#details) devait contenir les principales données de l'événement. Commençons par revoir le code source dans son état avant application des classes de hCalendar : >
Join
Join us for HTML5 & CSS3
33
34
ADAPTIVE WEB DESIGN
8–10
8–10 April 2011
2011
Gatlinburg,
Gatlinburg, TN title="Tennessee"> TN
< !-- / #details -->
Ce rapide survol a sans doute suffi pour repérer les points d'injection de la plupart des classes hCalendar. Nous pouvons sur le champ insérer la balise pour le nom de l'événement, c'est-à-dire le sommaire "summary" en dialecte hCalendar :
Join
Join us for HTML5 & CSS3
Si nous progressons dans le code source, nous arrivons à la plage de dates "8-10 April 2011". De façon traditionnelle, nous aurions utilisé des éléments d 'abrévia 'abréviation tion (abbr) pour marquer ces données, données, mais le HTML5 HTM L5 a introduit un élément dédié au marquage d'une donnée temporelle qui se nomme time. Le problèmee est que pour dénoter une date de début et une date de fin, il va falloir problèm fa lloir diviser le contenu actuel en deux pour pouvoir définir deux éléments time. Même si cela paraît étranger étrang er de prime abord, le plus logique consiste à englober le seul chiffre chiff re "8" dans un premier élément élément time et la l a date compl complète ète "10 "10 April 2011" dans le second. En effet, nous supposons que ce chiffre "8" isolé est à comprendre comme le "8 avril 2011" sous forme abrégée (c'est pourquoi l'élément abbr était approprié auparavant). L'élément time permet de gérer les dates plus finement avec son attribut datetime. C'est ainsi que j'ai reformulé la date de début en entier :
–
CHAPITRE CHAPI TRE 2
AMÉLIORATION AMÉLIORA TION PROGRESSIVE AVEC LE HTML
Les seules classes obligatoires dans hCalendar sont "summary" et la date de début. Il suffirait donc d'appliquer la classe "dtstart" au premier élément time pour que le microformat soit valide. Mais puisque nous disposons d'une date de fin, définissons cette autre classe dans la foulée21 :
– – 2011
Avançons un peu dans le contenu. Nous pouvons Avançons pouvons facilement coder le lieu l ieu de l'événement avec "location" puisque le stage se déroule à Gatlinburg, TN :
Gatlinburg, see">TN TN
Le dernier dern ier morceau de notre notre puzzle hCalendar correspond à la "description" " description".. Le meilleur candidat pour le contenu de cet élément est la section principale "main" de l'article :
Et voilà tout. Une fois les éléments du microformat en place, l'utilisateur l 'utilisateur peut très facilement facilement extraire l'événe l 'événement ment et l'inj l' injecter ecter dans son agenda.
21. Au moment où nous mettons sous presse, certains analyseurs de microformats ont des soucis avec les nouveaux éléments 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'élément time ou d'utiliser un élément title sur un élément abbr.
35
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 directem ent enrichir un marquage déjà déjà significatif afin d 'a'amélio méliorer rer le service offert à l'utilisateur. De l'amélioration progressive bien comprise !
CHAPITRE CHAPI TRE 2
AMÉLIORATION AMÉLIORA TION PROGRESSIVE AVEC LE HTML
RIEN DE TEL QUE DE BONNES BASES Le concept d'amélioration progressive est souvent présenté en relation avec le CSS et le JavaScript, mais il concerne tout autant le marquage HTML. Comme ce chapitre c hapitre l'a montré, chaque fois que nous avo avons ns ajouté un élément significatif, nous avons augmenté la pertinence de la page en renforçant son accessibilité et en la rendant plus facile à trouver par les utilisateurs grâce à son meilleur statut dans les recherches organiques. Nous avons également vu comment la classification et l'identification pouvaient rendre le langage HTML encore plus expressif. Enfin, avec les microformats, nous avons vu qu'en choisissant des noms, nous augmentions la densité sémantique et la praticité du contenu ainsi marqué. Le marquage sémantique est une étape essentielle dans l'approche d'amélioration progressive ; combiné à des contenus bien formés, il constitue la fondation sur laquelle se constru construisent isent les éléments éléments d' d 'une expérience utilisateur de qualité.
37
"Le design est l'l 'esprit "Le esprit même même d'une une création humaine qui s'exprime dans chacune des couches successives qui habillent le produit ou le service." — STEVE JOBS
CHAPITRE 3
AMÉLIORATION PROGRESSIVE AVEC LE CSS Si l'on met de côté les quelques sites endormis qui se fondent encore sur des éléments font et des images GIF d' d'écartemen écartement,t, le design web est dorénav dorénavant ant mis en forme grâce aux styles CSS (Cascading (Cascading Style Sheets). Sheets). Bien sûr, vous disposez aussi des techniques fondées sur Flash, SVG et canvas , mais si vous voulez donner à vos contenus les meilleures disponibilité et accessib accessibilité, ilité, vous utilisez le HTML pour marquer le contenu et le CSS pour lui appliquer des styles visuels. Comme le HTML, le CSS est dès l'origine prévu pour être tolérant aux pannes : un navigateur qui ne comprend pas une règle de style l'ignore et poursuit son travail1 2 . En tenant compte de la façon dont le CSS a évolué, nous pouvons facilement adopter le principe d'amélioration progressive en tirant profit de cette toléran tolérance ce pour créer des strates appropriées appropriées aux capacités des différentes générations de navigateurs.
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 fonctionnement de CSS, car je pense que cela vous dotera d'une profondeur de vue utile pour comprendre comment construire des architectures de sites à amélioration progressive. Fondamentalement, le CSS est une collection de jeux de règles lisibles par les humains. Chaque règle est composée d'un sélecteur et d'un d 'un bloc déclaratif regroupant une série sér ie de couples propriété-attribut (des déclarations), déclarations), qui seront appliqués à tout élément correspondant au sélecteur. p { color: red; font-weight: font-weight : bold; }
L'exemple précédent est du CSS élémentaire. Toute personne qui a utilisé le CSS (et sans doute même la plupart de ceux ne l'ayant jamais utilisé) peuventt à la simpl peuven si mplee lecture deviner devi ner que cette règle sert à sélectionner certains cert ains paragraphes, puis à forcer leur texte à apparaître en gras et en rouge. Mais si nous considérons le même exemple sous l'angle de la tolérance aux pannes, les choses sont moins simples. Lorsqu'un navigateur scrute un fichier CSS pour savoir comment afficher une page, il lit chaque règle tour à tour et tente de l'interpréter. S'il lit une règle qu'il ne sait pas gérer, cela déclenche une erreur d'analyse (parsing (parsing error). error). La plupart de ces erreurs résultent d'une mauvaise rédaction de la règle CSS (nom de propriété propriété ou valeur mal écrite, écr ite, signe de ponctuation ponctuat ion 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 précédent peut subir une erreur d'analyse en cinq endroits :
CHAPITRE CHAPI TRE 3
AMÉLIORATION AMÉLIORA TION PROGRESSIVE AVEC LE CSS
1 p { 2
3
color: red r ed; ; font-weight: bold; }
4
5
1. Sélecteur : p 2. Nom de la première propriété : color 3. Valeur de la première propriété : "red" 4. Nom de la deuxième propriété : font-weight 5. Valeur de la deuxième propriété : "bold" D'après la spécification, en cas d'erreur d'analyse de son analyseur, le navigateur doit ignorer le composant de niveau supérieur de la règle dans laquelle s'est produite l'erreur. En supposant que le navigateur ne sait pas ce que signifie le mot clé CSS de choix de couleur "red", il ignorera la déclaration color: red, mais appliquera les autres (s'il les comprend). Il en va de même pour le mot clé de graissage de font-weight nommé "bold". En revanche, si le navigateur ne comprend pas le sélecteur (p), il ignorera tout le bloc de règles, même si les déclarations individuelles qu'il contient sont de celles qu'il peut interpréter. Le principe, pri ncipe, très simple, est le suivant : personne ne pouvant prédire prédire le futur f utur de la norme CSS, il est e st indispensable que les les navigateurs ignorent les déclarations et sélecteurs dont ils ne savent que faire. Comme en HTML, cela favorise l'évolution du langage et permet d'appliquer l'amélioration progressive aux pages web avec les styles CSS. En ce qui concerne les propriétés, exploiter les erreurs d'analyse d 'analyse à votre profit profit est assez simple et cela vous ouvre quelques possibilités étonnantes. Voici un petit exemple d'utilisation du schéma de couleur RGBa de CSS3 : p { background-color: background-co lor: rgb(137, 224, 160); background-color: background-co lor: rgba(180, 246, 248, .43); }
Un navigateur lisant cette règle va normalement comprendre le sélecteur (le sélecteur de paragraphe courant p est le plus universel de tous), et donc s'aventurer dans les détails du bloc pour tomber sur la première déclaration
41
42
ADAPTIVE WEB DESIGN background-color. Cette propriété de couleur de fond de texte existe dans la
norme CSS depuis la version 1 ; 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 début, et le navigateur saura quoi en faire. Puisque tout s'est bien passé, l'analyseur transmet la règle au navigateur qui applique background-color: rgb(137, 224, 160); à tous les paragraphes de texte concernés. L'analyseur attaque ensuite la seconde règle. Dans la seconde déclaration, la même propriété background-color est redéfinie avec une nouvelle valeur (mécanisme de cascade). Nous savons déjà que le navigateur comprend la propriété. Il va donc lire la valeur, qui utilise la convention convention de codage RGBa. Si le navigateur la comprend, la valeur est transmise à la propriété background-color en remplacement de la précédente valeur RGB. En revanche, si RGBa n'est n'est pas géré, une erreur d'analyse d 'analyse survient et le navigateur ignore toute la déclaration. Le texte concerné sera traité avec la valeur RGB pour background-color . Bien sûr, si le navigateur gère la convention RGBa, il remplace la valeur de background-color en conformité avec le mécanisme de "cascade" (premier C de l'acronyme CSS). Je vais revenir plus en détail sur ce mécanisme dans la suit du chapitre, mais voici sa règle de base : pour p our deux propriétés équivalentes (ou identiques) la dernière définition prime. Cette démonstration simple permet de voir comment on peut utiliser la nature tolérante du CSS pour incorporer sans crainte des possibilités plus sophistiquées que sauront exploiter les navigateurs les plus capables. Mais ce mécanisme n'est est pas limité au niveau des déclarations. Vous pouvez l'l 'appliquer pour masquer tout un groupe de jeux de règles au moyen d'un sélecteur plus sélectif : html[lang] p { /* Ici vient un bloc de règles très modernes */ }
Un navigateur qui qu i rencontre ce jeu de règles commence par évaluer le sélecteur. Si le navigateur sait gérer les sélecteurs basés attribut (dans l'exemple, nous désignons tous les paragraphes qui dépendent d'un élément html possédant un attribut de langage), il va entrer dans les détails des règles pour appliquer les déclarations qu'il sait gérer. Mais si le navigateur ne connaît pas les sélecteurs complexes, l'erreur d'analyse fait ignorer tout le jeu de règles.
CHAPITRE CHAPI TRE 3
AMÉLIORATION AMÉLIORA TION PROGRESSIVE AVEC LE CSS
Un exemple exemple assez fameux fa meux d' d 'emploi mploi de cette technique de distribution d istribution sélective de règles selon les capacités du navigateur (plutôt à titre d'illustration que pour son effet pratique) est la page du jardin CSS Zen Garden d'Egor Kloos intitulée "Gemination "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 conçu une structure visuelle de base destinée à la version 6 d'Internet Explorer et adopté la technique MOSe 3.
http://www.csszengarden.com/062/
43
44
ADAPTIVE WEB DESIGN
("Mozilla/ ("Mozi lla/Opera/ Opera/Safari Safari enhan enhancement cement")")4 pour permettre aux navigateurs plus récents récen ts de fournir un rendu visuel très différent. Kloos s'est servi de quelques sélecteurs élémentaires pour la mise en pages de base et d'a d 'autres utres sélecteurs sélecteur s plus complexes complexes pour les styles évolués. Voici 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 gère d'abord la première règle pour afficher la partie #intro. Il arrive ar rive ensuite à la règle plus évoluée évoluée du même #intro. Si le navigateur sait gérer les sélecteurs à attribut (qualifiés), le rendu de #intro va être radicalement changé. Dans le cas contraire, il ne change pas. Ce filtrage fondé sur les sélecteurs constitue une technique intéressante, mais perturbe les auteurs de code CSS qui oublient que l'échec d'un tel sélecteur composite (au (au moins deux instructions instr uctions de sélection séparées par des virgules) virg ules) est total : tout le bloc de règles est ignoré :
4. Dave Shea, le mainteneur actuel actuel du site CSS Zen Garden, avait introduit introduit l'expression en 2003, mais à l'arrivée d'Internet Explorer 7, il est tombé dans l'oubli parce que cette nouvelle nouve lle version ne souffrait souff rait pas des limitations lim itations de IE6 au niveau des sélecteurs. Le texte original est disponible à l'adresse http://www.mezzoblue.com/archives/2003/06/25/mose/.
CHAPITRE CHAPI TRE 3
AMÉLIORATION AMÉLIORA TION PROGRESSIVE AVEC LE CSS
Dans l'l 'extrait précédent, précédent, nous retrouvons retrouvons les cinq causes d' d 'erreur possibles vues plus haut, et une cause de plus dans le deuxième sélecteur ( p:not([title])). Un navigateur qui ne comprend qu'un un des deux sélecteurs sélecteur s (le p est universel) un iversel) va ignorer la totalité du jeu de règles et non seulement la variante qui cible les seuls paragraphes de texte ne possédant pas l'attribut title. Vous pourrez trouver ce choix illogique, mais c'est exactement ainsi que la norme CSS 2.1 demande de procéder : "Toute l'instruction doit être ignorée en cas d'erreur n'importe où dans le sélecteur, quand bien même la suite du sélecteur semblerait exploitable"5. Lorsque vous savez cela, vous pouvez prendre de meilleures décisions pour comb combiner iner les sélecteurs. Une règle globale globale consiste à ne pas combiner des sélecteurs complexes complexes avec des sélecteurs simples (ce qui a été fait dans le précédent exemple), sauf si vous voulez que tous les jeux de règles ainsi délimités deviennent inaccessibles inaccessibles aux anciens navigateurs. Nous reviendrons dans quelques paragraphes à cette technique, mais après ce bref détour du côté de la spécificité. Le concept de spécificité est un autre concept majeur de CSS. Il détermine le nombre d'éléments pouvant être sélectionnés par le même sélecteur. C'est la seule technique qui permette d'outrepasser le mécanisme de cascade (nous y revenons). Certains sélecteurs sont plus sélectifs que d'autres : un sélecteur d'identifiant comme #intro est dix d ix fois plus spécifique qu'un sélecteur de classe comme vcard, lui-même plus précis qu'un sélecteur d'élément comme p)6. L'évaluation de la spécificité d'un sélecteur est la somme des spécificités de tous ses composants. Une règle dépendant d'un sélecteur spécifique aura toujours priorité sur une règle liée à un sélecteur plus large, quel que soit leur ordre d'apparition dans la cascade. Nous l'avons vu avec le sélecteur d'attribut très futé du site d'Egor Kloos : la règle la moins spécifique apparaît en dernier dans le fichier CSS, mais ma is sa priorité reste inférieure à la premiè première, re, qui est donc celle appliquée. 5. http://www.w3.or http://www.w3.org/TR/2009/CR-CS g/TR/2009/CR-CSS2-20090908/syn S2-20090908/syndata.html#ruledata.html#rule-sets sets 6. Pour en savoir plus plus sur l'évaluation l'évaluat ion du du niveau de spécificité, vous pouvez consulter l'article d'Andy Clarke "CSS Specificity Wars" (http://www.stuf http://www.stuffandnonsense.co fandnonsense.co.uk/archives/ .uk/archives/ css_specificity_wars.html).
45
46
ADAPTIVE WEB DESIGN
Il faut du temps pour bien maîtriser ce concept de spécificité des sélecteurs. Prévoyez quelques maux de tête si vous décidez d'appliquer tous vos styles en relation avec des sélecteurs très pointus (avec un sélecteur à identifiant pour chaque style). En effet, vous serez parfois forcé de définir des sélecteurs encore plus spécifiques, combinant deux identifiants. Pour vous épargner de déclencher une course à la spécificité, je vous conseille de vous retenir de rendre vos sélecteurs trop spécifiques sans raison impérieuse. Revenons au code d'Egor d' Egor Kloos. K loos. Appliquons Appliquons ce que nous venons d'apprendre d'apprendre au niveau des erreurs d'analyse dans les sélecteurs combinés ; l'objectif sera de réduire la spécificité des jeux de règles sophistiquées d'Egor sans perdre l'esprit de son travail : #intro { /* Ancienne présentation */ } /* ... */ [foo], #intro { /* Nouvelle présentation évoluée */ }
Dans cette reformulation, j'ai modifié modi fié le second jeu de règles règles en indiquant un foo o et un sélecteur combiné qui cible un élément élément possédant posséda nt un attribut nommé fo autre avec un identifiant nommé intro. L'astuce est que le premier sélecteur (celui à attribut) est un leurre. Le nom d'attribut foo est non seulement non standard, mais il n'est est utilisé nulle part dans le code HTML de la page CSS Zen Garden. L'ajout de ce sélecteur a pour seul effet de rendre le jeu de règles invisible à tous les navigateurs qui ne savent pas gérer les sélecteurs à attributs. Le point le plus important est que cette cette redéfinition ne modifie en rien r ien l'impact l' impact du sélecteur #intro : sa spécificité est la même qu'auparavant, ce qui garantit que le mécanisme de cascade continue à déterminer l'application des styles. Cette technique évoluée n'est sans doute pas celle que vous allez adopter systématiquement en CSS, mais il sera utile de vous en souvenir lorsque vous voudrez voudrez filtrer des jeux de règles sans altérer la spécificité d'un d 'un sélecteur. sélecteur. En termes de maintenance, cette technique est déconseillée déconseillée pour plus d'une règle de temps à autre. Il existe d'autres méthodes pour effectuer du filtrage en masse, et nous les découvrirons bientôt.
CHAPITRE CHAPI TRE 3
AMÉLIORATION AMÉLIORA TION PROGRESSIVE AVEC LE CSS
DIVISER POUR BIEN RÉGNER Le mécanisme de "cascade" est un concept stratégique de CSS, nous l'avons dit – comme nous avons déjà précisé que ce livre n'offrait pas de place pour un rappel exhaustif du concept de cascade. Cependant, un point peut vous permettre de devenir rapidement un expert en amélioration progressive : l'ordre. L'ordre compte, beaucoup. Toutes choses égales par ailleurs en termes de spécificité, le résultat d'une règle CSS dépend de la proximité entre la déclaration décla ration de style et son élément cible. Nous avions vu ce point dans l'exemple qui réalisait deux affectations de couleur de fond background-color . Il en va de même au niveau supérieur de deux jeux de règles : h1 { font-size: 2em; } h1 { font-size: 3em; }
Cet exemple va affecter une valeur de 3em à la propriété font-size de tous les éléments h1. Ce cas d'école définissant un second jeu de règles avec le même sélecteur juste après le premier ne se rencontrera pas souvent, mais quelque chose du même genre est moins rare. Prenons comme exemple les images de l'élémen l 'élémentt article relatif à l'hébergem l 'hébergement ent (nommé (nommé "Lodging") "Lodg ing") du site de démonstration Retreats 4 Geeks :
47
48
ADAPTIVE WEB DESIGN
Figure 3.2 : Rendu de l'article Lodging.
Voici le code source HTML de cet article : >
Where You’ll Where You’ll Stay
Stay >
Vous remarquez que cet élément article définit la même valeur "frame" de class pour chaque élément figure pour garantir la cohérence dans l'aspect des contours d'image. L'image principale a reçu un complément de valeur s'écrivant "focal". Cela permet d'appliquer deux règles CSS différentes de même spécificité afin afi n d'affecter d 'affecter les styles appropriés appropriés à figure.focal . Voici un exemple de définition de règles avec une redéfinition : .frame { margin: 0 auto 40px; } .focal { margin: 0 20px 25px 30px; }
Ces deux jeux jeu x de règles s'appliquent s'appliquent à l'élément l' élément figure de l'image l' image principale principale de cet élément article (et de tous les autres éléments de même nom de la page).. Les deux sélecteurs ont la même spécificité, mais puisque le second jeu page) redéfinit la propriété du premier, la valeur de la propriété margin de l'image principale (celle sélectionnée 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 règles. Il devient alors facile de se faire piéger par les effets de la proximité. Pour nous en prémunir, nous pouvons adopter une approche par couches dans la conception CSS. Si nous revenons un peu en arrière, 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 résultat final. Pour ce qui concerne l'amélioration progressive en relation avec avec le CSS, nous pouvons adopter la même répartition en plusieurs niveaux de support bien distincts, distincts , en correspondance avec les capacités des navigateurs : la typographie, typog raphie, puis puis la typographie ty pographie avec avec des couleurs, et enfin, la typographie ty pographie avec des couleurs et une mise en page sophistiquée.
49
50
ADAPTIVE WEB DESIGN
Nous avons dit que l'ordre d'apparition des règles a son importance. Pour concevoir de façon progressive, nous devons confronter notre désir de distribuer les niveaux de conception conception à la logique de l'interprétation l 'interprétation en cascade de nos règles. D'un point de vue pratique, cela suppose d'édicter d' édicter les groupes de déclarations d'un même niveau dans un ordre défini : d'abord la typographie, puis la mise en page et enfin les couleurs. Pourquoi dans cet ordre ? Nous y reviendrons très bientôt. Vous pouvez définir ces jeux de règles dans des fichiers de feuilles de styles différents (importés ou liés) ou dans un seul gros fichier 7. L'approche multifichiers est facile à gérer et logique, mais elle a un coût en performances : il fautt rapatrier chaque fau chaque feuille de styles dans une requête HTTP distincte. De plus, certains navigateurs ne sav savent ent pas garder en cache local plus d'un nivea n iveauu de feuille de styles dans le sens descendant (celui d'une feuille importée dans une autre). autre). C'est C 'est la raison pour laquelle je trouv t rouvee l'a l 'approche pproche mono-fichier plus sensée ; c'est celle adoptée pour le site de démonstration Retreats 4 Geeks. Illustrons cette approche par niveaux de définition des styles en commençant par la situation la plus simple : sans aucun style. La Figure 3.3 montre l'aspect de la section sur l'hébergement l' hébergement (lodging lodging)) dans Safari. Safar i. Seuls les styles par défaut du navigateur sont appliqués.
7. Opter pour un fichier de feuilles de styles unique ne vous empêche empêche pas de répartir les règles dans plusieurs fichiers CSS. Il existe plusie plusieurs urs outils du côté serveur pour combiner des fichiers CSS en un seul. Vous profitez ainsi des deux avantages : vous importez les fichiers de détails de style dans un fichier squelette destiné à les accueillir, fichier que vous transmettez aux clients lors de leurs requêtes. Vous trouverez trouverez un exemple à l'adresse l 'adresse http://www.easy-reader.net/archives/2010/07/ http://www.easy-reader.net/ar chives/2010/07/11/template-bas 11/template-based-asset-mungin ed-asset-munging-ing-inexpressionengine.
CHAPITRE CHAPI TRE 3
AMÉLIORATION AMÉLIORA TION PROGRESSIVE AVEC LE CSS
Figure 3.3 : "Lodging" sans CSS.
Vous constatez que le contenu est tout à fait f ait utilisable utili sable avec avec ces styles implicites. L'apparence n'est est pas sophistiquée, sophi stiquée, mais mai s tout le contenu est lisible. En ajou ajoutant tant un niveau de règles typographiques, nous arrivons à l'aspect de la Figure 3.4.
51
52
ADAPTIVE WEB DESIGN
Figure 3.4 : "Lodging" agrémenté de styles typographiques.
L'amélioration est limitée, mais pas négligeable. Les navigateurs qui ont des soucis dans le rendu des styles de mise en page CSS disposent ainsi d'un niveau intermédiaire, ce qui est plus agréable pour les utilisateurs de ces navigateurs que les forcer de subir les inconv i nconvénients énients d'une d 'une tentative de rendu incomplète. Le niveau n iveau suivant de support support des styles est celui de la couleur. C'est celui qui est en général accessible aux navigateurs en même temps que la typographie de base (dans certains cas, cela va jusqu'aux images de fond). La Figure 3.5 montre la même page web avec les légers enrichissements apportés par la mise en couleur du même article.
CHAPITRE CHAPI TRE 3
AMÉLIORATION AMÉLIORA TION PROGRESSIVE AVEC LE CSS
Figure 3.5 : "Lodging" agrémenté de couleurs.
Nous sommes clairement dans un processus d'amélioration progressive. Le dernier niveau d'application de styles qui nous intéresse ici est celui du contrôle global de la disposition des éléments sur la page. Son résultat a été montré quelques pages plus haut dans la Figure 3.2. J'ai dit que tous ces niveaux seront défin définis is dans le même fichier 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; } }
Vous avez certainement noté la présence du bloc @media qui englobe les règles de style pour affichage affichag e sur écran. écra n. Cet élément n'est est pas présent fortuitement fortu itement : il garantit que tous les clients profiteront des jeux de règles concernant la typographie et les couleurs en isolant celles de l'affichage aux seuls navigateurs qui savent gérer le type de média "screen". Le même principe est facilement extensible aux impressions ou à tout autre média, mais nous verrons cela plus loin. L'élément @media a un autre avantage : les navigateurs vraiment anciens (par exemple, Netscape 4) ne le comprenant pas, ils ignorent ce bloc et nos styles de mise en page leur restent invisibles. Ces navigateurs profitent donc sans perturbation des règles de typographie et même, pour la plupart d'entre eux, de celles des couleurs. Revenons à une question laissée en suspens : pourquoi ai-je relégué les règles de couleurs en dernier ? Mon raisonnement est simple. J'adore les raccourcis CSS qui permettent de combiner plusieurs règles en une seule. Nous en avons rencontré une plus haut : border: 10px solid . Cette écriture abrégée équivaut aux quatre lignes suivantes : border-top: 10px solid; border-right: border-righ t: 10px solid; border-bottom: 10px solid; border-left: 10px solid;
Ce n'est pas tout. Chacune des ces déclarations est elle-même 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 réduisent fortement la complexité des feuilles de styles CSS. Supposons que dans le précédent exemple, les jeux de règles pour les couleurs aient été placés avant celles de mise en page. L'attribut border-color aurait reçu la valeur gris clair, mais le raccourci border qui arrive après dans les
CHAPITRE CHAPI TRE 3
AMÉLIORATION AMÉLIORA TION PROGRESSIVE AVEC LE CSS
règles de mise en page aurait annulé la valeur de border-color , parce que la spécificité du jeu de règles est la même et que border redéfinit toujours border-color , même de façon implicite (la valeur par défaut est "inherit", ce qui entraîne la réutilisation de la couleur en vigueur pour le texte). Voici pourquoi je conseille de placer les règles de couleurs en dernier. Les raccourcis CSS sont très pratiques. pratiques. Ils allègent l'écriture l'écr iture des jeux de règles et réduisent la longueur du fichier, fich ier, mais vous devez bien contrôler l'ordre dans lequel vous les faites fa ites appliquer. Puisque nous en sommes aux couleurs, j'en profite pour ajouter que dans certains cas, vous voudrez utiliser la couleur dans un contexte spécifique à la mise en page (par exemple pour une couleur de fond). Dans ce cas, il peut être intéressant d'isoler une sous-section de vos règles avec @media, comme nous l'avons fait pour tout le bloc de mise en page : /* =Couleur */ .frame .inner { /* Couleurs pour tous les médias */ } @media screen { .frame .inner { /* Couleurs spécifiques aux écrans */ } }
En partant des bases saines de notre infrastructure stratifiée, il devient très simple d'ajouter des modules en fonction des besoins. Voici des exemples d'effets (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: transition-d uration: .5s; } }
55
56
ADAPTIVE WEB DESIGN
Vous disposez maintenant d'une bonne connaissance des techniques permettant d'exploiter le mécanisme de tolérance aux pannes de CSS pour améliorer 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 tolérance aux pannes, le CSS est un complément presque idéal à la panoplie des outils d'amélioration progressive. L'ignorance est souvent un bien parce qu'elle nous permet de bien exploiter les nouveautés 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 règle, mais qu'il la comprend mal ? Oui, je veux bien bien sûr parler d'Internet d' Internet Explorer. IE9 a été lancé lorsque ce livre partait chez l'imprimeur. l 'imprimeur. De ce que j'ai pu en voir, il semble que ses auteurs ont bien répondu à leur promesse de conformité aux standards (y compris le CSS), d'une manière totalement interopérable. 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, heureusement, les brillants individus i ndividus de Microsoft nous avai avaient ent concocté une technique permettant d'isoler d 'isoler facilement facilement les sections spécifiques à leurs navigateurs navigate urs dans le code CSS, Jav JavaScript aScript et même dans le marquage HTML : les commentaires conditionnels8. Il s'agit exactement de ce à quoi vous pourriez vous attendre attendre : des commentaires HTML dans un format spécial qui sont pris en compte par IE, mais ignorés par tous les autres navigateurs (après tout, ce sont des commentaires). Les commentaires conditionnels cadrent bien avec l'approche d'amélioration progressive. En effet, même si l'améliora l 'amélioration tion progressive n'est est pas directement d irectement dépendante du type de navigateur, certains navigateurs ont besoin qu'on les aide un peu à répondre aux attentes des utilisateurs. Les commentaires conditionnels permettent aux concepteurs de cibler une ou plusieurs plusieurs versions d'IE d' IE.. En voici un court exemple d'utilisation :
8.
http://msdn.microsoft.com/enhttp://msdn.m icrosoft.com/en-us/library/ms53 us/library/ms537512(VS.85).asp 7512(VS.85).aspx x
CHAPITRE CHAPI TRE 3
AMÉLIORATION AMÉLIORA TION PROGRESSIVE AVEC LE CSS
.css"/>
Dans ce bref extrait, nous demandons en première première ligne lig ne d'inclure d 'inclure notre fichier CSS principal (main.css). Nous demandons ensuite d'inclure d' inclure de façon conditionnelle une feuille de styles dédiée à IE9, au moyen de la syntaxe if IE 9. Nous y reviendrons, mais intéressons-nous d'abord aux trois instructions suivantes. La première cible IE8 et les versions antérieures (l'expression if lte IE 8 signifie "si inférieur ou égal à IE8"), la deuxième cible IE7 et les versions antérieures avec if lte IE 7 , et la dernière ne concerne que la version 6 et antérieures. Si elles sont présentées dans cet ordre, ces commentaires simplifient l'application des styles CSS spécifiques : les correctifs (patches ( patches)) que vous appliquez à une version plus récente d'IE se propagent aux versions antérieures. Quel intérêt ? Si la version IE7 souffrait souff rait d'un problème, il est fort probable que le problème existait déjà dans IE6. Venons-en au commentaire conditionnel d' d 'IE9. E 9. Il I l ne cible que cette cette version du navigateur. Nous Nous aurions pu ratisser large comme pour les versions antérieures, mais IE9 constitue une importante évolution par rapport à IE8, y compris au niveau du support de CSS. Les problèmes qu'il présente ayant beaucoup moins de chances de concerner les versions antérieures, nous leur épargnons l'analyse de ces règles complémentaires. Nous aurions pu procéder de même pour IE8, car son support CSS est très différent de celui d'IE7 et il n'hérite que de peu de problèmes de son prédécesseur. Mais puisque nous devions appliquer app liquer quelques quelques filtres pour IE, IE , nous avons choisi de ne les écrire écri re qu'une fois.
57
58
ADAPTIVE WEB DESIGN
QUITTER LA BASE Le réseau web forme une vraie rupture par rapport aux supports d'information que nous connaissions jusque-là. Ce n'est pas un nouveau médium imprimé, ni de la télé télévision, vision, ni de la radio, ni un jeu vidéo, un kiosque ou une application, mais un hybride de tous ces médias – et plus encore. Devant ce constat, l'organisme de normalisation W3C a défini des possibilités de cibler un média en particulier. Nous en avons profité plus haut dans le bloc @media, mais vous êtes sans san s doute plus habitué habitué à vous servir de déclarations media avec des feuilles de styles liées ou imbriquées (grâce à l'attribut media) ou en tant que suffixe des instructions instr uctions @import. C'est le W3C qui est le gardien de la liste des types de médias officielle, mais il n'est pas réfractaire à l'enrichir en réponse aux évolutions technologiques. Pour le moment, moment, cette liste li ste officielle normalise l'app l'application lication de styles CSS aux médias suivants : écran d' d 'ordinateur, imprimé, télévisions, terminaux portables, et dans les contextes des assistants d'a d 'accessib ccessibilité ilité tels que les lecteurs d'écrans, d 'écrans, les imprimantes de braille, et les appareils à retour de force. En l'absence d'indication d' indication de média cible, le choix impli i mplicite cite est l'écran l 'écran d'ordinateur, "screen" "screen".. Au départ, les désignations de médias cibles sont univoques, mais comme avec les sélecteurs, vous pouvez combiner plusieurs noms de médias en les séparant par des virgules virg ules (la virgule vi rgule a l'effe l 'effett d'un d 'un OU logique). logique). Dans l'exemple l'exemple qui suit, le fichier main.css sera appliqué appliqué aux deux types ty pes de médias méd ias "print" et "screen" :
Les désignations de médias sont tolérantes aux pannes, mais le mécanisme de tolérance est assez différent de celui qui s'applique aux sélecteurs (n'en redoutez aucune confusion) : face à un type de média inconnu dans une liste multiple à virgules, les types inconnus sont simplement ignorés et ignorés et les types connus sont pris en charge9. Hélas, dans le cas des déclarations déclarations de médias pour @import, les versions versions d'IE d 'IE antérieures à la version 8 sèment la zizanie même pour les types de médias qu'elles reconnaissent. C'est une raison de plus de s'en tenir à @media, sauf lorsque vous voulez vraiment masquer certaines règles pour ce navigateur : 9. La spécification 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 liés et incorporés. Cela dit, tous les navigateurs gèrent les désignations de médias en HTML de façon homogène.
CHAPITRE CHAPI TRE 3
AMÉLIORATION AMÉLIORA TION PROGRESSIVE AVEC LE CSS
@import ‘not-for-IE7 ‘not-for-IE7-or-below.css -or-below.css' ' screen; @media screen, print, refrigerator { /* IE va pouvoir accéder à ces règles */ }
Les désignations de médias sont très puissantes, puisqu'elles permettent de créer des mises en page adaptées aux médias cibles. Un des premiers à avoir utilisé cette technique est Eric Meyer. En l'an 2000, il nous a montré comment abandonner les pages écran "adaptées aux imprimantes" imprima ntes" en ajoutant ajoutant une feuille feu ille de styles spécifique à une sortie sur imprimante, disponible dans toutes les pages web10. Deux ans plus tard, Eric a étendu ce principe en nous montrant comment utiliser du CSS avancé (tel que du contenu généré à la demande) pour améliorer progressivement cette expérience11. Revenons à notre feuille de styles principale. Nous pouvons assez aisément y ajouter ajouter un support d'autres d'autres médias grâce notre infrastructure infrastr ucture stratifiée : /* =Typographie */ /* Typographie pour tous les médias */ @media screen { /* Typographie réservée aux écrans */ } @media print { /* Typographie réservée aux imprimantes */ } /* =Mise en page (Layout) */ /* Mise en page pour tous les médias */ @media screen { /* Mise en page réservée aux écrans */ } @media print { /* Mise en page réservée aux imprimantes */ } /* =Couleurs */ /* Couleurs pour tous les médias */ @media screen { /* Couleurs réservées aux écrans */ } @media print { /* Couleurs réservées aux imprimantes */ }
Une autre approche consiste à regrouper tous les styles d'imprimantes dans la même déclaration @media en fin de fichier : /* =Typographie */ /* Typographie pour tous les médias */ @media screen { /* Typographie réservée aux écrans */ } /* =Mise en page */ /* Mise en page pour tous les médias */ @media screen { /* Mise en page réservée aux écrans */ } /* =Couleurs */ /* Couleurs pour tous les médias */ @media screen { /* Couleurs réservées aux écrans */ } /* =Impression */ @media print { /* Redéfinitions globales réservées aux imprimantes */ }
Dans le cas de l'impression, ce regroupement dans une déclaration @media est logique, mais mai s il est préférable de distribuer les déclarations pour les autres médias. Chaque projet étant différent, vous n'aurez n'aurez qu'à faire des essais et voir ce qui convient le mieux.
Des déclarations de médias d'avant-garde Quelques années après le support de l'indépendance des médias, le W3C a renchéri en introduisant les requêtes de médias, une sorte de désignation de média anabolisée. Ces requêtes fournissent des détails au sujet de l'environnement du poste utilisateur, comme la largeur de la fenêtre du navigateur ou son orientation (portrait ou paysage). La puissance des requêtes de médias vous permet d'adapter d'adapter finement vos designs à des terminaux term inaux spécifiques. Elles représentent de ce fait un outil indispensable de plus pour l'amélioration progressive.
CHAPITRE CHAPI TRE 3
AMÉLIORATION AMÉLIORA TION PROGRESSIVE AVEC LE CSS
Grâce à une requête de média (que vous pouvez placer partout où vous placez des désignations de médias normales), vous ajoutez dans une page un jeu de règles adaptées aux capacités du logiciel log iciel agent utilisateur. util isateur. Voyons Voyons un exemple : @media (min-width:1025px) { /* ... */ }
Ce groupe de jeux de règles n'entre en vigueur vig ueur que si la largeur largeu r de fenêtre du navigateur est égale ou supérieure à 1 025 pixels. Le module CSS3 qui définit les requêtes de médias a atteint le niveau Candidate Recommendation au Recommendation au milieu de l'année l 'année 2009. Il stipul stipulee comment récupérer les dimensions de la fenêtre de navigateur, parmi d' d 'autres paramètres du terminal (orientation, nombre de couleurs affichables, résolution, etc.). Actuellement, le standard ne gère pas encore toutes les propriétés, mais il y en a assez pour que la technique soit digne d'intérêt. d 'intérêt. Les requêtes de médias reprennent la syntaxe de désignation de média standard en y ajoutant l'opérateur ET logique avec "and" et l'opérateur de négation avec "not". "not". Ils I ls vous donnent un u n supplément de souplesse pour cibler le média. Pour une cible écran de largeur supérieure à 1 024 pixels, nous écrirons : screen and (min-width:1025px) . Pour tous les médias sauf les imprimantes, nous écrirons : not print. Cependant, il n'y a pas d'opérateur OU. De ce fait, fa it, vous ne pouvez pas rédiger des requêtes conditionnelles aussi complexes comp lexes qu'avec avec un langage de programmation program mation (comme (comme dans d ans l'exp l 'expression ression A et B ou B et C, mais pas A et C). Mais pour obtenir l'effet de l'opérateur OU, il suffit d'u d 'utiliser tiliser une virgule. virg ule. Voici une requête de média composite assez complète suivie de commentaires en décrivant le fonctionnement : @media screen and (min-device(min-device-width:1024px width:1024px) ) and (max-width:989px), screen and (max-device(max-device-width:480px) width:480px), , screen and (max-device-width:480px) and (orientation:landscape), screen and (min-device-width:481px) and (orientation:portrait) { /* Mise en page pour fenêtre de navigateur de moins de 990 pixels
ou iPhone sous iOS3 ou iOS4 (ou équivalent) en mode Paysage ou iPad (ou équivalent) en mode Portrait */ }
61
62
ADAPTIVE WEB DESIGN
Nous pouvons maintenant retoucher notre feuille feuil le de styles avec des requêtes de médias de sorte sor te à améliorer progressivement notre notre page en définissant défin issant une mise en page fondamentale applicable applicable aux anciens navigateurs et aux tablettes. J'ai ensuite aj ajusté usté cette mise en page pour l'ada l'adapter pter aux naviga navigateurs teurs sur écran écran de bureau comme aux petits écrans des téléphones portables : /* =Mise en page minimale */ @media screen { /* ... */ } /* =Mise en page complète */ @media screen and (min-width:1025px) { /* ... */ } /* =Mise en page étroite */ @media screen and (max-width:7 (max-width:765px) 65px) { /* ... */ }
La Figure 3.6 3 .6 montre l'aspect des trois mises en page. Certaines différenc d ifférences es sont drastiques entre médias (par exemple, les modalités de navigation) et d'autres plus subtiles (comme la fiche de contact au format carte postale qui s'ajuste en largeur à l'écran). Sans entrer dans les détails de ces différences, nous constatons que les requêtes de médias permettent de créer 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 fin de Chapitre 6.
CHAPITRE CHAPI TRE 3
AMÉLIORATION AMÉLIORA TION PROGRESSIVE AVEC LE CSS
@media screen and (min-width:1025px) { /* ... */ }
Figure 3.6 : Trois mises en page gérées par des requêtes de médias.
63
64
ADAPTIVE WEB DESIGN
LA RICHESSE À TOUS LES ÉTAGES Nous avons avons découvert plusieurs plusieurs techniques techn iques pour exploiter le langage CSS en vue d'amélior d 'améliorer er progressivement progressivement nos pages web. Certaines Certai nes de ces techniques, techn iques, comme l'utilisation fructueuse des erreurs d'analyse, sont d'un emploi si simple et si courant que vous allez sans doute les adopter immédiatement. D'autres, comme la séparation séparat ion en niveaux des règles de styles, peuvent vous demander d'infléchir vos pratiques actuelles ou vous paraître totalement nouvelles. En combinant finement ces techniques, niveau par niveau, vous êtes assuré d'offrir à vos visiteurs une expérience de navigation optimale, quel que soit le navigateur et le terminal d'accès.
"Je n'accepte accepte pas d'adopter adopter un 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
CHAPITRE 4
AMÉLIORATION PROGGRES PRO RESSIVE SIVE AVEC AVEC JAVASCRIPT Le 7 février 2011, peu de temps après que le groupe Gawker Media a lancé le nouvel habillage unifié de ses différents sites (Lifehacker, Gizmodo, etc.), les visiteurs de ces sites tombèrent sur un bel écran vide (voir Figure 4.1). La nouvelle plate-forme était entièrement fondée sur JavaScript pour le chargement de contenu dans les pages. Une erreur dans le code JavaScript a fait que toutes les pages étaient affichées vides1. Cette erreur unique a entraîné une "indisponib " indisponibilité" ilité" de tous les sites (même si les serveurs restaient opérationnels) de Gawker, ce qui leur a fait perdre des milliers de pages vues et d'affichages de bannières publicitaires. Cette perte sèche leur aurait été épargnée s'ils avaient tenu compte des principes d'amélioration progressive.
1. Cette avarie avarie est racontée dans la page http://blogs.wsj.com/digits/2011/02/07/gawkeroutage-causing-twitter-stir/ . Jeremy Keith et Mike Isolani ont fourni des commentaires au sujet de la fiabilité 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 s el à l 'a'affaire ffaire (http://easy-reader.net/archives/2011/02/09/ you-cant-rely-on-javascript/).
68
ADAPTIVE WEB DESIGN
Figure 4.1 : Le site Lifehacker. Vide.
Rares sont les outils à pouv pouvoir oir rivaliser avec avec JavaScript JavaScript quand il s'agit d'a d 'animer nimer des pages web. Ce langage permet de créer des interactions sophistiquées et des interfaces dynamiques. Les concepteurs web en sont depuis longtemps convaincus et se sont jetés sur l'opportunité pour produire des pages plus attrayantes, pour valider les formulaires, etc. De nos jours, un développeur JavaScript Jav aScript n'a aucun mal ma l à créer quel quelque que chose d' d'étonnant étonnant en accor accordd av avec ec l 'approche d'améliora d 'amélioration tion progressive. progressive. Il n'en en a pas tou toujours jours été ainsi. Du milieu mil ieu à la fin des années 1990, écrire écri re du JavaScript JavaScript était considéré comme de la magie noire. Pour chaque bribe de code HTML un peu moins limpide, nous aboutissions en général à dix fois pire en JavaScript parce que les deux navigateurs phares de l'époque, Netscape et Internet Explorer, avaient deux interprétations interpré tations du langage HTML HTM L2 suffisamment divergentes pour que toutes les sections vraiment captivantes deviennent horribles à rédiger. 2. Le langage JavaScript a été inventé inventé par Brendan Brendan Eich. Il a vu le jour en en tant que sous-système sous-système de Netscape 2 fin 1995. 1995. Microsoft a ensuite ensu ite créé son dialecte de JavaScript sous le nom "JScript" (pour des raisons de droits intellectuels) intellect uels) et l'a lancé au cours de l'été l' été 1996 avec Internet Explorer 3 (le premier navigateur à avoir intégré un support des styles CSS).
CHAPITRE CHAPI TRE 4
AMÉLIORATION AMÉLIORA TION PROGRESSIVE AVEC JAV JAVASCRIPT ASCRIPT
Un exemple : pour trouver un élément (par exemple, #location ) dans un document (au sens strict, dans le DOM, Document Object Model), il fallait deux conventions différentes : document.layers['location']; // Netscape document.layers['location']; // document.all['location']; // IE
Cette cacophonie nous a obligés obligés à écrire écri re quasiment tous nos scripts deux fois, ou au moins à les truffer tru ffer de fourches (des (des points où le script prend une voie ou une autre selon le navigateur détecté), et nous avons fini par nous y perdre. Comme décrit dans le Chapitre 2, la fin des années 1990 a été une période frénétique sur le Web : c'était la guerre des navigateurs. Chaque nouvelle version de Netscape et de Microsoft IE proposait de nouvelles fonctions aux développeurs, dans l'espoir de capter la plus grande part de marché possible parmi les navigateurs. Cette course à la suprématie a causé bien des soucis aux développeurs ; les deux variantes incompatibles de JavaScript nous ont obligés à passer tellement de temps à ajuster les divergences que nous perdions de vue la façon dont fonctionnait le langage et omettions d'apprendre à bien l'articuler avec le HTML et le CSS. Un jour, jour, l'l 'a ssociatio ssociationn ECMA (European (European Computer Manufacturers Association) Association) a standardisé Jav JavaScript aScript3 et l'o l 'organisme rganisme W3C W3C a diffusé diff usé sa spécification DOM. Les sables mouvants sur lesquels nous bâtissions ont enfin laissé place à du sol stable sur lequel nous allions pouvoir envisager de meilleures façons de réaliser les choses : document.getElementById( document.get ElementById('location'); 'location'); // // DOM unifié
3. Netscape a soumis JavaScript à ECMA International comme candidat à un standard en 1996. La version standardisée de JavaScript a été nommée "ECMAScript", mais nous utilisons toujours le nom JavaScript, JavaScript, sauf s auf lorsque nous voulons parler de sa spécification.
69
70
ADAPTIVE WEB DESIGN
QUITTER QUIT TER SA ZONE DE CONFORT Une des premières leçons apprises une fois la poussière retombée était que le langage JavaScript n'était pas la panacée pour l'interaction sur le Web. En fait, le langage n'était pas si fiable que cela. En effet, même une fois que le W3C W3C a standardisé standardi sé le modèle DOM et que les navigateurs ont tous intégré le standard du langage, les divergences subsistaient ; elles étaient assez nomb nombreuses reuses entre les implé implémentatio mentations ns pour qu'il soit impossiblee de présupposer la disponibilité de certaines méthodes, notamment impossibl celles, vitales, de traversée de la structure arborescente du DOM, document. getElementById() (pour accéder aux éléments d'après leur identifiant) et document.getElementsByTagName() (pour les trouver d'après leur nom). En outre, même lorsqu'un navigateur supportait totalement la norme JavaScript, l'utilisateur (ou l'administrateur informatique de son entreprise) gardait le dernier mot en décidant ou pas d 'act 'activ iver er JavaScript JavaScript sur le poste client4. Nous avons fini par comprendre que le support de JavaScript JavaScr ipt n'allait allait pas de soi et avons commencé à reformuler notre code source, à le rendre plus limpide, plus facile à maintenir, et plus apte à gérer l'éventuelle absence ou difficulté d 'a'accès ccès au langage Ja JavaScript. vaScript. IntéressonsIntéressons-nous nous aux concepts concepts discutés di scutés à cette époque pour mieux m ieux comprendre comment bien exploiter exploiter JavaScript JavaScript dans da ns 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 fil, même si le l e code semble être écrit en sanscrit. sanscrit.
4. Pour les administrateurs informatiques, activer activer ou pas JavaScript JavaScript était d 'ab 'abord ord un problème problème de sécurité, mais les utilisateurs ont longtemps été invités à le désactiver pour éviter les fenêtres surgissantes (popups) et publicités. Il est très facile de désactiver JavaScript en accédant aux préférences du navigateur, mais il peut être bloqué par un pare-feu ou désactivé pour toutes les applications par les administrateurs.
CHAPITRE CHAPI TRE 4
AMÉLIORATION AMÉLIORA TION PROGRESSIVE AVEC JAV JAVASCRIPT ASCRIPT
Vers 100 % de fabilité Il n'était pas rare d'écrire d' écrire (ou de lire) lire) à l'époque l 'époque des débuts débuts de JavaScript JavaScript des gestionnaires d'événements onclick (du code exécuté exécuté en réaction à un clic sur su r un élément de la page) qui définissaient des liens sans cible5 : Easy! Designs Designs
Si JavaScript est activé, le lien de l'exemple précédent provoque l'appel à une fonction sur mesure nommée newWin() , en lui transmettant la valeur "http://easy-designs.net/" . L'ex L'exécution écution de la fonction provoque l'a l 'affichage ffichage de la page visée dans une nouvelle fenêtre. En revanche, si JavaScript est désactivé, le lien n'a aucun aucun effet (nous en avions parlé en discutant di scutant des identifiants dans le Chapitre 2). L'élément href pointe sur un identifiant id vide. Quel est l'intérê l' intérêtt d'un d 'un lien qui ne fonctionne fonctionne pas en l'absence l 'absence de JavaScript JavaScript ? Cela m'amène amène à présenter ma première maxime de l 'amélioration progressive avec JavaScript : 1. Vérifez que tout le contenu reste acces accessible sible et que que toutes les actions
indispensables restent opérationnelles même lorsque le JavaScript est désactivé.
Le lien l ien de l'ex l 'exemple emple contrevient à cette règle (les sites de Gawker également), mais c'est le cas de la majorité des sites web créés à la fin des années 1990 avec JavaScript. Le Web semblait infecté de sites réclamant le JavaScript qui l'imposaient aux utilisateurs. Autrement dit, à cette époque le JavaScript était envahissant. Les développeurs ont pris conscience du problème et ont commencé à promouvoir une utilisation moins péremptoire de JavaScript. Note : Je ne me fais pas ici l'avocat des fenêtres popup ou de l'ouverture non désirée désir ée de d e fenêtres par JavaScript JavaScript,, car ces techniques causent causent des d es soucis d 'a'acces cces-sibilité et d'utilisation. En revanche, j'ai choisi cet exemple car il montre bien l'évolution des pratiques d'écriture JavaScript d'une façon 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, technique, citons le pseudo-protoco pseudo-protocole le javascript (par exemple, ) et celle que je préférais, l'utilisation combinée de ce pseudo-protocole et d'un gestionnaire d'événement inline (par exemple, onclick="maFonction();">).
Dorénavant, le lien pointe sur une adresse URL, Dorénavant, UR L, ce qui lui assure de mener quelque part sans JavaScript. Si le JavaScript est présent, cliquer sur le lien lance la fonction newWin() , qui reçoit la valeur de l'attribut href (autrement dit, la valeur DOM this.href). L'autre grande différence de cette nouvelle version est que le gestionnaire onclick renvo renvoie ie la valeur faux (" ( "return false"), ce qui annule l'action l 'action par défaut défaut de l'évé l' événeme nement nt (l'a (l 'affichage ffichage de la page visée), visée), puisque cette action HTML ferait doublon. Nous venions venions ainsi de faire un premier grand pas dans la gestion d'une indisponibilité de JavaScript, mais avions chemin faisant compris qu'il devait y avoir de meilleures solutions à ce genre de scénarii. Simplifer la maintenance Dans la prochaine étape d'évolution de ce code, nous exploitons l'antique rel l (nous en avons parlé au Chapitre 2) pour extraire le code attribut re JavaScript Ja vaScript inline afin afi n de le renvoye renvoyerr dans un fichier externe, ce qui apporte deux bénéfices : 1) cela ajoute du sens au lien et 2) cela simplifie la maintenance des sites, puisque les programmeurs n'ont qu'un endroit JavaScript à retoucher pour que la modification modi fication se propage à la totalité du site (c'est est le même argument que nous avions avancé pour externaliser les feuilles de styles avec l'attribut style).
CHAPITRE CHAPI TRE 4
AMÉLIORATION AMÉLIORA TION PROGRESSIVE AVEC JAV JAVASCRIPT ASCRIPT
Vous reconnaissez le code HTML du Chapitre 2, puisque c'est celui des éléments de navigation de la page Retreats 4 Geeks. La seule différence est l'ajout à l'élément ol d'un attribut role dont la valeur est "navigation". Vous aurez deviné que le repère ARIA AR IA nommé "navigation" "navigation" permet de préciser qu'un un élément élém ent fait partie d'un d 'un mécanisme de navigation dans la page. Tous les rôles de repérage d'ARIA fournissent des informations concernant les différentes régions de la page et permettent de naviguer navig uer globalement. globalement. Certaines technologies d'assistance permettent à l'utilisateur d'accéder à ces repères ; il peut ainsi naviguer directement d'une région à l'autre avec le clavier ou un autre moyen. Ces repères sont les successeurs logiques de cette flopée de liens "aller à"4. En revanche, les rôles structurels sont des outils d'organisation proches des éléments HTML5 tels que section et article. Vous vous souvenez peut-être peut-être que dans d ans l'l 'exemple xemple original, origin al, nous avions englobé l'l'élémen élémentt de navigation ol dans un u n nouvel nouvel élément élément HTML5 HT ML5 nommé nav. Une brèvee réflexion vous permettra de conclure que cet élément nav est équivalen brèv équ ivalentt au niveau sémantique au rôle rôle de repère de "navigation" "navigation".. Sachez dès à présent que ce n'est pas le seul domaine de chevauchement entre HTML5 et ARIA.
Redondant et raisonnable Les deux spécifications (HTML5 et ARIA) ARI A) ont progressé progressé de façon indépendante au cours de la même période. Chacune a cherché à répondre aux problèmes prob lèmes qu'elle elle considérait comme les plus urgents dans la l a norme actuelle du HTML.. (De là, la redondance inévitab HTML inévitable. le.)) La spécification ARIA est à l'heure l' heure actuelle un peu plus mûre pour devenir une recommandation que HTML5. La plupart de ces caractéristiques particulières sont de ce fait incorporées au projet HTML5, dont la spécification continue d'évoluer. Nous pouvons sans 4. Les liens "Aller "Aller à" sont ceux qui permettent de sauter directement directement à une autre autre région de la page avec un ancrage. Ce sont s ont ceux qui portent port ent des légendes du style "Aller "Aller au contenu" ou "Aller au menu". menu". Ils étaient éta ient très utilisés depuis des années, années , mais les rôles de repères ARIA AR IA les rendent redondants.
97
98
ADAPTIVE WEB DESIGN
grand risque r isque nous attendre attendre à ce que les deux spécifications aient aient suffisamment 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 beaucou beaucoupp de doublons doublons entre entre ARIA AR IA et HTML5, HT ML5, d'abord d 'abord au niveau des rôles structurels, et un peu moins au niveau des rôles de repères. Le Tabl ableau eau 5.2 donne un aperçu comparatif entre la sémantique traditionnelle, t raditionnelle, le rôle ARIA équivalent et l'élément HTML5 qui atteint le même objectif, s'il existe.
SÉMANTIQUE RÔLE ARIA AD-HOC #header, #top
banner
ÉLÉMENT HTML5 header
(approx.)
SIGNIFICATION Région de la page ciblée au niveau site et non au niveau page
#main, #content
main
aucun
Contenu focalisé dans le document
#extra, .sidebar
complementary, note
aside
Section complémentaire du document reliée au contenu principal (le contenu "complementary" reste significatif, même séparé du principal). pri ncipal).
#footer, #bottom
contentinfo
footer
Région contenant des informations au sujet s ujet du du document
#nav
navigation
nav
Région contenant des liens de navigation
.hentry
article
article
Région de la page constituant une section indépendante du document
Tableau 5.2 : Comparaison entre sémantique traditionnelle, rôle ARIA et
élément HTML5 éventuel. Pour l'instant, on remarque des allers-retours entre la communauté définissant le HTML5 et les défenseurs de l'accessibilité. La question est de savoir comment gérer la redondance. En termes pratiques, même si vous avez
CHAPITRE CHAPI TRE 5
AMÉLIORATION AMÉLIORA TION PROGRESSIVE ET ACCESSIBILITÉ
opté pour les équivalences sémantiques HTML5 du ARIA, il est conseillé d'ajouter les rôles de repères ARIA en doublons parce que toutes les technologies d'assistance ne gèrent pas les éléments HTML5 correspondants. En revanche, pour les rôles structurels, vous faites comme bon vous semble, car ce sont des éléments d'organisation qui n'entrent pas en ligne de compte pour les technologies technologies d'a d 'assistance ssistance aux aux utilisateurs. Une rapide rapide lecture du code source de la page Retreats 4 Geeks permet per met de voir cette redondance dans les éléments nav et footer . Lorsque les technologies d 'a'assistance ssistance seront seront mises à jour pour HTML5, HT ML5, nous pourrons supprimer supprimer les attributs de rôles devenus inutiles et éclaircir un peu notre code. En plus des doublons avec HTML5, ARIA comporte plusieurs rôles qui dupliquent la sémantique disponible depuis longtemps en HTML. C'est par exemple le cas des rôles de repères et de structures ARIA suivants : columnheader , definition , form, heading, img , list , listitem , row , rowheader et separator. Certains Certain s d'e d 'entre ntre eux sont en équivale équivalence nce univoque univoque avec le HTML HTM L (par exemple, e xemple,""form"), alors que d'autres d 'autres sont des variantes plus générales de ce dont nous disposons en HTML (par exemple, "list"). Alors que l'on peut aisément concéder qu'il y ait quelques chevauchements entre ARIA et HTML5 en raison de leur développement parallèle, vous pourriez vous demander pourquoi ARIA cherche à recréer des éléments sémantiques qui existent en HTML HTM L depuis plus de de dix ans. La L a réponse est très directe : pour une raison rai son ou une autre, certaines entreprises entreprises (Google humhum> ) aiment employer un balisage non sémantique (par exemple, div ) comme structure de base de l'interface, en exploitant JavaScript pour que le résultat ressemble à un contrôle HTML natif. Rien que pour cette raison, ARIA définit des rôles qui sont en chevauchement. Vous ne me verrez jamais utiliser un élément div dans un rôle de formulaire "form" (j'utilise tout simplement un élément 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 éléments HTML5 équivalents en termes sémantiques aux rôles de repères et de structures d'ARIA (nav, footer, article). Nous avons ajouté l'équivalent en rôle ARIA afin d'être certains de servir le plus grand nombre de visiteurs. (Rappelons qu'il s'agit bien de l'objectif primordial de l'amélioration progressive).. Mais progressive) Mai s nous n'en avons avons pas fini. fi ni. Comme Com me le montre le Tableau Tableau 5.2, l'équivalent sémantique du rôle ARIA "banner" en élément header du HTML5
99
100
ADAPTIVE WEB DESIGN
peut se discuter. Pour être absolument absolument clair dans le service ser vice que je rends à mes visiteurs, j'ai donc ajouté ce rôle : ">
Le seul rôle que nous n'avons pas encore abordé pour l'instant (il n'est pas encore géré en HTML5) correspond à "main". Il permet de désigner le contenu focalisé du document. Dans le Chapitre 2, j'avais choisi d'englober dans un élément section les différents éléments article de la page. J'avais choisi le même élément comme racine de notre micro-format hCalendar hCalendar.. Cet élément section rêve d'endosser le rôle de "main" :
Ces deux simples retouches nous ont permis de prendre en compte tous les rôles de repères qu'il semble utile d'exploiter d'exploiter dans le site Retreats 4 Geeks. Au passage, nous avons avons amélioré l'accessibilité l 'accessibilité globale globale de la page en permettant aisément aux utilisateurs des technologies d'assistance de naviguer dans le document.
INDISPENSABLES INDICES ? La spécification ARIA ARI A fournit aux utilisateurs les moyens moyens de naviguer dans les documents, mais elle propose d'autres d 'autres fonctions fonctions utiles, et notamment une collection colle ction de rôles et d'états d' états de widgets. Un rôle de widget (un widget (un composant d'interface) correspond à la description du rôle d'un élément. Ces rôles sont en général classés en deux catégories : ceux qui s'intéressent à la structure et les autres. En d'autres termes, il y a ceux des conteneurs et ceux des contenus que sont les composants. Les Le s conteneurs sont les éléments qui hébergent les composants d'un widget de l'interface. Prenons comme exemple l'interface à onglets de la Figure 5.1. Une interface à onglets se fonde sur deux parties : une liste d'onglets et une collection de panneaux correspondant à ces onglets. Il en résulte trois rôles distincts en ARIA AR IA : les onglets qui portent le rôle de "tab", la liste d'o d 'onglets nglets qui porte le rôle de "tablist", et le panneau correspondant à chaque onglet qui porte le rôle de "tabpanel". Les deux rôles "tab" et "tabpanel" sont des rôles de composants alors que "tablist" est un rôle de conteneur (la liste qui contient les onglets).
CHAPITRE CHAPI TRE 5
AMÉLIORATION AMÉLIORA TION PROGRESSIVE ET ACCESSIBILITÉ
Figure 5.1 : Exemple d'interface d 'interface à onglets. onglets.
La spécification ARIA ARI A définit toute une série de rôles de widgets. Cela vous permet de construire des contrôles complexes de formulaires (par exemple, des curseurs de réglage et des sélecteurs numériques rotatifs) ou bien des menus arborescents, des boîtes de dialogue modales ou même des interfaces glisser-déposer, et tout cela en garantissant l'accessibilité. Au niveau des rôles de structures, ARIA AR IA permet de redéfinir un éléme élément nt HTML n'ayant ayant aucun sens pour qu'il en prenne un en termes fonctionnels.
n"> Je ne suis pas un vrai bouton, mais je fais comme si sur le web
Tout cela est très prometteur, mais pour qu'un widget fonctionne, il faut du code JavaScript. Habituellement, c'est un contexte auquel l'accessibilité n'a pas accès. La principale raison pour laquelle les techniques du type Ajax ne s'entendent pas très bien avec l'accessibilité est liée au fait que le langage HTML ne propose aucun mécanisme permettant au code JavaScript d'informer l'utilisateur (ou la technique d'assistance qu'il a choisie) en temps réel, hormis les deux techniques très élémentaires et intrusives que sont alert() et confirm() (on pourrait les comparer à des perturbateurs qui crient du fond de la classe).
101
102
ADAPTIVE WEB DESIGN
Dans ARIA, la gestion du contexte est confiée à des "états". Un état ARIA correspond à un groupe d'attributs pouvant être appliqués à quasiment tous les éléments. Certain Cer tainss états sont globaux (ils s'appliquent appliquent à tous les éléments), éléments), alors que d'autres sont spécifiques au contexte de certains widgets. Tous ces états portent un nom commençant par "aria-". Ils transmettent des informations utiles au visiteur concernant ce qui a changé pour un u n élément désigné. Saviez-vous que vous connaissiez déjà l'un des ces états : aria-hidden ? Cet attribut aria-hidden a été vu en début de chapitre. Il accepte une valeur booléennee ("true" ou "false") et indique à l'a booléenn l 'agent gent du poste poste client ou la technotechnologie d'assistance s'il faut ou non faire connaître à l'utilisateur le contenu concerné. Parmi les autres états ARIA prédéfinis, nous pouvons citer ariadisabled, aria-expanded, aria-invalid, aria-pressed et aria-selected. Si nous revenons à l'interface à onglets de la Figure 5.1, nous pouvons tirer profit de l'état aria-hidden pour contrôler l'état des panneaux et de l'état aria-selected pour gérer l'état l' état des onglets. onglets. Mais la spécification ARIA va plus loin encore. Elle définit des attributs d'états, d' états, mais également éga lement un certain nombre de de propriétés pouvant pouvant être associées à un élément. 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 propriétés sont destinées 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 référence id comme paramètre. Cet identifiant doit correspondre à l'élément dont le contenu ou la présence est contrôlé par un autre élément auquel l'attribut est appliqué. app liqué. Dans notre interface à onglets, c'est l'ong l 'onglet let qui contrôle 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 même que pour aria-controls.
CHAPITRE CHAPI TRE 5
AMÉLIORATION AMÉLIORA TION PROGRESSIVE ET ACCESSIBILITÉ
Figure 5.2 : Grâce aux propriétés ARIA, AR IA, nous pouvons mettre en relation les
différents composants différents composants de d e l'interface. l 'interface. Les états et les propriétés ARIA aident beaucoup à maintenir l'utilisateur informé. Voyons un autre concept ARIA qui est simple et dont l'intérêt pratique est évident : les régions actives (Liv (Livee Regions Region s).
MAIS C'EST VIVANT ! L'apparition du mécanisme Ajax et de la recrudescence du JavaScript ont eu pour résultat qu'une des choses les plus désagréables dans l'expérience utilisateur est devenue la mise à jour en temps réel de certaines régions d'une page. Cela entraîne de nombreux problèmes d'usage, les deux principaux étant les suivants suivants : 1) les technologies d'a d 'assistance ssistance n'étaient n'étaient pas informées des changements et n'avaient aucun moyen d'informer l'utilisateur à leur tour ; et 2) un utilisateur qui effectue un zoom ou qui défile sur un appareil à petit écran n'est pas informé des mises à jour du contenu qui se produisent en dehors de la zone affichée. La spécification ARIA propose un attribut qui résout directement ce problème : aria-live.
103
104
ADAPTIVE WEB DESIGN
Le plus étonnant dans aria-live est sa simplicité. Il suffit d'appliquer cet attribut à un élément pour contrôler quand et comment sa mise à jour est communiquée à l'utilisateur. L'attribut aria-live accepte l'une des trois valeurs suivantes : 1. "off " lorsque les mises à jour sont fréquentes et de peu d'importance, comme dans dan s le cas d'un flux flu x dynamique dynam ique de votre compte Twitter Twitter (n'est-ce est-ce pas ?) ; 2. "polite " pour les mises à jour assez importantes pour en informer l'utilisateur lorsqu lorsqu'il 'il ne fait rien d'autre, 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 suffisamment importantes pour devoir être immédiatement imméd iatement annoncées, 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 : aria-live="assertive">
Cette simple retouche permet de garantir que l'utilisateur sera informé de toute erreur pendant le remplissage remplissage du formulaire et d 'avoir la confirmation que le formulaire a bien été transmis.
ADOPTION ET MANQUE MANQUESS Depuis son lancement, ARIA a fait l'objet d'un bon accueil de la communauté web. Au jour où nous écrivons ceci, tous les grands navigateurs ont incorporé une certaine dose de support ARIA, de même pour les outils de lecture d'écran répandus tels que JAWS, Windows Eyes, NVDA et Orca. De grandes entreprises comme IBM, IBM , Sun Microsystems, Adobe, Yahoo! Yahoo! et Google travaillent d'arrache-pied à augmenter l'efficacité et l'exhaustivité d'ARIA. La communauté JavaScript a aussi adopté ARIA, ARI A, les deux outils outi ls Dojo Dijits5 et jQuery UI6 ayant incorporé les rôles, états et propriétés ARIA dans leurs composants. La spécification est encore en cours de développement et aucune mise en place n'est encore complète, mais les progrès sont permanents. 5. 6.
AMÉLIORATION AMÉLIORA TION PROGRESSIVE ET ACCESSIBILITÉ
Ce serait péché de ma part de ne pas mentionner le principal problème qui empêchee ARIA empêch AR IA de se fondre harmonieusement harmonieusement dans notre approch approchee d'a d 'amémélioration progressive, tout du moins au niveau des rôles et des états des widgets. widg ets. En effet, nous ne disposons d' d 'aucun moyen moyen de tester la disponibilité du support support ARIA ARI A dans le navigateur ou dans la technologie technologie d' d 'a ssistance. Nous Nous ne pouvons pouvons donc pas bien décider comment exploiter au mieux chaque widget. Derek Featherstone avait soulevé ce problème dans son excellent article pour le site A List Apart sous le titre "ARIA and Progressive Enhancement7". J'J 'en conseille la lecture à tous ceux qui veulent mieux comprendre ce problème. Pour le moment, aucune solution n'a encore été trouvée, mais croisons les doigts.
LES RACCOURCIS CLAVIER, C'EST BIEN Le dernier dern ier sujet sujet que je veux aborder avant avant de clore ce chapitre est l'l 'accessibilité au moyen du clavier. L'utilisation systématique 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 grav g ravee erreur. Le clavier reste un outil extrêmement pratique, et il constitue l'interface de prédilection de la plupart des utilisateurs non-voyants tout autant que des utilisateurs chevronnés. Nous avons appris beaucoup en ce qui concerne le clavier au cours des dernières années. Nous avons tout d'abord compris que les touches d'accès constituaient une bonne idée, mais que dans la pratique ce n'était pas si intéressant8. Nous avons également compris qu'une application trop rigoureuse de l'attribut tabindex pouvait plonger les utilisateurs dans une frénésie de sauts d'un élément élément à l'autre l 'autre (et un énervement énervement certain)9. Ce que nous avons surtout découvert, c'est que nous pouvions nous servir du code JavaScript pour modifier dynamiquement la valeur de l'attribut tabindex pour simplifier le cheminement de l'utilisateur parmi les différents composants d'un widget complexe, comme c'est le cas d'une interface à onglets ou d'un formulaire en accordéon. À quoi correspond cette technique appelée jonglage tabindex ? Au cours de l 'a nnée 2005 20 05 (on n'n'a pas retrouvé l'origine exacte), quelqu' quelqu'un un a découvert qu'en en donnant la valeur "-1 "-1" à l 'a'attribut ttribut tabindex d d'un 'un élément, élément, cela écartait l'élément l 'élément 7. 8. 9.
de la séquence de focalisation par la touche TAB dans le document10. Ce qui est intéressant, c'est que bien que le composant concerné ne fasse plus partie de la séquence de tabulation dans le document, on peut encore le cibler en code JavaScript (avec element.focus()), ce qui ouvre de nouvelles nouvelles possibilités pour contrôler précisément l'expérience de l'utilisateur. Parcourons un scénario typique en revisitant l'interface à onglets présentée un peu plus haut : 1. L'utilisateur arrive dans l'interface l'i nterface à onglets et et actionne la touche touche TAB de son clavier, ce qui focalise sur le premier onglet (qui est associé au panneau actuellement affiché) a ffiché).. 2. S' S'ilil actionne actionne à nou nouveau veau la touche touche TAB ou le bouton du clavier tactile, le focus passe à l'élément de contenu ciblable suivant en quittant la section des onglets. Cela ne l'emmène pas à l'onglet suivant dans la liste. 3. S' S'ilil maintient la touch touchee MAJ tout en actionnant la touche TAB, il revient dans la liste des onglets et réactive l'onglet courant. 4. Il peut utiliser utiliser les flèches flèches du curseur curseur pour circuler circuler parmi les différents différents onglets de la liste, en affichant à chaque fois le panneau correspondant. 5. S' S'ilil actionne la touch touchee ENTRÉE pendant qu'il navigue dans la liste des onglets, il focalise sur le panneau correspondant à l'onglet actif. Je reco reconnais nnais que que cela cela représ représente ente beau beaucou coupp d'utilisation d'utilisation de la touch touchee TAB (et un défi remarquable). Cependant, en jouant bien avec tabindex et en ajoutant un peu de code JavaScript, vous y arrivez aisément. Voici comment : 1. Vous commencez par affecter la valeur "-"-1" au tabindex de chacun des onglets et panneaux, ce qui les écarte de la séquence de tabulation de la page. 2. Vous réaffectez ensuite ensu ite la valeur valeur "0" "0" à l'onglet courant pour le rapatrier rapatrier dans la séquence de tabulation à sa position par défaut. 3. En JavaScript, JavaScript, vous pouvez pouvez ensuite régler dynam dynamiquement iquement la propriété propriété tabindex de chacun des onglets en fonction des commandes frappées au clavier par l'utilisateur, par exemple les touches gauche, droite, haut et bas. Vous permettez ainsi à l'utilisateur de se déplacer facilement dans l'interface. 10.Ce comportement a été particulièrement intéressant parce que, selon la spécification spéci fication du W3C, tabindex ne pouvait accepter une valeur qu'entre 0 et 32 767.
CHAPITRE CHAPI TRE 5
AMÉLIORATION AMÉLIORA TION PROGRESSIVE ET ACCESSIBILITÉ
Voici un extrait de la méthode nommée swap() de TabInterface qui montre comment jongler avec tabindex (v (vous ous y trouv t rouvez ez également un peu de manipuma nipulation des attributs attributs ARIA ARI A et d'interversio d 'interversionn d'éléments d 'éléments class) : function swap( e ) { // ... // Désactivation du panneau et de l'onglet actifs removeClassName( removeClassN ame( old_tab, 'active' ); old_tab.setAttribute( old_tab.setA ttribute( 'aria-selected', 'false' ); old_tab.setAttribute( old_tab.setA ttribute( 'tabindex', '-1' ); removeClassName( removeClassN ame( old_folder, 'visible' ); old_folder.setAttribute( old_folder.s etAttribute( 'aria-hidden', 'true' ); // Activation du nouveau panneau et onglet addClassName( addClassName ( tab, 'active' ); tab.setAttribute( tab.setAttri bute( 'aria-selected', 'true' ); tab.setAttribute( tab.setAttri bute( 'tabindex', '0' ); addClassName( addClassName ( new_folder, 'visible' ); new_folder.setAttribute( 'aria-hidden', 'false' ); // ... }
Pour voir voir cette technique techn ique en pleine action, allez découvrir TabInterface.js TabInterface.js sur sur le site Github11.
AGISSEZ… ACCESSIBLE L'a ccessibilité est un sujet complexe. complexe. Un peu de temps est nécessaire nécessa ire pour vous y habituer, mais cela deviendra ensuite une seconde nature. Comme toutes les autres techniques de ce livre, l 'a'accessi ccessibilité bilité devra de préférence préférence être app appliquée liquée en plusieurs niveaux, afin de construire l'interface utilisateur progressivement. Vous pourrez ainsi créer un résultat qui répondra aux attentes de tous vos utilisateurs.
11. http://github.c http://github.com/easy-designs om/easy-designs/TabInterface.j /TabInterface.js s
107
"Quand tu veux construire un bateau, ne commence pas par rassembler du bois, couper des planches et distribuer du travail, mais réveille au sein des hommes le désir de la mer grande et belle." — ANTOINE DE SAINT-EXUPERY
CHAPITRE 6
À EMPORT EMPORTER ER
Nous avons visité bien des aspects durant cette courte promenade ensemble. Nous avons vu l'amélioration progressive en action, en partant d'un simple document texte pour aboutir à une page web attrayante, fonctionnelle et restant accessible à tous. Le rythme de croisière a été soutenu, mais nous espérons que vous repartez avec une idée plus précise de ce qu'est l'amélioration progressive, progressive, pourquoi cela fonctionne et comment l'i l 'incorporer ncorporer dans vos prochains projets, au niveau conception et développement. Vous avez peut-être déjà mis en pratique certaines techniques. Bien que ce livre soit de pagination réduite et que nous ayons la chance de pouvoir pouv oir faire appe appell à un excellent concepteur concepteur d'index, d 'index, vous pourriez aisément a isément ne plus savoir où a été abordé un concept que vous voudriez revoir. Je fournis fourni s à cet effet dans les pages suivantes un rap rapide ide résumé des principales pri ncipales techniques présentées, avec des conseils d'utilisation. Cette checklist de l'amélioration progressive vous permettra de vérifier que vous tenez compte avec toute la considération requise des aspects essentiels de l'a l 'amélio mélioration ration progressiv progressive. e. À votre tour de mettre tout cela en pratique en concevant des choses superbes !
110
ADAPTIVE WEB DESIGN
LA CHECKLIST DE L'AMÉLIORATION PROGRESSIVE Contenu & HTML (Chapitre 2) ❏
UN MANUSCRIT MAN USCRIT/TAPUSCRIT /TAPUSCRIT BIEN RÉDIGÉ ET NE PERDANT PAS SON SENS LORSQU'IL EST LU PAR UN LECTEUR L ECTEUR ÉCRAN AUDIO
Il s'agit du niveau fondamental de l'expérience utilisateur ; il doit faire l'objet de tous vos soins. Nous donnons quelques pistes dans la bibliographie. ❏
CHOISISSEZ VOS ÉLÉMENTS HTML EN FONCTION DE LEUR SIGNIFICATION
Le simple fait de tirer profit de la sémantique standard des éléments (balises) HTML repr représente ésente un grand pas vers une meilleure accessiaccessibilité (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 ÉLÉMENTS QUI SERVEZ-VOUS PARTICIPENT À LA MÊME FONCTION
La classification (au (au moyen de l'attr l 'attribu ibutt class, par exemple) donne du sens aux éléments HTML pour lesquels le standard n'en fournit pas assez et lorsqu'il n'existe pas de micro-format approprié. ❏
IDENTIFIEZ LES ÉLÉMENTS STRUCTURANTS
L'identification (par exemple par l'utilisation de l'attribut id) est une excellente solution pour ajouter du contexte à une région de page ou une instance spécifique d'un d 'un élément élément de classification.
CHAPITRE CHAPI TRE 6
À EMPORTER
CSS (Chapitre 3) ❏
VÉRIFIEZ MINUTIEUSEMENT VOS SÉLECTEURS COMPOSITES
Vous prenez des risques en mélangeant des sélecteurs de niveaux de complexité comp lexité très différents, di fférents, car lorsque le navigateur ne comprend pas un des sélecteurs, il ignore tout le jeu de règles. Cela devient en revanche une bonne astuce si votre but est de masquer tout un jeu de règles pour les anciens navigateurs. ❏
ORGANISEZ VOS RÈGLES CSS EN PENSANT AU MÉCANISME M ÉCANISME DE CASCADE
L'ordre d'apparition est significatif. Une bonne organisation de vos règles de styles vous aidera à concevoir une structure à amélioration progressive, ce qui rendra votre code CSS plus facile à maintenir. ❏
MASQUEZ LES JEUX DE RÈGLES CSS RÉCENTES AUX ANCIENS NAVIGATEURS
Un des plus puissants outils CSS pour masquer sélectivement sélectivement des jeux de règles est le bloc @media. ❏
GÉREZ LES DIVERGENCES D'IE AVEC AVEC DES COMMENTAIRES COMMEN TAIRES CONDITIONNELS
Les anciennes versions d'Internet Explorer sont réputées pour leurs imperfections. Les Commentaires Conditionnels du type