2. A propos
Yoann Gotthilf, CTO d’une startup et freelance Web/Mobile
•développeur Web depuis 13 ans
•développeur Fullstack JS depuis 1 ans
•consultant sécurité pendant 6 ans
•développeur Android depuis 6 ans
yoann.gotthilf atgmail.com •@ygotthilf
3. Références
•Site officiel du w3c : http://www.w3.org/
•Site d’éducation non officiel : http://www.w3schools.com/
•En français : http://www.alsacreations.com/
•Vérifier la compatibilité : http://caniuse.com/
•Editeurs en ligne : CodePen, JS Bin, JS Fiddle, ...
6. Histoire sans grand H
•1990: Tim Berners-Lee développe HTML (+ URL, HTTP)
•1994: Fondation du W3C
•2000: XHTML côtoie HTML 4.01
•2007: W3C développe HTML5(propulsé par WHATWG)
•2008: Working Draft HTML5
•2010: XHTML abondonné
•2012: Candidate Recommendation HTML5
7. Syntaxe
•HTML est dérivé du SGML et non du XML
<a href="#">Home</a>
<input type="text" value="John Doe" disabled>
<input type="text" value=John>
<input type="text" value="John Doe">
<input type="text" value='John Doe'>
8. DTD
<!DOCTYPE html>
•Pour les validateurs W3C
•Avant : <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
9. Meta
<meta charset="utf-8">
•Pour le navigateur
•Avant : <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
•Meta «keywords» obselète
10. Language
<html lang="en" > ... </html>
•pour les moteurs de recherche, navigateurs, synthétiseurs vocaux, ...
•avant : <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
21. Formulaire : vérifier la compatibilité
En natif :
•Attribut : var compatible = ‘placeholder' in document.createElement(‘input');
•Input Type : var el = document.createElement('input'); el.setAttribute('type', 'datetime'); var compatible = el.type !== 'text‘;
Avec Modernizr :
•Attribut : var compatible = Modernizr.input.placeholder ;
•Input Type : var compatible = Modernizr.inputtypes.datetime ;
33. SVG
Afficher des dessins vectoriels dans le DOM
•Bien supporté (sauf IE8)
•Librairies tierces :
•D3.js
•Snag.svg
•Processing.js
•...
•Exemple :
<svg width="300" height="200">
<polygon points="100,10 40,198 190,78 10,78 160,198"
style="fill:lime;stroke:purple;stroke-width:5;fill-rule:evenodd;" />
</svg>
34. SVG vs Canvas
SVG
Canvas
Indépendant de la résolution
Manipulationd’événements
Performance dégradé sidessin complexe
Pas adapté au jeu
Dépendant de la résolution
Pas de gestion desévénements
Peuadapté au rendu de texte
Sauvegardedu dessin en .PNG ou .JPG
Adapté au jeu
http://www.w3schools.com/html/html5_svg.asp
35. Géolocalisation : l’API 1/2
•Bien supporté (sauf IE8, forcément...)
•Obtenir la localisation une seule fois :
•navigator.geolocation.getCurrentPosition (positionCb, errorCb, options)
•Obtenir la localisation en continu :
•navigator.geolocation.watchPosition (positionCb, errorCb, options)
•retourne l’id d’«abonnement»
•s’annule via la méthode : clearWatch(id)
•Options possibles :
•enableHighAccuracy
•timeout
•maximumAge
37. Géolocalisation : exemple
varx =document.getElementById("demo");
functiongetLocation() {
if(navigator.geolocation) {
navigator.geolocation.getCurrentPosition(
showPosition,
function(error) {
x.innerHTML ="Geolocation failed : "+error.message +" (code "+error.code +")";
},
{
enableHighAccuracy:true,
timeout:10000
});
} else{
x.innerHTML ="Geolocation is not supported by this browser.";
}
}
functionshowPosition(position) {
x.innerHTML ="Latitude: "+position.coords.latitude +"<br>Longitude: "+position.coords.longitude;
}
38. Web Storage : présentation
Stocker des données clés/valeurs dans le navigateur
•Compatible avec navigateur récent (et oui...)
•Deux types de stockage :
•permanent : localStorage
•temporaire (suppprimé à la fermeture de l’onglet) : sessionStorage
39. Web Storage : l’API
•Lire des données
•getItem(clé)
•Ou directement : localStorage.ma_clé
•length
•key(index)
•Ecrire des données
•setItem(clé, valeur)
•removeItem(clé)
•clear()
if(typeof(Storage) !== "undefined") {
// Code for localStorage/sessionStorage.
localStorage.setItem("lastname", "Smith");
var lastname = localStorage.getItem("lastname");
} else {
// Sorry! No Web Storage support..
}
40. Web Storage : limitations
•Limité à au moins 5Mo
•Protégé par nom de domaine (comme les cookies)
•Stocke uniquement des chaînes de caractères :
•Caster la lecture d’un nombre
•Utiliser JSON pour stocker/lire un objet
if (localStorage.clickcount) {
localStorage.clickcount = Number(localStorage.clickcount) + 1;
} else{
localStorage.clickcount = 1;
}
var user = {
firstname : "Obi-Wan",
lastname : "Kenoby"
};
var userJson = JSON.stringify(user);
sessionStorage.setItem("user",userJson);
// ...
var userJson = sessionStorage.getItem("user");
var user = JSON.parse(userJson);
41. Web Storage : déboguage
Dans la console de développement du navigateur
Chrome
42. Web Socket : présentation
Communication bidirectionnelle
•Incompatibe avec IE8/9 et navigrateur Android 4.3
•web socket ≠long polling (ajax)
•Librairies tierces :
•Socket.IO
•SignalR (ASP.NET)
•Meteor (fullstack JS Framework)
•Firebase (BaaS)
•...
43. Web Socket : l’API
Créer la websocket :
•var ws= new WebSocket("ws://websocketUrl");
Intéragir avec les messages reçus :
•ws.onopen = function(evt) { alert("Connection open ..."); };
•ws.onmessage= function(evt) { alert( "Received Message: " + evt.data); };
•ws.onclose = function(evt) { alert("Connection closed."); };
•ws.onerror = function(evt) { alert("WebSocket error : " + e.data) };
Envoyer un message
•ws.send(MyMessage);
Fermer la websocket :
•ws.close();
44. Autres API
•Offline : rendre une application hors ligne (incompatibe IE8/9)
•Web Worker : lancer des tâches JavaScript isolées en parralèle(incompatibe IE8/9, Android 4.3)
•Server-Sent Events : mise à jour automatique d’une page grâce à des push server (incompatible IE)
•Web notification : notifier l’utilisateur en dehors du navigateur (uniquement FF, Chrome, Safari)
•Web RTC : Communication pair à pair (uniquement FF, Chome, Opéra)
•...
45.
46. Transformation
Effet pour changer la forme, taille, position d’un élément
•Propriété css : transform(-ms-, -webkit-, -moz-, -o-)
•Exemple :
.content {
transform: rotate(45deg);
}
http://codepen.io/ygotthilf/pen/asKnk
49. Transition
Effet appliqué à un changement de style d’un élement
•Propriété css globale : transition
•4 propriétés possibles :
•Propriété impactée
•Délai
•Durée
•Timing function
.hide-on-hover {
opacity : 1;
transition : opacity 1s ease-in-out 500ms;
}
.hide-on-hover:hover {
opacity : 0;
}
50. Transition : propriété impactée
Les priorités impactés par l’effet de transition
•Propriété : transition-property
•Valeur par défaut : all
•Possible d’ajouter plusieurs propriété, Exemple :
div {
transition-property: width, opacity;
}
51. Transition : délai et durée
•Délai : quand la transition démarre
•Durée : combien de temps la transition dure
•Propriété délai : transition-delay
•Propriété durée : transition-duration
•Valeurs acceptées : seconde (s) ou milliseconde (ms)
•Exemple :
div {
transition-delay: 2s;
transition-duration: 500ms;
}
52. Transition : timing function
La courbe de vitesse de l’effet
•Propriété : transition-timing-function
•Valeurs acceptées :
•ease
•linear
•ease-in
•ease-out
•ease-int-out
•cubic-bezier(n,n,n,n)
Timing function
(source : Alsacréation)
53. Animation
Créer une animation sur un élément
/* Chrome, Safari, Opera */
@-webkit-keyframes disco {
0% {background: red;}
25% {background: yellow;}
50% {background: blue;}
100% {background: green;}
}
/* Standard syntax */
@keyframes disco {
0% {background: red;}
25% {background: yellow;}
50% {background: blue;}
100% {background: green;}
}
.disco {
-webkit-animation: disco 5s infinite; /* Chrome, Safari, Opera */
animation: disco 5s infinite;
}
http://codepen.io/ygotthilf/pen/asKnk
54. Animation : @keyframes
Définir une animation
•Règle CSS : @keyframes
•Proprités :
•fromet to
•pourcentage
@-webkit-keyframes myfirst {
from {background: red;}
to {background: yellow;}
}
/* Standard syntax */
@keyframes myfirst {
from {background: red;}
to {background: yellow;}
}
/* Chrome, Safari, Opera */
@-webkit-keyframes myfirst {
0% {background: red;}
25% {background: yellow;}
50% {background: blue;}
100% {background: green;}
}
/* Standard syntax */
@keyframes myfirst {
0% {background: red;}
25% {background: yellow;}
50% {background: blue;}
100% {background: green;}
}
55. Animation : comportement
•Prorité globale dans l’élement : animation
•Proriétés
•animation-name (spécifié @keyframes)
•animation-duration
•animation-timing-function
•animation-delay
•animation-iteration-count (infinite ou nombre)
•animation-direction (alternate, reverse, alternate-reverse, normal)
•animation-play-state(paused ou running)
56. Media queries
Application une feuille de style en fonction du terminal
.bloc {
background :black;
}
@media screen and (min-width: 200px) and (max-width: 640px) {
.bloc {
background :white;
}
}
57. Media queries : type de terminal
Appliquer une CSS en fonction du type de terminal :
•screen: Écrans
•handheld : Périphériques mobiles ou de petite taille
•print: Impression
•speech :Synthèses vocales
•braille : Plages braille
•embossed :Imprimantes braille
•projection :Projecteurs (ou présentations avec slides)
•tty :Terminal/police à pas fixe
•tv :Téléviseur
•all :Tous les précédents
58. Media queries : propriétés du terminal
Les propriétés (à préfixer par min-ou max-) :
•color : support de la couleur (bits/pixel)
•color-index : périphérique utilisant une table de couleurs indexées
•device-aspect-ratio : ratio du périphérique de sortie (par exemple 16/9)
•aspect-ratio : ratio de la zone d'affichage
•device-height : dimension en hauteur du périphérique
•device-width : dimension en largeur du périphérique
•grid : périphérique bitmap ou grille (ex : lcd)
•height: dimension en hauteur de la zone d'affichage
•monochrome : périphérique monochrome ou niveaux de gris (bits/pixel)
•orientation: orientation du périphérique (portait ou landscape)
•resolution :résolution du périphérique (en dpi, dppx, ou dpcm)
•scan : type de balayage des téléviseurs (progressive ou interlace)
•width: dimension en largeur de la zone d'affichage