Commençons à travailler en HTML5
Commençons à travailler en HTML5: Table des matières
- Rappel – Historique du HTML
- Stratégies d'adoption du HTML5
- Qu’est-ce que le HTML5 ? Le marketing et la réalité
- Les Doctypes et les sérialisations
- Nouveau dans HTML, mais « ancien » dans les navigateurs
- Les nouveaux éléments sémantiques
- Les éléments médias
- Graphisme Web
- Fonctionnement hors-ligne et stockage client
- Web Forms
- Extensions distribuées et Web sémantique
- Éléments interactifs
- Géolocalisation et plus !
- Un mot sur l’accessibilité
- Devons-nous commencer à utiliser HTML5 dans nos projets ?
- Pour en savoir plus : Ressources
- Créer une application Web en HTML5 : Démo et pratique
La petite histoire du HTML
- 1991:
- HTML est né
- 1993:
- Mosaic: le premier navigateur graphique
- 1995:
- HTML 2, Javascript, Netscape 2.0 beta
- 1996:
- CSS 1, Netscape 3, Internet Explorer 3
- 1997:
- HTML 3.2, Netscape 4, Internet Explorer 4
- 1998:
- HTML 4, CSS 2
- 1999:
- Internet Explorer 5
La petite histoire du HTML
- 2000:
- XHTML 1, Internet Explorer 5.5
- 2001
- La fin de la guerre des navigateurs: Internet Explorer 6
- 2002-2007
- Les années des évangéliste Web : N'utilisez pas les tables pour le visuel s.v.p.
- 2004
- WHATWG (Initiative Web Forms 2.0 et Web Applications 1.0)
- 2005
- Ajax!
- 2007
- CSS 2.1
- 2009-2011
- HTML5, Firefox 3 + Internet Explorer 9, Safari 4+, Chrome +, CSS 3
Pourquoi HTML5 ?
- Avancements technologiques
- Échec de la XMLisation des interfaces Web
- WHATWG et W3C
- Standardisation de pratiques courantes
Les compétiteurs sur le marché
- Flash
- Silverlight
- Application native (mobile)
- JavaFx
Technologies et courants déstabilisateurs
- Téléphones intelligents
- Tablettes
- Magasins d'application
- Géolocalisation
- Web Social
- On ne se connecte plus à l'Internet, on l'amène avec nous
- Méthodologies Agiles
- Casual Gaming
- Touch base computing
- Cloud computing
Les avantages d’utiliser HTML5
- Plate forme ouverte
- Compatibilité pour le futur et pour le passé
- Intéropérabilité
- Meilleure dégradation progressive.
- Plus de détails dans la spécification signifient des implémentations plus prévisibles et interopérables.
- Un des buts de la spécification HTML5 est de représenter la réalité, par la théorie
- Simplicité (au moins au commencement)
- Écosystème mature (librairie javascript, etc.)
- Coûts ?
- Bien connu
Les risques d’utiliser HTML5
- Standard nom complété (instabilité ? n'est pas une recommandation du W3C)
- La compatibilité entre navigateurs est un problème moins grand, mais un problème quand même
- Accessibilité incertaine
- Sécurité (ex: Web worker)
- Moins de bonnes pratiques sont reconnues que le HTML4
- Plus bas commun dénominateur ? (moins en moins vrai)
Quelle sera votre stratégie ?
- Foncer tête baissée
- Attendre que le train passe
- Chosir une autre technologies / niche
- Ça dépends ?!
- Impact sur le SEO
Quelques conseils
- Bien réfléchir au type de projet / besoin. Mobile ? Intranet ? Produit ?
- Attention à l'accessibilité (SGQRI-0008)
Que comprends HTML5 ? Marketing vs réalité
- Définition réelle du HTML5 (Traduction libre de la spécification) :
- Un vocabulaire et les interfaces de programmation d'application associés pour HTML et XHTML
- Définition marketing
- Toutes les nouvelles technologies de front-end Web populaires du jour, incluant CSS3, EmcaScript 5, Géolocalisation, SVG, WebGL, et j'en passe
Un nom a été proposé pour cela par Bruce Lawson : NEWT (New And Exciting Web Technologies)
Remarquez qu'avec la saga du logo HTML5, même le W3C est tombé dans le panneau...
Évolution ou révolution?
- Est-ce que les technologies ouvertes et libres finiront par l'emporter ?
- Est-ce que tout ce marketing en vaut la peine ?
- Est-ce la fin de Flash ?
- Qu'en est-il de Silverlight, JavaFX et Flex ?
- Le Web mobile, les applications bureautique, l'informatique par nuage et le Web social
Mais qu'est-ce que HTML5 ?
Plus que des balises ?
Quelques principes derrière le HTML5
- Comportement bien défini. Représente la réalité (pouvoir de veto de revendeurs de navigateurs), pas la théorie.
- Auteur > Développeur > Implémentateur
- Pave the Cowpath (Suivre le chemin laissé par les vaches)
- Plus de détails dans la spécification signifie des implémentations plus prévisibles et intéropérables.
- Compatibilité pour le futur et l'intéropérabilité. Meilleure dégradation progressive.
- Politique : W3C et WHATWG
Exemples de ce qui a été déjà fait
- Calendrier de Noël 2010 en HTML5 (qui lie vers plusieurs exemples) [en]
- Notation de musique en HTML5 [en]
- Gallerie de sites en HTML5 [en]
- Démos de fonctions HTML5
- Site interactif du groupe de musique Arcade Fire (the wilderness downtown) [en]
- Publicité de Nike en HTML5 [en]
- Logiciel de dessin Muro de DeviantArt [en]
- Démonstration rotation de vidéo [en]
La sérialisation HTML5
text/html- HTML5
application/xml+xhtml- XHTML5
- XHTML 2 n'est peut-être plus maintenu, mais XHTML continue de survivre grâce à la sérialisation XHTML5
- Plus d'appendice C (on ne peut plus envoyer du XHTML comme étant du
text/html) - HTML accèpte maintenant la syntaxe XHTML pour éléments qui se ferment eux-mêmes (
<br />) pour faciliter la transition à partir de XHTML 1.x - XHTML ne peut pas avoir la balise
<noscript>, document.writeen javascript, etc - Les documents polyglottes représentent un document identique peu importe la sérialisation
Style de codages
- Aucun style n'est imposé par le langage (contrairement à XHTML 1.0 Strict)
- L'important c'est d'être cohérent (mais dépend aussi des outils d'intégration)
- On peut écrire comme du XHTML 1.0 Strict si nous le voulons (Polyglotte)
- Des outils seront (sont ?) disponibles pour vérifier le style
Doctype HTML5
<!DOCTYPE html>
Il est là seulement pour la rétrocompatibilité et faire passer les navigateur en mode standard plutôt qu'en mode Quirk
N'est pas nécessaire pour la sérialisation XHTML
Nouveau dans HTML5, mais existait / fonctionnait avant dans les navigateurs
- Utilisation de notation XML pour les éléments se refermant automatiquement (
img, br) - Liens sur des éléments block
embed!<meta charset="UTF-8">- Le doctype html5
- l'attribut type sur script et style n'est pas nécessaire
- innerHTML
Les nouveaux éléments sémantiques
- Structure
- <section>, <article>, <aside>, <figure>
- Texte
- <time>, <ruby>, <mark>, <i> , <b>
Facilite la maintenance, la réutilisation, l'accessibilité et le SEO (optimisation moteur de recherche), etc.
<section>
- <section> n'est pas <div>
- Séparer en sections un document ou une application
- Moins générique que <div>, mais plus générique que <article>, <nav> ou <aside>
<section>
<h1> Section 1 </h1>
<section>
<h1> Section 1.1 </h1>
<section>
<h1> Section 1.1.1 </h1>
</section>
</section>
</section>
<section>
<h1> Section 2 </h1>
<section>
<h1> Section 2.1 </h1>
<p>Lorem Ipsum Dolor Sit Amet.<p>
</section>
<section>
<h1> Section 2.2 </h1>
<p>Lorem Ipsum Dolor Sit Amet.<p>
</section>
</section>
<article>
- Contenu autonome
- Peut être distribué de façon indépendante
- Réutilisable
- Ex : Article d'un journal, billet ou commentaire d'un blogue, widget intéractif
<article>
<h1> titre de l'article </h1>
<section>
<h1> Section 1 </h1>
<section>
<h1> Section 1.1 </h1>
</section>
</section>
</article>
<nav>
- Section qui contient des liens de navigation
- Seulement des liens de navigation principaux
- Ne pas confondre avec footer, header ou aside
<nav>
<ul>
<li><a href="#">Accueil</a></li>
<li><a href="#">FAQ</a></li>
<li><a href="#">À propos</a></li>
<li><a href="#">Nos produits</a></li>
</ul>
</nav>
<header>
- Regroupement servant à l'introduction ou à la navigation
- Peut inclure les éléments h1 à h6
- Table des matières
- Logos, formulaires de recherches, etc
- Metadonnées relatives au premier ancêtre de type section parent de <header>
<header>
<h1><img src="logo.png" alt="Notre entreprise"></h1>
<ul>
<li><a href="#">Accueil</a></li>
<li><a href="#">FAQ</a></li>
<li><a href="#">À propos</a></li>
<li><a href="#">Nos produits</a></li>
</ul>
<form action="search.do">
<input type="search" placeholder="Recherche" value="Recherche">
<input type="submit" value="Allez!">
</form>
</header>
<footer>
- Pied de page Footer pour le premier ancêtre parent de type section
- Peut contenir l'information sur l'auteur, des liens relatifs à la section, l'information sur les droits d'auteurs
- Liens vers la carte du site, le formulaire de contact, etc.
<footer>
<p>Cet article a été écrit par le 14e docteur
Copyright © Theta Sigma Corp. La plupart des droits réserveés</p>
<ul>
<li><a href="#">Accueil</a></li>
<li><a href="#">FAQ</a></li>
<li><a href="#">À propos</a></li>
<li><a href="#">Nos produits</a></li>
</ul>
<p>Partagez avec vos amis : </p>
<ul>
<li><a href="#">Twitter</a></li>
<li><a href="#">Facebook</a></li>
<li><a href="#">Friendfeed</a></li>
<li><a href="#">Peu importe</a></li>
</ul>
</footer>
<hgroup>
- Pour regrouper un titre avec un sous-titre, slogan etc.
- Seulement le plus haut niveau de titre est gardé dans le schéma du document
<header>
<hgroup>
<h1><img src="logo.png" alt="Notre entreprise"></h1>
<h2>Notre slogan le plus convainquant !</h2>
<hgroup>
<ul>
<li><a href="#">Accueil</a></li>
<li><a href="#">FAQ</a></li>
<li><a href="#">À propos</a></li>
<li><a href="#">Nos produits</a></li>
</ul>
<form action="search.do">
<input type="search" placeholder="Recherche" value="Recherche">
<input type="submit" value="Allez!">
</form>
</header>
<aside>
- Section de contenu qui est tangentiellement reliée au contenu parent de type section
- Peut être un glossaire, une citation de l'article ou section parent
- Liste de blogues lus, liens relatifs pour une page ou un site. Notez que <aside> contient des liens relatifs et que <nav> contient les liens principaux de navigation.
- N'est pas fait pour la publicité, à moins que celle-ci soit reliée au contenu
- Le contenu de <aside> ne doit pas être nécessaire à la compréhension de l'article, de la section ou de la page
<article>
<h1>Titre de l'article</h1>
<section>
<h1>Section 1</h1>
</section>
<aside>
<h1>Glossaire</h1>
<dl>
<dt>Tournevis sonique</dt>
<dd>Lorem Ipsum Dolor Sit Amet</dd>
<dt>La proclamation de l'ombre</dt>
<dd>Lorem ipsum dolor sit amet</dd>
</dl>
</aside>
</article>
<figure> et <figcaption>
- Contenu unitaire et autonome
- Peut contenir une légende / sous-titre (<figcaption>)
- Est référencé dans le document
- Peut être retiré du flux du document sans l'affecter
- Peut servir à grouper des images avec une légende
- Peut servir pour les exemples de code
<figure>
<img src="vacation1.png" alt="Famille à la plage">
<img src="vacation2.png" alt="Famille dans la forêt">
<img src="vacation3.png" alt="Famille dans le parc d'amusement">
<figcaption>
Nos meilleures photos de vacances
<figcaption>
</figure>
<time>
- Représente un point dans le temps (horloge de 24 heures)
- Format : Calendrier grégorien proleptique
- Internationalisation et accessibilité
- L'attribut datetime, le texte à l'intérieur de la balise est arbritaire
- L'attribut pubdate peut être présent lorsque la balise est à l'intérieur de la balise <article>. Elle va alors signifier la date de publication de l'article
<article>
<header>
<h1> Titre de l'article </h1>
<p>Publié le :
<time pubdate datetime="2010-05-27">Le 27 mai 2010</time></p>
<header>
<section>
<h1> Section 1 </h1>
<section>
<h1> Section 1.1 </h1>
</section>
</section>
</article>
<mark>
- Ressort les éléments d'un document qui sont dynamiquement en rapport avec l'activité actuelle de l'utilisateur
- ex: termes recherchés, derniers changements d'un document
<p>Vous avez recherché le terme <mark>test</mark> dans ce document : </p>
<section>
<h1> Titre de section </h1>
Cette page est un <mark>test</mark>.
Puisque c'est bien mieux de faire un <mark>test</mark>
avant d'aller en production!
</section>
Nouvelles signification pour <i>, <b>, <small> et <hr>
- <i>:
- voix alternative (ex: mots d'une différente langue pour la prononciation, termes techniques)
- <b>:
- texte mis en valeur par rapport au reste du texte sans pourtant lui donner plus d'importance
(ex: mots clé, nom de produits) - <small>:
- commentaires et texte en petits caractères
- <hr>:
- séparation par thème au niveau des paragraphes
<ruby>, <rt> and <rp>
Guides de prononciation et annotations utilisés en chinois, japonais et en cooréen
Éléments médias
Plus de plugiciels ! Yé !
Vraiment ? Pour de vrai ?Il faut lire les petits caractères par contre...
<video>
- Intégrer une vidéo dans vos pages sans recourrir à un plugiciel
- attribut autoplay : jouer une vidéo dès que la page est téléchargée
- attribute preload : télécharger la vidéo en arrière plan (valeurs : none, metadata, auto)
- attribut loop : si spécifié, la vidéo recommence après qu'elle soit terminée
- attribut poster : lien vers une image à présenter pendant que la vidéo se charge ou si elle n'est pas disponible
- l'élément <source> (avec l'attribut src) : lien vers le fichier de la vidéo
<video>
La bande annonce de Big Buck Bunny (en anglais)
<video>
Suite...
- attribut control : si présent, va activer les contrôles de la vidéo par défaut
- sour-titres, légendes et accessibilité : TTML ou WebSRT, l'élément <track> avec l'attribut kind (avec les valeurs : subtitles, captions, descriptions, chapters, metadata)
- Si l'élément n'est pas disponible: vous pouvez utiliser l'élément <object> (avec Flash ou Silverlight) après les éléments <source>
- API nos propres contrôles : play(), pause(), playbackrate, currentTime, ended, pause, volume, muted, etc.
- canPlayType() : pour vérifier si le navigateur peut jouer un format vidéo ou conteneur fichier
<article id="bigbuckbunny">
<h1>Bande annonce de <i lang="en">Big Buck Bunny</i> (en anglais) avec l'élément video </h1>
<video controls>
<source src="http://mirror.cessen.com/blender.org/peach/trailer/trailer_iphone.m4v">
<source src="http://download.blender.org/peach/trailer/trailer_400p.ogg">
</video>
<footer>
<p>(c) copyright Blender Foundation |
<a href="http://www.bigbuckbunny.org">www.bigbuckbunny.org</a></p>
</footer>
</article>
<audio>
- Intégrer de l'audio dans vos pages sans recourir à un plugiciel
- attribut control : si présent, va activer les contrôles par défaut de l'audio
- Si l'élément n'est pas disponible: vous pouvez utiliser l'élément <object> (avec Flash ou Silverlight) après les éléments <source> (ou encore un iframe avec le fichier audio)
- API nos propres contrôles : play(), pause(), playbackrate, currentTime, ended, pause, volume, muted, etc.
- canPlayType(): pour vérifier si le navigateur peut jouer un format audio ou conteneur fichier
J'ai déjà essayé de faire de la musique et j'ai échoué!
<article>
<h1>J'ai déjà essayé de faire de la musique et j'ai échoué!</h1>
<audio controls>
<source src="..media/minedenuit.ogg">
</audio>
<footer>© Copyright Moi 1997</footer>
</article>
Le débat des codecs
- Des brevets et des hommes...
- H.264: MPEG-LA, pris en charge par Internet Explorer 9, Safari 3+ et Chrome
- ogg theora: Xiph.org Foundation, pris en charge par Firefox 3.5+, Opera 10.5 et Chrome 4
- VP8 - WebM, Google, va être pris en charge par Firefox, Opera, Chrome et Internet Explorer 9 (doit être installé séparément)
Et le DRM ?
Apple, Google, Adobe, Microsoft, Opera et Mozilla
Application de type App store, le Web ouvert et quelque chose entre les deux
Graphisme sur le Web
L'élément canvas et l'API 2D
- attributs width et height
- API : getContext
- Détection avec Modernizr
- L'état du Canvas (
save()etrestore()) moveTo(); lineto(); beginPath(); closePath(); arcTo();etc..stroke(); fill(); rect(); arc() clip();- Matrice de transformation
<canvas id="myCanvas" width="400" height="120">
</canvas>
<script type="text/javascript">
if (Modernizr.canvas) {
var canvasCtx = document.getElementById("myCanvas").getContext("2d");
canvasCtx.fillStyle = "rgb(0,100,0)";
canvasCtx.translate(150, 50);
canvasCtx.rotate(45 * Math.PI / 180);
canvasCtx.fillRect(0,0,50,50);
}
</script>
SVG dans le HTML
- Graphisme vectoriel
- <circle>, <text>,<rect>, etc
- Possible avec application/xml+xhtml sérialisation XHTML pour intégration en ligne; en javascript (pour l'instant) en text/html
- Internet Explorer 9 le prend en charge !!!!
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" version="1.1" xmlns="http://www.w3.org/2000/svg">
<g transform="translate(50, 0)">
<g transform="rotate(45)">
<rect width="50" height="50" style="fill:rgb(0,100,0);"/>
</g>
</g>
</svg>
Stockage local et hors ligne
- Stockage de session
- Accessible lors d'une même session dans une fenêtre ou un onglet/dd>
- sessionStorage.setItem(key, stringValue); //sauvegarder un item dans le stockage, la valeur doit être une chaîne de caractère, alors sérialiser vos objets avec JSON
- sessionStorage.getItem(key); // rechercher un item dans le stockage , la clé est une chaîne de caractères
- sessionStorage.removeItem(key); // retirer un item du stockage
- Stockage local
- Accessible pour le domaine courant
- localStorage.setItem(key, stringValue);
- localStorage.getItem(key);
- localStorage.removeItem(key);
- IndexedDB / Web SQL Database
- Base de données disponible dans le navigateur (avec SQL et transactions)
Cache hors ligne pour les applications
- attribut manifest pour la balise <html>
- est un lien vers un fichier manifest envoyé avec le type / MIME text/cache-manifest
- le fichier spécifie les resources à garder et à ne pas garder en mémoire, ainsi que le ressources pouvant être remplacées par d'autres lors d'un fonctionnement hors ligne
CACHE MANIFEST
/images/spacer.gif
NETWORK:
ajaxresponder.cgi
FALLBACK
dynamicimage.cgi staticimage.png
Web Forms / formulaires Web : Nouveaux types pour l'élément input
<progress>
Représente la progression d'une tâche (ex: formulaire à plusieurs pages, appels ajax multiples)
<section>
<h1>% du formulaire de complété </h1>
<p><progress value="10" max="100">10%</progress></p>
</section>
<meter>
- Représente une mesure à partir d'une plage de valeurs
- attributs : min, max, value, optimal
- Exemple :
50 degré celsius, cette piscine est trop froide!
<meter min="-100" max="100" value="50">50 degré celsius, cette piscine est trop froide!</meter>
Web sémantique et extensibilité distribuée
Microdata
- Ajouter des annotations aux éléments HTML en utilisant des vocabulaires réutilisables
- La portée des annotations est définie par l'attribut itemscope
- L'espace de nom (namespace) est spécifié par l'attribut itemtype
- La clé est spécifiée par l'attribut itemprop
- La valeur va dépendre de l'élément HTML (href, src ou le texte englobé par l'élément)
- N'est pas réutilisable dans les langages autre que HTML
<section itemscope itemtype="http://programmeurspolyglottes.net/sociallinks>
<h1>Liens vers les profils de médias sociaux</h1>
<section>
<h1 itemprop="name">Benoit Piette</h1>
<ul>
<li><a itemprop="twitter" href="http://twitter.com/benoitpiette">Twitter</a>
<li><a itemprop="identi.ca" href="http://identi.ca/benoitpiette">Identi.ca</a>
<li><a itemprop="facebook" href="http://www.facebook.com/benoitpiette">Facebook</a>
<li><a itemprop="linkedin"
href="http://ca.linkedin.com/pub/benoit-piette/6/2aa/571">LinkedIn</a>
</ul>
</section>
</section>
HTML5 + RDFa
- Web sémantique, plus simple que RDF en XML
- Basé sur sujet, objet et prédicat
- Utilise les espaces de noms XML donc problématique en text/html
- Utilise l'attribut property pour spécifier l'utilisation du texte à l'intérieur de l'élément HTML
- Utilise l'attribut rel pour spécifier l'utilisation de attribut href
- Utilisé par Facebook Opengraph et Drupal
<section typeof="sl:Profiles" xmlns:sl="http://programmeurspolyglottes.net/sociallinks>
<h1>Liens vers les profils de médias sociaux</h1>
<section>
<h1 property="sl:name">Benoit Piette</h1&>
<ul>
<li><a rel="sl:twitter" href="http://twitter.com/benoitpiette">Twitter</a>
<li><a rel="sl:identi.ca" href="http://identi.ca/benoitpiette">Identi.ca</a>
<li><a rel="sl:facebook" href="http://www.facebook.com/benoitpiette">Facebook</a>
<li><a rel="sl:linkedin"
href="http://ca.linkedin.com/pub/benoit-piette/6/2aa/571">LinkedIn</a>
</ul>
</section>
</section>
Attributs data-
- Données spécifiques à une application Web, métadonnées internes (les données ne sont pas faites pour être réutilisables par d'autres applications)
- Peut être spécifié sur n'importe quel élément HTML
- element.dataset n'est pas encore pris en charge par les navigateurs, mais vous pouvez accéder à la valeur de l'attribut par la méthode
element.getAttribute("data-...")
<p>Le jeu de la courte paille?</p>
<ul>
<li data-length="12">Le brin d'herbe de Ben
<li data-length="5">Le brin d'herbe de Dave
<li data-length="10">le brin d'herbe de Ken
</ul>
Éléments interactifs
<details> et <summary>
- Composant servant à dévoiler une partie sous-jacente du contenu (cliquer ici pour en savoir plus)
- Attribut open: Spécifie si le détail est montré à l'utilisateur
- l'élément
<summary>est la partie qui est toujours visible - le reste du contenu à l'intérieur de l'élément
<details>n'est pas montré par défaut
<details>
<summary>Plus d'info:</summary>
<p>L'information plus spécifique</p>
</details>
<command> et <menu>
L'élément <command> définit un composant d'activation / commande dans une application Web, similaire à un bouton ou un lien, mais spécifique à la partie client d'une application (n'envoie pas le résultat d'un formulaire au serveur et n'accède pas une ressource par url)
L'élément <menu> définit une liste de commandes, comme une barre d'outils, un menu contextuel ou une liste d'actions. Ne pas confondre avec <nav> (qui englobe des liens)
<menu type="toolbar">
<command type="command" label="Nouveau" icon="nouveau.png">
<command type="command" label="Sauvegarder" icon="sauve.png">
<command type="command" label="Ouvrir" icon="ouvre.png">
</menu>
Géolocalisation
- Très utile pour les application mobiles
- Ne fait pas véritablement partie de HTML5
<script type="text/javascript">
function showCoords(position) {
document.getElementById("coordtest").innerHTML =
("<p>Coords: " + position.coords.latitude +
", " + position.coords.longitude + "</p>");
}
if (navigator.geolocation != undefined) {
navigator.geolocation.getCurrentPosition(showCoords);
} else {
document.getElementById("coordtest").innerHTML =
"<p>Geolocation not available</p>";
}
</script>
Web Sockets
- Ne fait pas véritablement partie de HTML5
- Communications bidirectionnelles (pas HTTP)
- ws://example.com:12010/communication
- ex:
var socket = new WebSocket("ws://example.com:12010/communication"); - Pris en charge par Chrome et Safari, en option pour Firefox 4 et Opera 11 (pour des raisons de sécurité)
Web Workers
- Permet de faire rouler certaines fonctions Javascript en parallèle (sur un autre thread)
- Un Web worker n'a pas accès au DOM, seulement à
setInterval,setTimeoutetXMLHTTPRequest - Le DOM n'est pas thread safe
- Utile pour des calculs intensifs et des longs
XMLHTTPRequest
var myWorker = new Worker("worker-test.js");
myWorker.onmessage = function(evt) {
document.getElementById("myID").innerHTML = evt.data;
}
myWorker.postMessage(500);
From worker-test.js :
onmessage = function (evt) {
// faire qqch d'intensif avec evt.data
// envoie un message avec les résultats
postMessage(result);
}
Glisser-déposer et l'API File
- Événements dragstart, dragover, dragenter, dragleave et drop
- Doit annuler l'événement par défaut sur l'élément
- Les images peuvent être glissées par défaut (mais non déposées)
- Pour les autres éléments, il faut ajouter l'attrribut
draggable="true" (et / ou ajouter manuellement l'événement dragstart) - File API, accéder à des fichiers locaux à partir d'un champ de formulaire de type fichier ou lorsqu'un fichier est glissé-déposé sur la page Web
- Fichier en format texte ou binaire (images)
Accessibilité et WAI-ARIA
- Est-ce que HTML5 a une mauvaise accessibilité ?
- Les attributs summary, alt et longdesc ont eu leur lot de discussions pour la spécification
- L'objectif de HTML5 est de rendre le plus de choses accessibles sans modifications
- WAI-ARIA: Accessible Rich Internet Application Suite : rendre les applications Web complexes plus accessibles
- La prise en charge par les outils d'adaptation est très relative
roles ARIA
- Plusieurs éléments HTML5 possèdent un rôle ARIA (Les éléments de formulaire
input, les éléments sémantiques commeheaderounav) - Certains peuvent être surchargés (
<a>) - Certains en n'ont pas (
<div>;,<span>) - La prise en charge par les outils d'adaptation s'en vient
Quelques exemples de rôles ARIA :
main- définit le contenu principal du site
navigation- définit en ensemble de liens
treeettreeitem- définit des arbres (ex: le panneau gauche d'une interface de type explorer Windows)
<section role="main">
Lorem ipsum dolor sit amet
</section>
États et propriétés ARIA
Les états et propriétes ARIA rendent disponible de l'information spécifique sur un objet (États et propriétés WAI-ARIA prises en charge)
Voici quelques exemples d'états et propriétés
aria-describedby- Spécifie des détails additionnels ou une description à un élément
aria-labeledby- Rend disponible de l'informtation sur ce que fait l'élément
aria-live- Spécifie qu'un élément peut être mis à jour (ex: par AJAX
aria-grabbed- Lorsque vrai, signifie qu'un élément a été attrapé (lors d'un glisser-déposer, sa valeur sera fausse lorsque déposé)
<!-- Le div est mis à jour par un script / ajax et les outils d'adaptation
devraient annoncer la mise à jour -->
<div id="updatedInfo" aria-live="polite">
</div>
Autres éléments d'intérêt
- Plus de versions?
- l'attribut
hidden srcdocetsandboxembed! Vous avez bien lu.- Liens autour d'éléments de type block
- Détection de nouvelles fonctionnalités : modernizr
- bidoullage
createElementpour la prise en charge des éléments sémantiques pour Internet Explorer - API DOM :
document.querySelector, querySelectorAll(trouve les éléments via les sélecteurs CSS),document.getElementsByClassName - attribut
contenteditable: pour créer un éditeur de texte riche en ligne (existe depuis Internet Explore 5.5 ?) - Cross window messaging (postMessage and message event)
- WebGL 3D!
- Experimental validation with http://validator.nu
- HTML5shiv, Modernizr
Un moment de silence pour les disparus dans le HTML
- basefont
- big
- center
- font
- strike
- tt
- u
- frame
- frameset
- noframes
- acronym
- applet
- isindex
- dir
Un mot sur le CSS3
- Des coins ronds !!!
padding:5px;
width:50%;
-webkit-border-radius: 10px;
-moz-border-radius: 10px;
border-radius:10px;- Ombrage pour le texte
text-shadow: 4px 4px 4px #555;- Polices Web
@font-face {font-family: 'FuroreRegular'; src: url('Furore-webfont.eot');}- Sélecteurs
- Sélecteur par attributs
([attribute^=value], [attribute$=value], [attribute*=value]) - Ombrage de bloc
box-shadow: 15px 15px 15px #555; + (don't forget prefix for browser -webkit, -moz, etc)
Colonnes multiples, contenu généré, overflow-x, overflow-y
Extensions, futur
- Firefox : Firefox audio API extension
- Extensions Internet Explorer: (Website Pin)
- Extensions Webkit: Touch gesture
- Standard pour l'utilisation de l'accéléromètre
Qu'est-ce que je peux utiliser dès maintenant ?
- Sur tous les navigateurs qui possèdent une part de marché significative
- Ce qui se dégrade bien (coins ronds CSS), ARIA, attributs data-, liens de niveau blocs, doctype, notation de type xhtml
- Internet Explorer 8 et plus
- Stockage local, un peu plus de CSS
- Internet Explorer 9+
- CSS3, SVG et plus
- Web mobile basé Webkit (derniers Android, iOS)
- Stockage local, canvas, géolocalisation
- Sur votre blogue technique
- Éléments sémantiques
- Si votre application demande une nouvelle caractéristique de HTML5?
- Utilisez des PolyFills
Pour continuer
- HTML5Doctor [en]: A été une grande inspiration pour le contenu de cette présentation. Merci aux docteurs! Une traduction française (DocteurHTML5) a été débutée ici.
- HTML5Demos.com [en]: Une autre bonne ressource pour du code.
- Dive Into HTML5 [en]: Très bon livre en ligne.
- Matrice de compatibilité et de prise en charge
- HTML5, ARIA Roles, and Screen Readers in May 2010 [en]
- Différences entre HTML5 et HTML 4.01 [en]
- www.css3.info [en]: Ressource très utilse pour le CSS3
- W3Qc: Les standards Web au Québec!
Commentaires? Questions?
Merci!
C'est le temps d'une démo: Canvas, Contenteditable, Web Worker, getElementsByClassName et stockage local