Par Christophe Laffont / @touffies
1990 à 2004
2004
2006
2007
2008
2009
La déclaration doctype* indiquant la méthode de rendu du navigateur :
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
est remplacé par :
<!DOCTYPE html>
* La déclaration du Doctype est obligatoire.
L'élément racince <html> :
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr" dir="ltr">
est simplifié par :
<html lang="fr" dir="ltr">
L'élément <head> englobe un certain nombre d'informations utiles pour l'affichage et le référencement :
<head>
<meta charset="utf-8">
<title>Titre de la page</title>
<meta name="descritpion" content="">
<base href="http://www.monsite.com">
<link rel="stylesheet" href="css/style.css">
<style></style>
<script src="js/script.js"></script>
<script></script>
</head>
Les éléments de type Metadata : base, link, meta, style, title.
<!doctype html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title></title>
<meta name="descritpion" content="">
</head>
<body>
</body>
</html>
Avec HTML5, le contenu est simplifié.
<img src="html5" alt="html5" />
<p class="html5">html5</p>
<img src="" alt="" />
<p class="">html5
<IMG src="" ALT="" />
<P class="">html5</P>
<img src=html5 alt=html5>
<p class=html5>html5</p>
HTML5 est plus permissif.
La balise <div> n'a pas de valeur sémantique, mais peut servir à structurer du contenu.
La balise <a> peut contenir tout type d’élément (titre, paragraphe, liste, table…) sauf les éléments d’interaction (lien, bouton, champs de formulaire).
<a href="chemin/produit">
<h2>Titre du produit</h2>
<p>Paragraphe du produit</p>
</a>
La balise <small> a pour but de représenter des annotations et des petits caractères comme les informations légales ou liées au copyright.
<header>Titre de page</header>
<nav>Menu principal</nav>
<main>
<article>
<header>
<h1>Titre de l'Article</h1>
<p>Publié le <time datetime="2013-12-22T16:31:24+01:00">22 décembre 2013</time></p>
</header>
<section>
<h1>Titre de la Section</h1>
<div class="content">Contenu de l'Article</div>
</section>
<footer>Une note de fin de page</footer>
</article>
<aside>Contenu complémentaire</aside>
</main>
<footer>Copyright © 2013</footer>
La balise <figure> représente un contenu indépendant, habituellement accompagné d'une légende grâce à l'élément <figcaption>.
<figure>
<img src="img/logo.png" alt="description de l'image">
<img src="img/partenaire.png" alt="description de l'image">
<figcaption>Image de Openstudio.fr</figcaption>
</figure>
La balise <mark> représente du texte surligné et est utilisé pour mettre en avant des blocs de textes d'une certaine pertinence.
La balise <time> représente soit une heure sur une horloge fonctionnant sur 24 heures ou une date précise du calendrier grégorien.
<time datetime="2013-12-22T16:31:24+01:00">22 décembre 2013</time>
<time datetime="2013-12-22">Aujourd'hui</time>
<time datetime="2013-12-22" pubdate>22 décembre 2013</time>
La balise <details> est utilisé comme outil de communication à partir duquel l'utilisateur récupère des informations supplémentaires.
<details>
<summary>Démo détails</summary>
<p>Plus d'infos à propos des détails.</p>
</details>
Résultats :
Plus d'infos à propos des détails.
La balise <summary> est utilisé comme un sommaire, une légende ou la légende du contenu d'un élément <details>.
<input type="text" value="">
La type <email> représente une adresse email.
<input type="email" name="email">
<input type="email" name="email" pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$">
Résultats :
La type <color> est utilisé pour faciliter la sélection d'une couleur.
<label for="color">Sélectionner une couleur :</label>
<input type="color" name="color" id="color" value="ff0000">
Résultats :
La type <date> est utilisé pour faciliter la sélection d'une date.
<input type="date" name="date" id="date" value="2013-12-24">
Résultats :
La type <range> est utilisé pour afficher un slider.
<input type="range" name="range" id="range" min="0" max="20" step="1" value="0">
Résultats :
Donne une indication à l'utilisateur sur ce qui peut être entré dans le champ.
<input type="text" name="firstame" placeholder="Nom de famille">
Résultats :
Au chargement du document, celui-ci est sélectionné.
<input type="text" name="firstame" autofocus>
Résultats :
Empêche le navigateur de se souvenirs des informations entrés dans le formulaire/champ.
<form action="/" autocomplete="off">
<input type="text" name="firstame" autocomplete="off">
Previent la soumission du formulaire si les champs requis non pas été complétés.
<style>
input:valid { border-color: green; }
input:invalid { border-color: red; }
</style>
<input type="text" name="firstame" required>
Résultats :
Afficher une liste de choix pour un champ.
<input type="text" name="country" list="country" >
<datalist id="country">
<option value="Espagne">Espagne</option>
<option value="France">France</option>
<option value="Italie">Italie</option>
</datalist>
Résultats :
Les spécifications recensent une douzaine de préfixes propriétaires (appelés aussi préfixes vendeurs) dont les plus fréquemment rencontrés sont attribués aux navigateurs web principaux, à savoir :
[prefix][propriété CSS] ==> -webkit-border-radius: 10px;
.round {
background: #ccc;
-webkit-border-radius: 20px; /* Android ≤ 1.6, iOS 1-3.2, Safari 3-4 */
border-radius: 20px; /* Android 2.1+, Chrome, Firefox 4+, IE 9+, iOS 4+, Opera 10.50+, Safari 5+ */
}
Résultats :
In March 1936, an unusual confluence of forces occurred in Santa Clara County.
A long cold winter delayed the blossoming of the millions of cherry, apricot, peach, and prune plum trees covering hundreds of square miles of the Valley floor. Then, unlike many years, the rains that followed were light and too early to knock the blossoms from their branches.
Instead, by the billions, they all burst open at once. Seemingly overnight, the ocean of green that was the Valley turned into a low, soft, dizzyingly perfumed cloud of pink and white. Uncounted bees and yellow jackets, newly born, raced out of their hives and holes, overwhelmed by this impossible banquet.
Then came the wind.
It roared off the Pacific Ocean, through the nearly uninhabited passes of the Santa Cruz Mountains and then, flattening out, poured down into the great alluvial plains of the Valley. A tidal bore of warm air, it tore along the columns of trees, ripped the blossoms apart and carried them off in a fluttering flood of petals like foam rolling up a beach.
This perfumed blizzard hit Stevens Creek Boulevard, a two-lane road with a streetcar line down its center, that was the main road in the West Valley. It froze traffic, as drivers found themselves lost in a soft, muted whiteout. Only the streetcar, its path predetermined, passed on...
L'intérêt est de pouvoir satisfaire des contraintes de dimensions, de résolutions et d'autres critères variés pour améliorer l'apparence graphique et la lisibilité (voire l'utilisabilité) d'un site web
/* Type */
@media screen, projection { ... }
/* Dimension */
@media (min-width: 780px) { ... }
@media (min-device-width: 640px) { ... }
/* Orientation */
@media (orientation: portrait) { ... }
/* Couleur */
@media (color) { /* Screen is in color */ }
@media (min-color-index: 256) { /* At least 256 colors */ }
@media (monochrome) { /* Screen is monochrome */ }
La balise <audio> désigne du contenu sonore présent dans un document.
<audio controls="controls">
<source src="assets/audio/cheval.ogg" type="audio/ogg">
<source src="assets/audio/cheval.mp3" type="audio/mpeg">
Votre navigateur ne gère pas l'élément audio
</audio>
Résultats :
La balise <video> est utilisé pour intégrer des vidéo.
<video id="video" width="320" height="240" controls="controls">
<source src="assets/video/film.mp4" type="video/mp4">
<source src="assets/video/film.ogg" type="video/ogg">
Votre navigateur ne gère pas l'élément video
</video>
<script>var video = document.getElementById("video");</script>
<button type="button" onclick="video.play();">Play</button>
<button type="button" onclick="video.pause();">Pause</button>
Résultats :
La balise <canvas> permet de modifier une zone graphique via un script.
<canvas id="canvas" width="800" height="200"></canvas>
<script>
var canvas = document.getElementById('canvas');
var context = canvas.getContext('2d');
context.fillRect(250, 25, 150, 100);
context.beginPath();
context.arc(450, 110, 100, Math.PI * 1/2, Math.PI * 3/2);
context.lineWidth = 15;
context.lineCap = 'round';
context.strokeStyle = 'rgba(255, 127, 0, 0.5)';
context.stroke();
</script>
Résultats :
<svg>
<defs>
<linearGradient id="myGradient" x1="0%" y1="100%" x2="100%" y2="0%">
<stop offset="5%" stop-color="red"></stop>
<stop offset="95%" stop-color="blue" stop-opacity="0.5"></stop>
</linearGradient>
</defs>
<circle id="myCircle" class="important" cx="50%" cy="50%" r="100" fill="url(#myGradient)">
</svg>
Résultats :
L'API de Géolocalisation permet aux utilisateurs de donner leur localisation si ils le désirent.
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
var latLng = new google.maps.LatLng(
position.coords.latitude, position.coords.longitude);
var marker = new google.maps.Marker({position: latLng, map: map});
map.setCenter(latLng);
}, errorHandler);
<script>
document.querySelector('#dropzone').addEventListener('drop', function(e) {
var reader = new FileReader();
reader.onload = function(evt) {
document.querySelector('img').src = evt.target.result;
};
reader.readAsDataURL(e.dataTransfer.files[0]);
}, false);
</script>
Utiliser Modernizr pour détecter si le navigateur supporte une propriété.
.element { /* Pour les navigateurs ne reconnaissant pas CSS3 border-image */
border: 1px inset #666;
}
.borderimage .element { /* Pour les navigateurs reconnaissant border-image */
border: none;
-webkit-border-image: url(border.png) 0 5 0 5 stretch; -moz-border-image: url(border.png) 0 5 0 5 stretch; border-image: url(border.png) 0 5 0 5 stretch;
}
if(!Modernizr.input.placeholder){
// Javascript alternative
}
Utilisation des commentaires conditionnels pour cibler les anciens navigateurs.
<!--[if lt IE 7 ]><html class="no-js oldie ie6" lang="fr"> <![endif]-->
<!--[if IE 7 ]><html class="no-js oldie ie7" lang="fr"> <![endif]-->
<!--[if IE 8 ]><html class="no-js oldie ie8" lang="fr"> <![endif]-->
<!--[if (gte IE 9)|!(IE)]><!--><html lang="fr" class="no-js"> <!--<![endif]-->