HTML5

69
HTML5

description

Cours sur HTML5

Transcript of HTML5

Page 1: HTML5

HTML5

Page 2: HTML5

Pourquoi HTML5 ?

• Depuis 1999, les usages ont changés

• Applications web

• Sémantiser

Page 3: HTML5

Pour quoi HTML5 ?

• Structurer un document

• Créer des applications web

• Préparer l’avenir

Page 4: HTML5

Une nouvelle orientation

• Standardiser l’existant

• Spécification claire, dirigiste

• Repenser le contenu

Page 5: HTML5

Une nouvelle orientation

TextFlow

Bodytext

Page 6: HTML5

Doctype

• HTML5 : <!DOCTYPE html>

• XHTML5 : pas de doctype, prologue XML<?xml version="1.0" encoding="UTF-8"?><html xmlns="http://www.w3.org/1999/xhtml">

Page 7: HTML5

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

Encodage

<meta charset="UTF-8">

1.Header HTTP

2.BOM du fichier3.<meta>

Page 8: HTML5

<section>

• Groupage thématique du contenu<section id="articles">…</section>

<section id="twitter">…</section>

≠<div id="sidebar">…</div>

• Les sections ont des headings indépendants

Page 9: HTML5

<header>/<footer>

• <header> : Introduction, aide à la navigation

• <footer> : Informations sur la section (meta)

<body><header id="header">…</header>

<section id="news"><header>…</header>

<footer id="footer">…</footer></body>

<footer>…</footer></section>

Page 10: HTML5

<nav>• Section permettant de naviguer

(dans le site, dans la page, etc.)

<nav> <h1>Navigation</h1> <ul> <li><a href="\">Accueil</a></li> <li><a href="\actualites\">Actualités</a></li> … </ul></nav>

<nav id="prelude"> <p>Aller au :</p> <ul> <li><a href="#contenu">contenu</a></li> <li><a href="#recherche">moteur de recherche</a></li> … </ul></nav>

Page 11: HTML5

<article>• Section représentant un contenu indépendant

du reste du document

<section id="articles"> <article><h1>Article 1… <article><h1>Article 2…

<section id="twitter"> <article>Lorem ipsum… <article>Dolor sit amet…

Page 12: HTML5

<aside>

• Ce n’est pas une sidebar !

• Section de contenu tangentiellement relié au contenu l’entourant (?)

• Équivalent d’un encart en typographie

Page 13: HTML5

<hgroup>

• Utilisé pour regrouper des headings

<hgroup> <h1>Dr. Strangelove</h1> <h2>Or: How I Learned to Stop Worrying and Love the Bomb</h2></hgroup>

Page 14: HTML5

<time>

• Écrire des dates et heures

<p>Rendez-vous le <time datetime="2010-10-05">5 octobre</time>.</p>

<p>On se fait un ciné <time>demain</time> ?</p>

<p>Dernière connexion le <time datetime="2010-02-05T10:42:00">5 février à 10:42</time></p>

Page 16: HTML5

<audio>/<video>

• Insérer des éléments multimédia facilement

• Éviter d’avoir à utiliser un plugin

• Accessibilité, performance

Page 17: HTML5

Et d’autres…

<bdi>, <command>, <datalist>, <details>, <dialog>, <embed>,

<figcaption>, <figure>, <keygen>, <mark>, <meter>, <output>,

<progress>, <ruby>, <rp>, <rt>, <source>, <track>, <wbr>

Page 18: HTML5

Nouveaux attributs

• data-* : Attributs personnalisés

• draggable : Indique que le contenu est déplaçable

• role, aria-* : Accessibilité

• Et d’autres…

Page 19: HTML5

Balises dépréciées

• Présentation : <basefont>, <big>, <center>, <font>, <strike>, <tt>, <u>

• Mauvaise utilisabilité/accessibilité : <frame>, <frameset>, <noframes>

• Prêtant à confusion, inutile : <acronym>, <applet>, <isindex>, <dir>

• <noscript> (uniquement en XHTML5)

Page 20: HTML5

Attributs dépréciés

http://dev.w3.org/html5/html4-differences/#absent-attributes(Essentiellement des attributs à but présentationnels)

Page 21: HTML5

Balises redéfinies

• <i> : Termes techniques, expressions idiomatiques, les pensées… Habituellement mis en italique en typographie.

• <b> : Mots clés, nom de produit… Habituellement mis en gras en typographie.

• <strong> : Ajoute de l’importance

• <small> : Petites lignes

Page 22: HTML5

Attributs redéfinis

http://dev.w3.org/html5/html4-differences/#changed-attributes

Page 23: HTML5

Web Forms 2.0

Nouveaux type d’<input> :

• datetime, datetime-local, date, time, month, week• number, range• email• url• search• tel• color

Page 24: HTML5

Web Forms 2.0

Nouveaux attributs pour les éléments de formulaires :• autofocus• placeholder• required• autocomplete, min, max, pattern, step

Page 25: HTML5

Quand l’utiliser ?

• Tout de suite

• Pour des projets non-critiques

• Si vous pouvez mettre l’accessibilité de côté

Page 26: HTML5

… et IE ?Impossible de styler une balise inconnue (!)

<!--[if IE lt 9]> <script> document.createElement("header"); document.createElement("section"); </script><![endif]-->

(dans le <head>)

Page 27: HTML5

A vocabulary and associated APIs

for HTML and XHTML

Page 28: HTML5

API ?

Application Programming InterfaceEnsemble de fonctions mises à disposition

Page 29: HTML5

Web Forms 2.0Vérifier les contraintes des champs

<form> <input type="number" value="coucou" /> <input type="email" value="[email protected]" /></form>

var form = document.getElementsByTagName("form")[0], input = document.getElementsByTagName("input");

input[0].checkValidity(); // false ("coucou" n'est pas un nombre)input[1].checkValidity(); // trueform.checkValidity(); // false

Page 30: HTML5

Web Forms 2.0Vérifier les contraintes des champs

<form> <input type="number" value="1" /> <input type="email" value="[email protected]" /></form>

var form = document.getElementsByTagName("form")[0], input = document.getElementsByTagName("input");

input[0].checkValidity(); // trueinput[1].checkValidity(); // trueform.checkValidity(); // true

Page 31: HTML5

Selector API

$("#news article:nth-child(2n+1)")

$$("#news article:nth-child(2n+1)")

document.querySelectorAll("#news article:nth-child(2n+1)")

=

=

Page 32: HTML5

• querySelector() => Element || null

• querySelectorAll() => NodeList

Selector APIRécupérer des éléments

Page 33: HTML5

Selector APIfeature detection

!!document.querySelector

var $ = document.querySelectorAll || (function(selector) { // Code bien lourd (ou sizzle)});

Page 35: HTML5

Canvasfeature detection

!!document.createElement("canvas").getContext

Page 37: HTML5

WebGLfeature detection

var webgl = function() { var canvas = document.createElement("canvas");

try { if (canvas.getContext("webgl")) return true; } catch(e) {}

try { if (canvas.getContext("experimental-webgl")) return true; } catch(e) {}

return false;}();

Page 38: HTML5

Media APIManipuler des éléments multimédia

• play()• pause()• canPlayType()

• controls• paused• volume• currentTime

• error• networkState

Page 39: HTML5

Jouons avec <video>

<object width="720" height="404" type="application/x-shockwave-flash" data="player.swf?file=video.flv"> <param name="movie" value="player.swf?file=video.flv" /></object>

<video width="720" height="404" src="video" controls></video>

Page 40: HTML5

Quel format ?

• Firefox et Opéra : Theora (OGG)

• Safari : H.264

• Le petit qui s’incruste : VP8 (WebM)(Chrome, Firefox, Opera, IE)

Page 41: HTML5

• Pour Theora : Extension Firefogg, ffmpeg2theora (pour les courageux)

• Pour H.264 : HandBrake, autres…

• Pour WebM : ffmpeg

Quels outils d’encodage ?

Page 42: HTML5

Jouons encore<video width="720" height="404" controls> <source type="video/mp4" src="video.mp4" /> <source type="video/ogg" src="video.ogg" /></video>

<video width="720" height="404" controls> <source type="video/mp4" src="video.mp4" /> <source type="video/ogg" src="video.ogg" />

<object width="720" height="404" type="application/x-shockwave-flash" data="player.swf?file=video.mp4"> <param name="movie" value="player.swf?file=video.mp4" /> </object></video>

Page 43: HTML5

Jouons avec l’API<video id="video" width="720" height="404" controls> <source type="video/ogg" src="videos/demoreel-2009.ogg"> <source type="video/mp4" src="videos/demoreel-2009.mp4"></video>

<div> <button id="play">Lire</button> <button id="stop">Stop</button></div>

<script> var video = document.getElementById("video"), play = document.getElementById("play"), stop = document.getElementById("stop");

video.controls = false; // Désactive les controles par défaut play.addEventListener("click", function() { video.play() }, false); stop.addEventListener("click", function() { video.pause() }, false);</script>

Page 45: HTML5

Media APIfeature detection

var video = document.createElement("video"), support = !!video.canPlayType, formats = (support) ? { mp4: video.canPlayType("video/mp4"), ogg: video.canPlayType("video/ogg"), webm: video.canPlayType("video/webm") } : null;

Page 46: HTML5

Media APIfeature detection

var video = document.createElement("video"), support = !!video.canPlayType, formats = (support) ? { mp4: video.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"'), ogg: video.canPlayType('video/ogg; codecs="theora"'), webm: video.canPlayType('video/webm; codecs="vp8, vorbis"') } : null;

Page 48: HTML5

Media APIfeature detection

var audio = document.createElement("audio"), support = !!audio.canPlayType, formats = (support) ? { mp3: audio.canPlayType("audio/mpeg"), ogg: audio.canPlayType("audio/ogg"), aac: audio.canPlayType("audio/mp4") } : null;

Page 49: HTML5

Media APIfeature detection

var audio = document.createElement("audio"), support = !!audio.canPlayType, formats = (support) ? { mp3: audio.canPlayType("audio/mpeg;"), ogg: audio.canPlayType('audio/ogg; codecs="vorbis"'), aac: audio.canPlayType('audio/mp4; codecs="mp4a.40.2"') } : null;

Page 51: HTML5

Offline API

• Cache Manifest

• Base de donnée SQL (!)

Mettre en cache

Page 52: HTML5

Offline APIVérifier la connectivité

navigator.onLine

window.addEventListener("online",function() { console.log("ONLINE"); },false

);

window.addEventListener("offline",function() { console.log("OFFLINE"); },false

);

Page 54: HTML5

Web Storage

• Association clé ↔ valeur

• Deux storages :

• session (supprimé à la fermeture de l’onglet)

• local (conservé, comme les cookies)

Cookies sous stéroïdes

Page 55: HTML5

Web StorageCookies sous stéroïdes

window.sessionStorage.setItem("test", "youpi");

// Actualisez

window.sessionStorage.getItem("test"); // youpi

// Fermez et ré-ouvrez l’onglet

window.sessionStorage.getItem("test"); // null

Page 56: HTML5

Web Storagefeature detection

try { return ('sessionStorage' in window) && window.localStorage !== null;} catch(e) { return false;}

Page 57: HTML5

• openDatabase()• transaction()• executeSQL()

Web SQL DatabaseWeb Storage sous stéroïdes

SQL !

Page 58: HTML5

WebSocket APIOuvrir une connexion TCP

TCP !

Temps réel !!!

Page 59: HTML5

Drag’n’drop

• Navigateur → OS

• OS → Navigateur

• Éléments de la page

• UndoManager

Déplacer des éléments, déposer des fichiers

Page 63: HTML5

Geolocation APIGéolocaliser l’utilisateur

• getCurrentPosition()• watchPosition()• clearWatch()

Page 65: HTML5

Et d’autres !

Page 66: HTML5

Ressources (W3C)

• HTML5: The Markup Language http://dev.w3.org/html5/markup/

• HTML5 Author Edition http://dev.w3.org/html5/spec-author-view/

• Diff. http://dev.w3.org/html5/html4-differences/

• Spec. http://dev.w3.org/html5/spec/Overview.html

Page 67: HTML5

Autres ressources

• Dive into HTML5 http://diveintohtml5.org

• Detecting HTML5 featureshttp://diveintohtml5.org/detect.html

• Peeks, Poke and Pointers (cheats sheet)http://diveintohtml5.org/peeks-pokes-and-pointers.html

• HTML5 Doctor http://html5doctor.com

• HTML5 Gallery http://html5gallery.com(mais attention …)

Page 68: HTML5

Autres ressources

• html5shiv http://code.google.com/p/html5shiv/

• When can I use… http://caniuse.com

• HTML5 & CSS3 Supporthttp://findmebyip.com/litmus