Html5 bonnes-pratiques

41
Les bonnes pratiques et HTML5 Jean-pierre VINCENT

description

les bonnes pratiques appliquées pour ou contre HTML5présenté à strasbourg à la kiwi party

Transcript of Html5 bonnes-pratiques

Page 1: Html5 bonnes-pratiques

Les bonnes pratiqueset HTML5

Jean-pierre VINCENT

Page 2: Html5 bonnes-pratiques

#fear

Page 3: Html5 bonnes-pratiques

Qui ça ?Jean-pierre VINCENT

braincracking.org@theystolemynick

Je sers le Web et c'est ma joie :

houra.fr, Yahoo!, timeofmylife.comLivre « HTML5 » en juillet 2011

Page 4: Html5 bonnes-pratiques

HTML5 casse tout Accessibilité Nouvelle syntaxe Nouvelles failles de sécurité Javascript only

Bonnes pratiques ? Opquast codage

Page 5: Html5 bonnes-pratiques

Et vous ?

Page 6: Html5 bonnes-pratiques

Nouveaux éléments

header, nav et les autres (de type display:block)

Problème : Non stylable sur IE < 9

Page 7: Html5 bonnes-pratiques

Nouveaux élémentsSolution 1 : HTML5 shiv<script> document.createElement('article')</script>

Page 8: Html5 bonnes-pratiques

Nouveaux élémentsSolution 1 : HTML5 shiv<script> document.createElement('article')</script>

<article class="article" role="main"> <h1>...</h1> ...</article>

Page 9: Html5 bonnes-pratiques

Nouveaux élémentsSolution 1 : HTML5 shiv

✗ Dépendance de IE à JavaScript

✓ Sémantique OK

✓ Code normal

Page 10: Html5 bonnes-pratiques

Nouveaux élémentsSolution 2 : XML namespace<html xmlns:html5="http://www.w3.org/1999/xhtml">

<html5:article class="article" role="main"> <h1>...</h1> ...</html5:article>

Page 11: Html5 bonnes-pratiques

Nouveaux élémentsSolution 2 : XML namespace

✓ Pas de dépendance JS

✗ Sémantique KO

✗ Code CSS et HTML modifié

Page 12: Html5 bonnes-pratiques

Nouveaux élémentsSolution 3 : éléments parents

<article> <div class="article" role="main"> <h1>...</h1> ... </div></article>

Page 13: Html5 bonnes-pratiques

Nouveaux élémentsSolution 3 : éléments parents

✓ Pas de dépendance JS

✓ Sémantique OK

✗ Code CSS et HTML modifié

Page 14: Html5 bonnes-pratiques

Nouveaux élémentsConclusion :

facilité de codage ? Shim

IE sans JS mais BP de codage ? Éléments parent

Page 15: Html5 bonnes-pratiques

Hiérarchie BP#3 : hiérarchie de titres dans la page

Problème : HTML5 a défini un nouvel algorithme

Page 16: Html5 bonnes-pratiques

HiérarchieHTML 4 :<body><h1>titre page</h1><div role=main class=article> <h2>titre article</h2></div>

Page 17: Html5 bonnes-pratiques

HiérarchieHTML 4 :

<body><h1>titre page</h1><div role=main class=article> <h2>titre article</h2></div>

HTML5 :<body><h1>titre page</h1><article role=main class=article> <h1>titre article</h1></article>

Page 18: Html5 bonnes-pratiques

Hiérarchie

Très utilisé par les utilisateurs d'AT

Pas changeable selon le doctype

Différent selon le moteur HTML

Page 19: Html5 bonnes-pratiques

HiérarchiePas de réelle solution

Ne pas utiliser de balises de section Servir un HTML différent selon le navigateur Ignorer le problème (petites hiérarchies)

Page 20: Html5 bonnes-pratiques

Liens d'évitement (BP#132)

Page 21: Html5 bonnes-pratiques

Liens d'évitement (BP#132)

Théorie : Remplacés par rôles ARIA (main, navigation, search) Rôles ARIA transmis au AT par le navigateur Traduction automatique d'éléments HTML5 en ARIA

Page 22: Html5 bonnes-pratiques

Liens d'évitement (BP#132)

Pratique : Utilisateurs clavier sans AT

Support actuel restreint (FF4)

Dans la spec, les rôles main et search sont à définir manuellement

Page 23: Html5 bonnes-pratiques

Liens d'évitement (BP#132)

Toujours utile

HTML5 et ARIA aussi

Page 24: Html5 bonnes-pratiques

Canvas

Inaccessible (pire que Flash)

BP#86 : proposer une alternative

Ou pas, dans le cas d'effets décoratifs

Page 25: Html5 bonnes-pratiques

Canvas

Page 26: Html5 bonnes-pratiques

ImagesReproche à HTML5 : alt non obligatoire (BP#1) Suppression de longdesc

Page 27: Html5 bonnes-pratiques

ImagesReproche à HTML5 : alt non obligatoire (BP#1) Suppression de longdesc summary (pour table)

Solution : Utiliser alt comme aujourd'hui Utiliser aria-describedby

Page 28: Html5 bonnes-pratiques

WebSocket mort ?Problème : faille dans le protocole

Page 29: Html5 bonnes-pratiques

WebSocket mort ?Problème : faille dans le protocole

A relativiser : Attaque par proxy intermédiaire HTTP est déjà concerné Ceux qui utilisaient WebSocket en prod utilisent Flash en fallback Le protocole changera, pas l'API

Page 30: Html5 bonnes-pratiques

Sécurité

Problème : html5sec.org recense 10 nouvelles attaques possibles

Solution ?

Page 31: Html5 bonnes-pratiques

Sécurité

Problème : html5sec.org recense 10 nouvelles attaques possibles

Solution : comme toujours, on filtre la sortie HTML

Page 32: Html5 bonnes-pratiques

Les formulaires

BP#35 : indication du contenu des input (placeholder)

Page 33: Html5 bonnes-pratiques

Les formulaires BP#36 : affichage des erreurs (required, type, pattern) BP#39 : caractère obligatoire des champs (required + CSS)

<input type=textrequiredpattern="[a-zA-Z]{5,10}"/>

Page 34: Html5 bonnes-pratiques

Les formulairesÇa va sans dire, mais ça va mieux en le disant :

BP#180 : validation des formulaires côté serveur

Page 35: Html5 bonnes-pratiques

URL Mode du #! (convention google) Arrivée de HTML5 history

AJAX est (trop) dans la place

Twitter, gawker ...

Page 36: Html5 bonnes-pratiques

URL twitter.com/#!/theystolemynick

Page 37: Html5 bonnes-pratiques

URLgawker.com/#!5786244

Page 38: Html5 bonnes-pratiques

URL Serveur : URL = 1 page+ Client : HTML5 history.pushState()=

Github

Questions ?

voir github.com/craigbarnes/html5-shiv

Page 39: Html5 bonnes-pratiques

Développement par couches

1. HTML + serveur (2 pages)2. CSS3. JavaScript (1 page + XHR)4. API HTML5 (LocalStorage)

Page 40: Html5 bonnes-pratiques

Server Sent Event

BP#53 : nommer les iframes (ou les éviter)

Problème : technique de long polling

Solution : Server Sent Event

Page 41: Html5 bonnes-pratiques

Sniffing BP : détecter la fonctionnalité plutôt que le navigateur Problème : implémentations bancales