HTML 5

Apports HTML5

Structure

<!DOCTYPE html>
<html lang="fr">
  <head>
	<meta charset="utf-8">
  </head>
</html>
L'absence de DOCTYPE signifie pour Internet Explorer que la page est conçue pour les anciens navigateurs. Parfois ça change le rendu!

Compatibilité ascendante

La part de marché des navigateurs qui ne supportent pas HTML5 diminue fortement. IE8: 10%, IE7-: <2% début 2013. On peut tester la compatibilité d'une fonction sur http://caniuse.com/

Démos HTML avec Pour que le DOM reconnaisse et traite les balises HTML5 (nav, video,..), il faut inclure conditionnellement un script spécifique pour les versions antérieures à IE9. On peut utiliser pour celà la balise: <!--[if lt IE 9]><script src="../lib/html5-ie.js"></script><![endif]--> ou <!--[if lte IE 8]><script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]--> Le code JavaScript du fichier html5-ie.js étant celui-ci :

document.createElement("header"); 
document.createElement("footer"); 
document.createElement("section"); 
document.createElement("aside"); 
document.createElement("nav"); 
document.createElement("article"); 
document.createElement("figure"); 
document.createElement("figcaption"); 
document.createElement("hgroup"); 
document.createElement("time"); 

Application pour iPhone, iPad, iPod ou Android

Le HTML5 permet de développer des applications. Voir la page: développer pour des clients mobiles

Les nouvelles balises sémantiques

HTML 5 introduit plusieurs balises pour aider à représenter la structure usuelle des documents. Exemple:
	<header role="banner"><img src=pub.jpg></header>
<header>
introduction pour une partie de la page ou la page entière.
<footer>
fin d'une section. On peut le placer en bas d'une section ou de la page.
<section>
Les sections délimitent les parties du contenu. Il appartient alors au webmaster de leur associer une feuille de style ou de les utiliser dynamiquement dans des scripts.
Très basiquement, on peut encadrer une section par une bordure, ou la séparer de ce qui précède par un espace.
<hgroup>
Représente l'en-tête d'une section. La balise <header> peut contenir au début une balise <hgroup>.
<nav>
Ce conteneur est destiné à enclore un groupe de liens.
<article>
Désigne un contenu typique que l'on peut retrouver sur différentes pages, ou même différents sites. Cela peut être un billet de forum, un article de presse et cela s'adresse à des outils qui pourront les extraire plus facilement (en les séparant du contenu inutile tel que menus de navigation).
<aside>
Représente un contenu annexe au contenu proprement dit et peut définir une barre latérale.
<address>
Contient des information de contact, par exemple le nom de l'auteur.
<mark>
Permet de marquer une partie d'un texte, le mettre en relief, comme les anciennes balises <strong> mais en plus général.

Attribut "role"

Un attribut role permet de préciser le contexte de ces balises:

Il existe de nombreuses autres balises sémantiques, dont on trouvera la description dans les documents en référence.

Les balises multimédia

video et audio

On peut utiliser les nouvelles balises VIDEO et AUDIO avec un "fall-back" vers un lecteur Flash. Par exemple http://protofunc.com/jme/
Voir

<video src="movie.m4v" poster="accueil.jpg"width="424" height="176" preload autoplay loop controls></video>
<embed href="movie.m4v" src="accueil.jpg" type="video/x-m4v" target="myself" scale="1">

Ces balises intègrent directement un lecteur dans la page, avec des boutons Lecture, Pause, une barre de progression, du volume…

Attributs de base: width, height, src (url de la vidéo), poster (image à afficher), audio="muted"
Attributs booléens (Cf. "checked" de INPUT TYPE="checkbox"): preload (et non autobuffer !) autoplay loop controls

Si plusieurs flux on peut remplacer l'attribut SRC de la balise VIDEO par un élément inclu de type <SOURCE SRC="" TYPE="">

MP4/H.264 n'est pas supporté par Firefox, iOS ne supporte que mp4.

D'autres bibliothèques permettent de gérer fichier son binaires par exemple API MIDI. ou le son du micro

Evènements

Les médias génèrent des évenements: onplay, onended, onerror, oncanplay (média chargé au moins partiellement), oncanplaythrough = onloadeddata (média chargé en entier), onsuspend (pause),...
ExtensionMime
mp4video/mp4
ogvvideo/ogg
mov video/quicktime
m4v video/x-m4v
3gpvideo/3gp

Canvas

une zone dans laquelle il est possible de tracer des formes et les animer. Les possibilités offertes par la balise canvas sont immenses, et couplé avec le standard WebGL de rendu graphique 3D, on obtient des résultats impressionnants au sein même du navigateur. La compatibilité avec IE est obtenue par inclusion d'un script excanvas.js qui permet de convertir à la volée en VML. <!--[if lt IE 9]><script src="../lib/excanvas.js"></script><![endif]-->
Canvas est non reconnu par votre navigateur!

Exemple Canvas
Tutorial Canvas
Exemples Canvas (IE9)

Leçon sur Canvas

SVG

Des elements SVG peuvent être inclus directement. <svg> <circle r="50" cx="50" cy="50" fill="green"/> </svg> Leçon sur SVG

Des formulaires améliorés

Une pseudo-classe CSS :invalid input:invalid {background-color: red}
de nouveaux attributs type=".." pour la balise INPUT

Permet d’effectuer une première validation du contenu et permet affichage d'un clavier adapté selon le type de contenu sur les smatphones ou tablettes ou un mini calendrier pour les types date. Valeurs possibles pour l'attribut "type": tel, search, url, email, datetime, date, month, week, time, datetime-local, number, range, color

Un attribut placeholder pour INPUT: permet de donner des indications quand la case est vide.

  • <input list="browsers">
    <datalist id="browsers">
     <option value="Safari">
     <option value="Internet Explorer">
     <option value="Opera">
     <option value="Firefox">
    </datalist>
    
    Exemple de formulaire HTML5

    JavaScript

    La géolocalisation

    Permet de récupérer la latitude, la longitude, et l’altitude de l’utilisateur Son orientation par rapport au Nord La vitesse à laquelle il se déplace.

    Comme il y a latence: paramètre = handle de fonction (avec un paramère: un objet qui contient valeurs)

    navigator.geolocation.getCurrentPosition(foo)
    
    function foo(position) {
    	lat=position.coords.latitude;
    	lon=position.coords.longitude;
    	accu= position.coords.accuracy ;// en mètres
    	accu= position.coords.altitude ;
    	accu= position.coords.altitudeAccuracy ;//en mètres
    	accu= position.coords.heading ; //0 à 360
    	accu= position.coords.speed ;
    }
    
    //La même chose avec suivi (évènements déclenchés en cas de chgt de position)
    var watchId = navigator.geolocation.watchPosition(foo)
    

    Ces fonctions peuvent prendre un deuxième argument: un handler d'erreur var watchId = navigator.geolocation.watchPosition(foo,errorHandler)

    Ces fonctions peuvent prendre un troisième argument: un objet collection avec 3 paramètres {enableHighAccuracy:true,timeout:7000,maximumAge:0} /* utiliser GPS, durée avant erreur, nocache */ var watchId = navigator.geolocation.watchPosition(foo,errorHandler,{enableHighAccuracy:true,timeout:2000})

    function errorHandler(error) {alert(error.message)} // Arrêt du suivi navigator.geolocation.clearWatch(watchId)

    Exemple GPS
    Carto + GPS

    Drag and drop

    Il est également possible d’effectuer des « glisser-déposer » dans une page web. Cette fonctionnalité n’aura donc plus besoin d’être visuellement émulée par des bibliothèques Javascript tierces mais sera présente nativement dans l’API Javascript.

    La source Ajouter attributs HTML draggable="true" et ondragstart="drag(event)" à n'importe quelle balise et définir la valeur transférée dans la fonction "drag". Le plus souvent:

    function drag(e) {e.dataTransfer.setData('text',e.target.id)}

    la cible Ajouter attributs HTML ondragover="event.preventDefault()" ondrop="drop(event)" à balise cible puis récupérer et traiter la donnée transférée dans fonction "drop".

    Exemple basique drag and drop
    Cours sur le drag and drop

    Les Web Sockets

    Permettrait au serveur de faire du push

    WebWorkers

    Multitâche.

    Cours sur les WebWorkers

    Interface file

    http://www.html5rocks.com/en/tutorials/file/dndfiles/

    Voir aussi Données EXIF

    Légende d'images

    <figure> <img src="design-folio.png" alt="A propos de design-folio" /> <figcaption> Logo de l'image design-folio </figcaption> </figure>