Programmation Web HTML - CRIL

Transcription

Programmation Web HTML - CRIL
Programmation Web
HTML
Christophe Lecoutre
[email protected]
IUT de Lens - CRIL CNRS UMR 8188
Université d’Artois
France
Département SRC – Septembre 2014
1
Plan
1
Introduction
2
Éléments et attributs élémentaires
3
Listes et Tables
4
Liens et images
5
Formulaires
6
Audio / Video (HTML5)
7
Encore plus de HTML5
2
Plan
1
Introduction
2
Éléments et attributs élémentaires
3
Listes et Tables
4
Liens et images
5
Formulaires
6
Audio / Video (HTML5)
7
Encore plus de HTML5
3
Bibliographie
Matthew MacDonald
HTML5, the missing manual,
2nd Edition, O’reilly. 2014
Rob Larsen
Begininning HTML and CSS,
Wrox, 2013
John Duckett.
Beginning Web Programming with HTML,
XHTML, and CSS,
2nd Edition, Wrox. 2008.
4
Sites
Validation HTML
W3C Validator at http://validator.w3.org
HTML5 Validator at http://html5.validator.nu
Specifications/Ressources
alsacreations at http://www.alsacreations.com (site français)
W3School at http://www.w3schools.com
HTML5
caniuse at http://caniuse.com
moderniz at http://modernizr.com
HTML5 polyfills on GitHub at http://tinyurl.com/polyfill
5
Objectif
Écrire des pages web avec :
HTML : permet de définir la structure des pages
CSS : permet de définir l’apparence des pages
Javascript : permet d’ajouter l’interactivité/le contrôle
Prendre en compte :
la simplicité d’utilisation : facilité de navigation pour les utilisateurs
l’accessibilité : rendre les sites utilisables à autant d’utilisateurs que possible
6
Langages de balisage
Langages qui spécifient la structure logique d’un document (page). Par exemple :
HTML: HyperText Markup Language, used for the web
Latex: used for professional elaboration of scientific documents
HTML + CSS + Javascript
HTML est construit sur les concepts de :
balises (tags)
éléments (elements)
attributs (attributes)
7
Balises et éléments
Description :
une balise est formée par un identifiant (identifier) et deux crochets d’angle
(two enclosing angle brackets)
un élément est formé par un contenu (potentiellement vide) et deux balises
de même identifiant l’encadrant
La balise gauche est appelé la balise ouvrante tandis que la balise droite est
appelée la balise fermante
La balise fermante possède un “forward slash” après le premier crochet
d’angle
Exemple
<h1> A propos de HTML </h1>
Attention !
Une balise tagName sans contenu peut s’écrire <tagName/>. On dit alors
qu’elle est auto-fermante.
8
Attributs
Un attribut est formé par :
un nom
le symbole =
une valeur entre double apostrophes (quotes), ou simple apostrophes
Une liste (potentiellement vide) d’attributs séparés par des espaces est placé après
l’identifiant de la balise ouvrante et avant le crochet d’angle de droite.
Exemple
<h1 id="firstHeading"> A propos de HTML </h1>
Attention !
Balises et attributs doivent être écrits en lettres minuscules.
9
Tags, Elements, and Attributes
attribute name
attribute value
<h1 id="firstHeading">
opening tag
(with an attribute)
A propos de XHTML </h1>
content of the element
closing tag
element
10
Tags, Elements, and Attributes
Exemple
<body>
<!-- ci-dessous, c’est un en-tete -->
<h1> Premier en-tete <\h1>
<p> coucou </p>
<a href="http://www.arte.fr">arte</a>
<!-- ci-dessus, un lien -->
</body>
Remarque
Les commentaires sont placés entre des balises en utilisant la syntaxe
<!-- comment -->
11
Versions de HTML
Histoire complexe :
HTML 4.01
XHTML 1.0 (et XHTML 2)
HTML5
De manière à valider un document HTML, une Document Type Declaration, ou
DOCTYPE, doit être utilisée. Une DOCTYPE déclare au navigateur la Document
Type Definition (DTD) à laquelle le document se conforme.
Remarque
Pour HTML5, on utilise simplement :
<!DOCTYPE html>
12
Squelette d’un document HTML5
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title> ... </title>
</head>
<body>
...
</body>
</html>
13
Plan
1
Introduction
2
Éléments et attributs élémentaires
3
Listes et Tables
4
Liens et images
5
Formulaires
6
Audio / Video (HTML5)
7
Encore plus de HTML5
14
En-têtes
HTML offre 6 niveaux d’en-tête (headings) : <h1>, <h2>, <h3>, <h4>, <h5>
et <h6>
Par défaut, les navigateurs affichent les contenus de :
<h1>, <h2> et <h3> en plus gros que la taille par défaut
<h4> avec la taille par défaut
<h5> et <h6> en plus petit que la taille par défaut
Remarque
On pourra avec CSS numéroter automatiquement les en-têtes de section.
15
Exemple
<h1>Heading
<h2>Heading
<h3>Heading
<h4>Heading
<h3>Heading
<h4>Heading
<h5>Heading
<h6>Heading
1</h1>
2</h2>
3</h3>
4</h4>
3 bis</h3>
4 bis</h4>
5</h5>
6</h6>
16
Paragraphes et retours à la ligne
Deux éléments fréquents :
<p> est utilisé pour construire des paragraphes
<br> est utilisé pour créer des retours à la ligne
Remarque
L’élément <br> est vide. On écrira plutôt <br /> que <br/> ou <br> qui sont
aussi autorisés maintenant.
Quelque soit le nombre d’espaces consécutifs, seul un espace est affiché. Cela est
connus sous le terme de white space collapsing.
Exemple
<p>
ceci est un test de la
balise p
avec retour a la ligne
</p>
17
Exemple
p { text-align:justify; }
<p>
Les cheminées
crachaient
une puanteur de soufre,
les tanneries
la puanteur de leurs bains corrosifs,
...
</p>
<p>
Les rivières puaient, les places
puaient, les églises puaient, cela
puait sous les ponts et dans les
palais. <br />
Le paysan puait ...
</p>
18
Polices à espacement fixe
Le contenu d’un élément <pre> est écrit avec une police à espacement fixe, et
préserve de plus à la fois les espaces et les retours à la ligne.
Exemple
<pre>
x | o | x
----------o | o | x
----------o | x | x
</pre>
19
Elements <em> et <strong>
Ces éléments ajoutent de l’information (structurelle) à des fragments de texte.
Éléments importants :
<em> ajoute une emphase (habituellement en italique)
<strong> ajoute une emphase plus forte que <em> (habituellement en gras)
De bonnes raisons de les utiliser (plutôt que les éléments <i> et <b>) :
les outils tels que les lecteurs d’écran (destiné aux personnes aveugles ou
fortement malvoyantes) peuvent ajuster l’intonation
les programmes automatiques peuvent les extraire comme mots-clés (et/ou
les indexer)
Remarque
Les éléments <i> et <b> sont réhabilités, mais juste pour la mise en forme. On
peut nénamoins utiliser CSS à la place.
20
Exemple
<p>
<p>
<br
<p>
<strong> Fermer </strong> le gaz </p>
En arrivant <em> téléphoner </em> </p>
/>
Les mot-clès du document sont : <b>
HTML </b> et <b> CSS </b> </p>
<p> C’est peut-être plus beau ici <i> en
italique </i> mais c’est un point de
vue.</p>
21
Elements <dfn> et <address>
Comme “phrase elements”, nous trouvons également :
<dfn> indique que vous introduisez un terme spécial ou nouveau,
typiquement rendu en italique
<address> indique une adresse postale, habituellement à la fin d’un
document, ou encore une adresse de contact (créateur d’une page web)
Exemple
<p> Une fonction est <dfn> recursive </dfn> ssi elle
s’appelle dans son propre corps. </p>
<address>
IUT de Lens, <br />
Rue de l’universite, <br />
SP 16, 62307 LENS Cedex
</address>
22
Elements <abbr>, <cite>, <blockquote> et <q>
<abbr> indique une abréviation; si possible, à accompagner d’un attribut
title
<cite> contient une citation ou une référence à une autre source; souvent
utilisé pour inclure des titres de livres, films ou chansons.
<blockquote> insère une longue citation (à l’intérieur d’un bloc) d’une
autre source. A démarrer après une ligne vide et utiliser <p> à l’intérieur de
<blockquote>.
<q> insère une courte citation (à l’intérieur d’une phrase) d’une autre source.
Attention !
L’élément <cite> est à distinguer de l’attribut cite (dont la valeur doit être
une URL) habituellement utilisé avec <blockquote> et <q>.
23
Exemple
<p> J’ai un ami appellé <abbr title="Samuel">
Sam</abbr> </p>
<p> Ceci est un cours sur <abbr title="
Hypertext Markup Language" lang="en">HTML<
/abbr> </p>
<p> Ces diapositives sont inspirées de <cite>
Beginning web programming with HTML, XHTML
and CSS</cite> </p>
<p> Oscar Wilde a écrit dans <cite lang="en">
The Picture of Dorian Gray</cite> :</p>
<blockquote cite="goodreads.com">
<p> Those who find ugly meanings in beautiful
things are corrupt without being
charming. This is a fault. Those who
find beautiful meanings in beautiful
things are the cultivated. For these
there is hope. They are the elect to
whom beautiful things mean only Beauty.
</p>
</blockquote>
<p> Oscar Wilde a aussi dit <q cite="goodreads.
com">Always forgive your enemies; nothing
annoys them so much.</q> </p>
24
Elements pour le code
<code>: le contenu est du code de programmation, habituellement rendu en
police à espacement fixe.
<var>: le contenu indique une variable (informatique)
<kbd>: le contenu indique du texte donné par l’utilisateur (d’un programme)
<samp>: le contenu désigne une sortie (d’un programme)
Exemple
<pre> <code>
int sum(int i, int j) {
return i+j;
}
</code> </pre>
Attention !
Certains caractères sont réservés en HTML (voir diapositive suivante)
25
Caractères spéciaux
Voici ces caractères :
Symbol
&
<
>
"
Description
Ampersand
Less than
Greater than
Double quote
Non-breaking
space
Entity Name
&amp;
&lt;
&gt;
&quot;
&nbsp;
Number Code
&#38;
&#60;
&#62;
&#34;
&#160;
Exemple
<abbr title="Tim">
doit être écrit pour être affiché tel quel dans une page HTML sous la forme :
\&lt;abbr title=\&quot;Tim\&quot;\&gt;
26
Elements de présentation
Attention !
Lorsque cela est possible, préférez une solution CSS
Ces éléments suivants peuvent s’avérer utiles :
<sup>: le contenu est écrit en exposant
<sub>: le contenu est écrit en indice
Autres éléments :
<wbr> pour gérer les césures de mots longs (word breaking)
<b> pour caractères gras (bold).
<i> pour caractères en italique.
<u> (underline) et <strike> sont dépréciés
utiliser CSS plutôt que d’employer <big>
27
Eléments revisités en HTML5
Ce sont :
<hr> defines a thematic break in an HTML page (e.g. a shift of topic) ;
c’est un élément vide, donc écrire <hr />.
<small> defines smaller text (and other side comments).
<s> specifies text that is no longer correct, accurate or relevant. This tag
should not be used to define replaced or deleted text, use <del> to define
replaced or deleted text.
Exemple
<p><s>My car is blue.</s></p>
<p>My new car is silver.</p>
<hr />
<p><small>Copyright 2013 by Toto</small></p>
28
Exercice
1
2
3
4
5
6
Pour avoir une police à espacement fixe, on utilise :
a) <pre>
b) <b>
c) <tt>
d) CSS
Pour mettre du texte en gras, on utilise :
a) <b>
b) <em>
c) <strong>
d) CSS
Est-ce que ce qui suit est bien formé ?
<p> Je suis <em> content </p> </em>
Est-ce que ce qui suit est bien formé ?
<h1> Programmation Web </h1>
<h2> HTML <h2>
<p> Il faut respecter la syntaxe </p>
Est-ce que ce qui suit est bien formé ?
<adresse>
Toto, rue des géants de la frite, Trouville
</adresse>
Est-ce que ce qui suit est bien formé ?
<p> <abbr title="Mademoiselle">Mlle </abbr> </p>
29
Exercice
1
2
3
4
5
6
Pour avoir une police à espacement fixe, on utilise :
a) <pre>
b) <b>
c) <tt>
d) CSS
Pour mettre du texte en gras, on utilise :
a) <b>
b) <em>
c) <strong>
d) CSS
Est-ce que ce qui suit est bien formé ?
<p> Je suis <em> content </p> </em>
Est-ce que ce qui suit est bien formé ?
<h1> Programmation Web </h1>
<h2> HTML <h2>
<p> Il faut respecter la syntaxe </p>
Est-ce que ce qui suit est bien formé ?
<adresse>
Toto, rue des géants de la frite, Trouville
</adresse>
Est-ce que ce qui suit est bien formé ?
<p> <abbr title="Mademoiselle">Mlle </abbr> </p>
29
Exercice
1
2
3
4
5
6
Pour avoir une police à espacement fixe, on utilise :
a) <pre>
b) <b>
c) <tt>
d) CSS
Pour mettre du texte en gras, on utilise :
a) <b>
b) <em>
c) <strong>
d) CSS
Est-ce que ce qui suit est bien formé ?
<p> Je suis <em> content </p> </em>
Est-ce que ce qui suit est bien formé ?
<h1> Programmation Web </h1>
<h2> HTML <h2>
<p> Il faut respecter la syntaxe </p>
Est-ce que ce qui suit est bien formé ?
<adresse>
Toto, rue des géants de la frite, Trouville
</adresse>
Est-ce que ce qui suit est bien formé ?
<p> <abbr title="Mademoiselle">Mlle </abbr> </p>
29
Exercice
1
2
3
4
5
6
Pour avoir une police à espacement fixe, on utilise :
a) <pre>
b) <b>
c) <tt>
d) CSS
Pour mettre du texte en gras, on utilise :
a) <b>
b) <em>
c) <strong>
d) CSS
Est-ce que ce qui suit est bien formé ?
<p> Je suis <em> content </p> </em>
Est-ce que ce qui suit est bien formé ?
<h1> Programmation Web </h1>
<h2> HTML <h2>
<p> Il faut respecter la syntaxe </p>
Est-ce que ce qui suit est bien formé ?
<adresse>
Toto, rue des géants de la frite, Trouville
</adresse>
Est-ce que ce qui suit est bien formé ?
<p> <abbr title="Mademoiselle">Mlle </abbr> </p>
29
Exercice
1
2
3
4
5
6
Pour avoir une police à espacement fixe, on utilise :
a) <pre>
b) <b>
c) <tt>
d) CSS
Pour mettre du texte en gras, on utilise :
a) <b>
b) <em>
c) <strong>
d) CSS
Est-ce que ce qui suit est bien formé ?
<p> Je suis <em> content </p> </em>
Est-ce que ce qui suit est bien formé ?
<h1> Programmation Web </h1>
<h2> HTML <h2>
<p> Il faut respecter la syntaxe </p>
Est-ce que ce qui suit est bien formé ?
<adresse>
Toto, rue des géants de la frite, Trouville
</adresse>
Est-ce que ce qui suit est bien formé ?
<p> <abbr title="Mademoiselle">Mlle </abbr> </p>
29
Exercice
1
2
3
4
5
6
Pour avoir une police à espacement fixe, on utilise :
a) <pre>
b) <b>
c) <tt>
d) CSS
Pour mettre du texte en gras, on utilise :
a) <b>
b) <em>
c) <strong>
d) CSS
Est-ce que ce qui suit est bien formé ?
<p> Je suis <em> content </p> </em>
Est-ce que ce qui suit est bien formé ?
<h1> Programmation Web </h1>
<h2> HTML <h2>
<p> Il faut respecter la syntaxe </p>
Est-ce que ce qui suit est bien formé ?
<adresse>
Toto, rue des géants de la frite, Trouville
</adresse>
Est-ce que ce qui suit est bien formé ?
<p> <abbr title="Mademoiselle">Mlle </abbr> </p>
29
Exercice
1
2
3
4
5
6
Pour avoir une police à espacement fixe, on utilise :
a) <pre>
b) <b>
c) <tt>
d) CSS
Pour mettre du texte en gras, on utilise :
a) <b>
b) <em>
c) <strong>
d) CSS
Est-ce que ce qui suit est bien formé ?
<p> Je suis <em> content </p> </em>
Est-ce que ce qui suit est bien formé ?
<h1> Programmation Web </h1>
<h2> HTML <h2>
<p> Il faut respecter la syntaxe </p>
Est-ce que ce qui suit est bien formé ?
<adresse>
Toto, rue des géants de la frite, Trouville
</adresse>
Est-ce que ce qui suit est bien formé ?
<p> <abbr title="Mademoiselle">Mlle </abbr> </p>
29
Éditer du texte
Pour montrer les modifications faites à du texte, utiliser :
l’élément <ins> pour un ajout; le texte inséré est souligné;
l’élément <del> pour une suppression; le texte détruit est barré.
Exemple
<p> Le meilleur jeu vidéo de tous les
temps est <del>Starcraft 2</del> <ins
datetime="2010-07-27T17:08:00"
cite="http://www.mamedb.com/game/pengo"
title="c’est trop bien">Pengo</ins> </p>
Attention !
A n’utiliser que pour un site en cours de développement.
30
Attributs universels
Ce sont les 3 attributs qui peuvent être utilisés sur la majorité des éléments
HTML :
id: utilisé pour donner un identifiant unique à un élément ; la valeur doit
commencer par une lettre;
class: utilisé pour spécifier qu’un élément appartient à un groupe (classe)
spécifique ; la valeur est une liste de noms de classe (habituellement, une
seul) avec l’espace comme séparateur;
title: donne un titre à un élément ; habituellement affiché comme
information contextuelle (tooltip).
Attention !
L’attribut style est déprécié, et l’attribut name plus valide en HTML.
Remarque
Les attributs id et class seront particulièrement utiles avec CSS.
31
Attributs d’internationalisation
Il y a 3 attributs d’internationalisation qui permettent à
l’utilisateur d’écrire des pages dans différentes langues. Ils
sont disponibles pour la plupart des éléments HTML.
dir: indique au navigateur dans quelle direction le
texte est lu ; sa valeur peut être "ltr" ou "rtl".
lang: indique la langue principale ; gardé pour des
raisons de compatibilité.
Les valeurs de lang sont des codes ISO-639 standard (fr pour french, en pour
english, en-us pour U.S. english, ...)
Remarque
Typiquement, vous utiliserez ces attributs avec seulement l’élément html.
Toutefois, il est possible de les associer avec certains éléments particuliers dans le
corps du document.
32
Attributs d’événements
Les attributs d’événements permettent d’associer un scripte (programme) à un
événement (e.g., un clic de souris ou l’appui d’une touche).
Il y a 10 attributs appelés collectivement attributs communs d’évènements :
onclick, ondoubleclick
onmousedown, onmouseup, onmouseover, onmousemove,
onmousepress
onkeypress, onkeydown, onkeyup
L’élément <body> accepte les évènements suivants :
onload, onunload,
Les évènements associés aux formulaires sont :
onfocus, onblur, onsubmit, onreset, onselect, onchange
33
Éléments bloc et en ligne
Chaque élément appartient à l’une des deux catégories :
un élément bloc démarre sur une nouvelle ligne, et est suivi par une nouvelle
ligne; par exemple, <p>, <h1>, <h2>, <h3>, <ul>, <ol>, <dl>, <pre>,
<blockquote>, et <address> sont des éléments bloc.
un élément en ligne peut apparaı̂tre au sein de phrases; par exemple, <em>,
<strong>, <sup>, <sub>, <big>, <small>, <ins>, <del>, <code>,
<cite>, et <dfn> sont des éléments en ligne.
Remarque
Les éléments bloc peuvent contenir d’autres éléments bloc ou en ligne Les
éléments en ligne ne peuvent apparaı̂tre qu’au sein d’éléments bloc, et ne peuvent
pas contenir d’éléments bloc.
34
Grouper les éléments avec <div> et <span>
Ces éléments permettent de grouper plusieurs éléments dans une page. Plus
précisément,
<div> est utilisé pour grouper des éléments bloc
<span> est utilisé pour grouper des éléments en ligne
Exemple
<div class="gras">
<p> Lorsque l’alarme <span class="rouge" sonne </span> <
...
Remarque
Les éléments <div> et <span> n’affectent pas l’apparence de la page, mais sont
communément utilisés avec CSS pour associer des styles à des sections de page.
35
Exemple
.gras { font-weight:bold; }
.rouge { color:red; }
<p> En cas de danger, d’accident ...
... d’appel d’URGENCE : tél xxxx. </p>
<div class="gras">
<p> Lorsque l’alarme d’évacuation sonne
</p>
<ul>
<li> suivre les consignes </li>
<li> et surout ne <span class="rouge">
jamais pleurer </span> </li>
<li> ni <span class="rouge">
jamais paniquer </span> </li>
</ul>
</div>
36
Plan
1
Introduction
2
Éléments et attributs élémentaires
3
Listes et Tables
4
Liens et images
5
Formulaires
6
Audio / Video (HTML5)
7
Encore plus de HTML5
37
Listes
Unordered lists (<ul>) : sont des listes à puces
Ordered lists (<ol>) : sont des listes numérotées
Definition lists (<dl>) : permettent de spécifier des termes et leurs définitions
Chaque élément d’une liste est :
contenu dans un élément <li> pour les listes <ul> et <ol>;
composé d’un élément <dt> (le terme à définir) et d’un élément <dd> (la
définition du terme) pour les listes <dl>.
Exemple
<ul>
<li>HTML</li>
<li>CSS</li>
</ul>
Remarque
Vous devez utiliser CSS pour contrôler la numérotation des listes <ol>.
38
Exemple
<h3> Une liste non numérotée </h3>
<ul>
<li>HTML</li>
<li>CSS</li>
<li>PHP</li>
</ul>
<h3> Une liste numérotée </h3>
<ol>
<li>HTML</li>
<li>CSS</li>
<li>PHP</li>
</ol>
<h3> Une liste de définitions </h3>
<dl>
<dt>HTML</dt>
<dd>Hypertext Markup Language</dd>
<dt>CSS</dt>
<dd>Cascading Style Sheet</dd>
<dt>PHP</dt>
<dd>Hypertext Preprocessor</dd>
</dl>
39
Listes imbriquées
Faire attention d’écrire proprement les listes imbriquées. Par exemple,
Exemple
<ul>
<li>Deux roues</li>
<li>Quatre roues
<ol>
<li>Automobiles</li>
<li>Camions</li>
</ol>
</li>
</ul>
. Deux roues
. Quatre roues
1. Automobiles
2. Camions
40
Tables
Les tables sont constituées de lignes et de colonnes. A chaque intersection d’une
ligne et d’une colonne, on trouve une cellule. Une table est écrite ligne par ligne.
Les éléments utilisés pour construire des tables sont :
<table>
<tr> (table row): pour construire une ligne
<td> (table data): pour construire une cellule
<th> (table heading): pour construire une cellule en-tête pour une ligne ou
colonne ; habituellement rendu en gras.
Exemple
<table>
<tr> <th>Quarter 1 (Jan-Mar)</th>
<td>11200.00</td> ...
Attention !
Chaque cellule doit être un élément <td> ou <th>, même si l’élément est vide.
41
Exemple
th,td { border: 1px solid black;
padding:10px; }
<table>
<tr>
<th></th>
<th>Charges</th>
<th>Revenus</th>
<th>Profit</th>
</tr>
<tr>
<th>Jan-Mar</th>
<td>112</td>
<td>218</td>
<td><em>106</em></td>
</tr>
...
<tr>
<th>Oct - Dec</th>
<td>118</td>
<td>229</td>
<td><em>110</em></td>
</tr>
</table>
42
Attributs pour <table> et <tr>
Pour l’élément <table>:
summary fournit une description succincte de la table (utile pour les lecteurs
d’écran)
les autres attributs (autres que ceux qui sont universels ou d’évènement) sont
dépréciés.
Pour l’élément <tr>:
char is used to specify that the content of each cell within the row must be
aligned around the first instance of a particular character known as an axis
separator; currently, not really supported by browsers
charoff may also be associated with char;
les autres attributs (autres que ceux qui sont universels ou d’évenement) sont
dépréciés.
43
Attributs pour <td> et <th>
colspan and rowspan spécifie combien de colonnes et de lignes une
cellule doit enjamber
abbr est utilisé pour fournir une version abrégée du contenu de la cellule
headers indicate (for voice browsers) which headers correspond to that cell;
its value is a space-separated list of the header cell’s id attribute values
scope defines a way to associate header cells and data cells in a table
char and charoff, defined as for <tr>
axis allows you to add conceptual categories to cells (to be used
programmatically)
les autres attributs (autres que ceux qui sont universels ou d’évènement) sont
dépréciés.
Remarque
Un attribut donné pour un élément <td> et <th> remplace un attribut similaire
d’un élément contenant tel que <tr> ou <table>.
44
Enjambement de lignes et de colonnes
Notons que si la table possède 3 colonnes et qu’une cellule enjambe 2 colonnes
dans une ligne, nous n’avons besoin que de 2 éléments <td> sur cette ligne.
Exemple
<table>
<tr>
<td class="col1" colspan="3">&nbsp;</td>
...
Remarque
Si une cellule n’a pas de contenu, inclure &nbsp; pour éviter des problèmes avec
certains navigateurs.
45
Exemple
<h3> colspan </h3>
<table>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>&nbsp;</td>
<td colspan="2">&nbsp;</td>
</tr>
<tr>
<td colspan="3">&nbsp;</td>
</tr>
</table>
46
Head, Body and Foot
A table can be divided into three portions:
a header, using the element <thead>
a body using the element <tbody>
a foot using the element <tfoot>
The separation of the parts of the table allows for richer formatting of tables by
browsers (e.g., for aural browsers, or when printing a table).
Remarque
A table may contain several <tbody> elements to indicate different ”pages”.
Attention !
The <tfoot> element must appear before the <tbody> element in the code.
47
Exemple
<table>
<thead>
<tr>
<td colspan="4">Tête de table</td>
</tr>
</thead>
<tfoot>
<tr>
<td colspan="4">Pied de table</td>
</tr>
</tfoot>
<tbody>
<tr>
<td>Cell 1</td>
<td>Cell 2</td>
<td>Cell 3</td>
<td>Cell 4</td>
</tr>
<tr>
<td>Cell 1</td>
<td>Cell 2</td>
<td>Cell 3</td>
<td>Cell 4</td>
</tr>
</tbody>
...
</table>
48
Légendes et groupes de colonnes
Pour ajouter une légende, il suffit d’insérer une élément <caption> avant la
première ligne.
Pour formatter (avec CSS) des groupes de colonnes adjacentes, définir de tels
groupes avec l’élément <colgroup> et l’attribut span.
Exemple
<table>
<caption>This is the caption</caption>
<colgroup span="4" />
<colgroup span="2" />
<tr>
...
Remarque
Il est possible d’affiner le concept de groupes de colonnes en utilisant l’élément
<col>.
49
Exercice
Écrire le code HTML pour reproduire le tableau suivant :
50
Plan
1
Introduction
2
Éléments et attributs élémentaires
3
Listes et Tables
4
Liens et images
5
Formulaires
6
Audio / Video (HTML5)
7
Encore plus de HTML5
51
Hyperliens
Les hyperliens permettent au visiteur de naviguer entre des sites web distants en
cliquant sur des mots, phrases et images.
Pour créer un lien vers un autre document, utiliser l’élément <a>. La syntaxe
minimale pour son utilisation est :
<a href="URL"> </a>
Il est de bon usage de :
rendre le contenu de vos liens concis et précis
utiliser l’attribut title, affiché comme information contextuelle lorsque
l’utilisateur passe sur le lien
Exemple
<a href="http://www.google.com/" title="Search the Web
with Google">Google</a> is a very popular search engine.
52
URL
URL stands for Uniform Resource Locator. The general syntax is:
protocol://user:pass@host:port/path?query#anchor
Elements of a URL
The protocole, or scheme name, identifies the type of URL you are linking;
typically, this is http, but it may be https, ftp, file, ...
The username and password are optional (required for a password-protected
part of a site).
The host (name) or IP address gives the destination location for the URL.
The port number is optional; if omitted, the default for the scheme
(protocol) is used.
The path is used to find the resource specified; it is case-sensitive.
The query string contains data to be passed to web applications.
The anchor part when used with HTTP specifies a precise location on the
page.
53
URL
La plupart du temps, une URL est une simple URL absolue :
http://host/path
Elle peut aussi être une URL relative (i.e. la machine hôte est absente) :
path
Exemple
http://www.lemonde.fr/international/
page2.html
http://www.arte.tv/fr/70.html
Remarque
Quand le chemin ne se termine pas par un nom de fichier, le serveur web retourne
un fichier par défaut (e.g. index.html), ou un message d’erreur.
54
Ancres
Il y a 2 types d’ancre qui peuvent être créés avec <a> :
les ancres sources, qui sont construites en utilisant
<a> avec l’attribut href
les ancres destinations, qui sont construites en
utilisant <a> avec l’attribut id
Remarque
Les ancres sources sont celles auxquelles pensent les gens lorsqu’on évoque les
hyperliens. C’est quelque chose sur lequel on clique et qui nous amène quelque
part ailleurs.
55
Ancres destinations
Une ancre destination permet au créateur d’une page de marquer des points
spécifiques dans une page qu’il est possible d’accéder par des ancres sources.
Usages communs :
Liens “Back to top” au bas de (sections de) longues pages
Tables des matières permettant à l’utilisateur d’accéder à la section voulue
Liens vers des notes de bas de pages ou définitions
La valeur de l’attribut href d’une ancre source qui établit un lien vers une ancre
destination doit être la valeur de l’attribut id de l’ancre destination précédée du
caractère #.
Remarque
Il est possible pour une ancre source de créer un lien avers n’importe quel élément
possédant un attribut id.
56
Ancres sources et destinations
Exemple
<a id="pagetop">Navigation</a>
...
...
<a href="#pagetop">Page
top</a>
Attention !
Le contenu de l’ancre destination ne doit pas être vide.
57
Exemple
<h1><a id="top">Wrox Cafe Menu</a></h1>
<nav>
<a href="#starters">Starters</a> |
<a href="#mains">Main Courses</a> |
<a href="#desserts">Desserts</a>
</nav>
<p>Welcome </p>
<h2><a id="starters">Starters</a></h2>
<ul>
<li>Chestnut and Mushroom Goujons
(<a href="#vege">v</a>)</li>
<li>Goat Cheese Salad
(<a href="#vege">v</a>)</li>
<li>Honey Soy Chicken Kebabs</li>
<li>Seafood Salad</li>
</ul>
<p><small><a href="#top">Back to top</a><
/small></p>
<h2><a id="desserts">Desserts</a></h2>
...
<p><a id="vege">Items with a (v) are
suitable for vegetarians.</a></p>
58
Attributs pour <a>
In addition to the universal attributes (i.e. core and internationalization
attributes) and the UI event attributes, we find:
accesskey: provides a keyboard shortcut on a source anchor to activate a
link; ALT + SHIFT + accesskey for Firefox (≥ 2)
target: specifies in which window/frame the linked document will be
opened; use " blank" to open it in a new window and " self" for the
same window
tabindex: specifies the order in which, when the TAB key is pressed, the
links (or form controls) obtain focus
charset: indicates the character encoding of the linked document (e.g.,
UTF-8 or ISO-8859-1)
hreflang: specifies the language of the linked document (e.g., fr)
type: specifies the MIME type of the linked document
coords and shape: to deal with image maps
rel and rel: see documentation
59
Linking to E-mail Addresses
To open a new e-mail in the user’s default e-mail program, with a given e-mail
address, the syntax is:
<a href="mailto:[email protected]">E-mail me</a>
Remarque
It is possible to specify the subject, the body, the cc and the bcc of the message.
For example,
<a href="mailto:[email protected]?subject=XHTML&[email protected]">...</a>
Attention !
The address can be retrieved to be spammed. Use e-mail forms (with a server-side
scripting language such as JSP or PHP) or Javascript to protect it.
60
Images
En HTML, nous pouvons :
ajouter des images aux documents
utiliser les images comme hyperliens
diviser une image en sections associées à différents hyperliens; ceci est appelé
image map
Attention !
Attention à la taille des fichiers d’image.
Attention !
Les images sont soumises à des copyright.
61
Images
Les navigateurs tendent à supporter trois formats d’images bitmap :
GIF (Graphics Interchange Format) using 256 colors (8-bit GIF) or 16 colors
(4-bit GIF)
JPEG (Joint Photographic Experts Group Format)
PNG (Portable Network Graphics) using 256 colors (8-bit PNG) or many
more (24-bit PNG)
62
L’élément <img>
Pour inclure une image, utiliser <img> avec au moins 2 attributs :
src: nécessaire pour spécifier l’URL de l’image à charger ; l’URL peut être
absolue ou relative
alt: nécessaire pour spécifier une alternative textuelle à l’image au cas où
l’utilisateur ne pourrait la voir.
Exemple
<img src="logo-IUT.gif" alt="logo IUT de Lens" />
Remarque
Il est important que la valeur de l’attribut alt décrive réellement l’image. Une
image peut ne pas être visible pour 2 raisons :
le fichier n’a pas été trouvé par le navigateur
l’utilisateur est malvoyant
Cependant, si l’image est seulement utilisée pour améliorer la mise en place de la
page (et donc ne fournit aucune information), utiliser simplement alt="".
63
L’élément <img>
In addition to the universal and UI event attributes, <img> can also carry the
following attributes:
width and height: specify the width and height of the image (in pixels);
it allows the browser to lay out the image quicker
longdesc: used to indicate the URL of a document containing a detailed
description of the image
ismap and usesmap: used with image maps
align, border, hspace, vspace and name, which are deprecated
Attention !
If you want to display the image a lot smaller, you should create a new
reduced-size version of the image (thumbnail), instead of using width and/or
height attributes.
64
Exemple
<p>
Taille originale : width 311
height
300 <br />
<img src="penguin2.png" alt="penguin"
width="311" height="300" />
</p>
<p>
Rétrécissement : height 150 (sans
width) <br />
<img src="penguin2.png" alt="penguin"
height="150" />
</p>
<p>
Déformation : width 300
height 150 <
br />
<img src="penguin2.png" alt="penguin"
width="300" height="150" />
</p>
65
Images comme liens et Image Maps
Pour convertir une image en hyperlien, plutôt que de placer du texte au sein d’un
élément <a>, il suffit de placer une image.
Exemple
<a href="index.html" title="click to return home">
<img src="images/banana.gif" alt="Banana" /> </a>
On the other hand, image maps allow you to specify several links that correspond
to different clickable areas, called hotspots, of one single image. There are two
types of image maps:
Server-side image maps
Client-side image maps
Attention !
The hotspots shouldn’t be too small. Besides, you should put text links at the
bottom of the page, and indicate this with the alt attribute of the image.
66
Server-side Image Maps
The image is put inside a <a> element. A special attribute ismap is used, which
tells the browser to send the server the coordinates x, y where the user’s mouse
was when he/she clicked.
Exemple
<a href="map.php">
<img src="images/states.gif"
alt="Map of U. States"
ismap />
</a>
If the user clicks the image at position (50,75)
then the browser will send the following query
to the server:
http://www.example.org/map.php?50,75
67
Client-side Image Maps
To build one, we use the elements <map> and <area>. The image that forms
the map is an element <img> with an attribute usemap. The value of this
attribute is the value of the name attribute of the element <map> preceded by #.
The element <map> carries the attribute name and contains several <area>
elements.
Exemple
<img src="images/gallery_map.gif" alt="Gallery Map"
width="500" height="300" usemap="#gallery" />
<map id="idGallery" name="gallery">
<area shape="circle" coords="154,150,59"
href="foyer.html" alt="Gallery foyer" />
...
Remarque
There is another way of building an image map with an element <map> inside an
<object> element.
68
Exemple
69
Plan
1
Introduction
2
Éléments et attributs élémentaires
3
Listes et Tables
4
Liens et images
5
Formulaires
6
Audio / Video (HTML5)
7
Encore plus de HTML5
70
Formulaires (forms)
Chaque fois que vous souhaitez collecter des informations de la part d’un visiteur
de votre site, un formulaire est requis. Vous pouvez créer un formulaire en
combinant un certain nombre de composants :
zones/champs de saisie (Text fields)
bouttons (Buttons)
cases à cocher (Checkboxes)
listes à choix multiple (Select lists)
...
Attention !
HTML est utilisé uniquement pour présenter le formulaire à l’utilisateur; il ne
permet pas de traiter directement les données du formulaire.
71
Formulaires
Une fois que l’utilisateur a rempli le formulaire, il doit typiquement cliquer sur un
bouton pour envoyer les données vers un serveur. Les données sont envoyées au
serveur sous la forme de couples nom/valeur, un couple par composant du
formulaire :
le nom corresponds au nom du composant du formulaire
la valeur est celle que l’utilisateur a entrée ou sélectionnée
Exemple
<form action="http://www.totosa.fr/search.php"
method="get"
id="idSearch">
...
</form>
Attention !
Chaque élément <form> doit être accompagné au mois des 2 attributs action
et method.
72
Attributs pour l’élément <form>
action spécifie où envoyer les données du formulaire ; la valeur est une
URL correspondant à une page/programme sur une serveur web.
method spécifie la méthode à employer pour envoyer les données ; cela peut
être "get" ou "post"
enctype spécifie la manière dont les données doivent être encodées avant
d’être envoyées ; utiliser "multipart/form-data" comme valeur quand
un composant de formulaire est un “file upload control”
onsubmit et onreset peuvent être utilisées pour lancer une procédure de
contrôle (e.g. avec Javascript) quand l’utilisateur clique sur un bouton de
type submit ou reset
Attention !
Un formulaire peut contenir des éléments tels que des paragraphes, des en-têtes ...
mais ne peut pas contenir un autre formulaire.
73
Zones de saisie et boutons
Il y a 3 types de composants zones/champs de saisie :
champ de saisie (simple-ligne) en utilisant l’élément <input> avec l’attribut
type fixé à la valeur "text"
champ mot-de-passe en utilisant l’élément <input> avec l’attribut type
fixé à la valeur "password"
zone de saisie (multi-ligne) en utilisant l’élément <textarea>
Il ya 3 façons de créer un bouton :
en utilisant l’élément <input> avec l’attribut type fixé à la valeur
"submit", "reset" ou "button";
en utilisant l’élément <input> avec l’attribut type fixé à la valeur
"image";
en utilisant l’élément <button> avec l’attribut type fixée à la valeur
"submit", "reset" ou "button".
74
Champ de saisie
Un tel composant est créé avec l’élément <input> dont l’attribut type vaut
"text". En plus des attributs universels, les autres attributs de <input> sont :
name: donne le nom du couple nom/valeur qui est envoyé au serveur
value: fournit une valeur initiale
size: spécifie la largeur du champ en terme de caractères pouvant être
affichés
maxlength: spécifie le nombre maximal de caractères qu’un utilisateur peut
entrer
disabled, readonly, tabindex et accesskey
Exemple
<p> Search the site:
<input type="text" name="txtSearch" />
</p>
75
Exemple
<form action="http://..." method="get">
<p> Search the site:
<input type="text"
name="txtSearch" size="20"/>
</p>
<input type="submit" value="Search"/>
</form>
76
Champ mot-de-passe
Un tel composant est créé avec l’élément <input> dont
l’attribut type vaut "password". Le champ masque les
caractères tapés en les remplaçant par un point ou une
astérisque.
Exemple
<input type="password" name="pwdPassword"
size="20" maxlength="20" />
Attention !
Les mot-de-passes sont cachés à l’écran mais envoyés au serveur en texte clair. De
manière à les rendre sécurisés, il faut une connexion SSL entre le client et le
serveur.
77
Exemple
<form action="http://..." method="get">
<p> Username:
<input type="text"
name="txtUser" size="20" />
</p>
<p> Password:
<input type="password"
name="pwdPass" size="20" />
</p>
<input type="submit" value="Log in" />
</form>
78
Zones de saisie
Un tel composant est créé avec l’élément <textarea>. Il permet à l’utilisateur
d’entrer plus d’une ligne de texte.
Exemple
Please, tell us what you think: <br />
<textarea name="txtFeedback" rows="10" cols="50" >
Enter your feedback here.
</textarea>
Remarque
Les attributs rows et cols spécifient le nombre de lignes et de colonnes du
composant textarea.
Attention !
Vous avez toujours besoin d’une balise ouvrante et d’une balise fermante pour
<textarea>, même si le contenu est vide (à cause de certains navigateurs).
79
Exemple
<form action="http://..." method="get">
Please, tell us your opinion: <br />
<textarea name="txtFeedback"
rows="10" cols="50" >
Enter your feedback here.
</textarea>
<br />
<input type="submit" value="Submit" />
</form>
80
Boutons avec <input>
Avec l’élément <input>, le type de bouton que vous créez est spécifié à l’aide de
l’attribut type. Ses valeurs possibles sont :
"submit": crée un bouton qui soumet automatiquement les données du
formulaire (lorsqu’on clique dessus)
"reset": crée un bouton qui réinitialise automatiquement les composants à
leurs valeurs initiales
"button": crée un bouton qui peut être utilisé pour exécuter un script coté
client
Exemple
<input type="submit" value="Soumission" />
<input type="reset" value="Clear" />
<input type="button" value="Calcul" onclick="calculer()" /
Remarques
L’attribut value spécifie le texte affiché sur le bouton. Les attributs onclick,
onfocus et onblur peuvent être utilisés pour lancer une procédure de contrôle.
81
Utiliser des images pour les boutons
Vous pouvez utiliser une image pour un bouton plutôt que
d’utiliser un bouton standard. Un tel composant est créé
avec <input> dont l’attribut type vaut "image". Nous
avons besoin de 2 attributs supplémentaires :
"src": spécifie la source du fichier contenant l’image
"alt": fournit une alternative textuelle à l’image
Exemple
<input type="image" name="btnPanic"
src="imagePanic.gif" alt="submit" />
Remarque
Un bouton image est un bouton de type submit. En outre, les coordonnées x et y
de l’endroit où l’utilisateur a cliqué sont envoyées au serveur.
82
Exemple
input, button { margin-bottom:10px; }
<form action="http://..." method="get">
<p> Name
<input type="text" name="txtName" />
</p>
<input type="submit" name="btnVoteRed"
value="Vote for reds" />
<input type="submit" name="btnVoteBlue"
value="Vote for blues" />
<br />
<input type="reset" value="Clear" /> <br>
<input type="button" value="Calculate"
onclick="calculate()" /> <br />
<input type="image" name="btnImage"
src="submit.gif" alt="submit" />
</form>
83
L’élément <button>
L’élément <button> est un ajout plus récent (que <input>) qui permet de
spécifier le texte figurant sur le bouton entre les balises ouvrantes et fermantes.
Exemple
<button type="submit"> Submit </button>
<button type="reset">
<strong> Clear this form </strong>
</button>
<button type="button"> Compute something </button>
<button type="button">
<img src="images/submit.gif" alt="Another submit" />
</button>
Attention !
Faire attention à cet élément car les navigateurs le traitent différemment.
84
Exemple
<form action="http://..." method="get">
<button type="submit">Submit</button>
<br />
<button type="reset">
<strong> Clear this form </strong> I
want to start again
</button>
<br />
<button type="button">
Compute something
</button>
<br />
<button type="button">
<img src="fig.gif" alt="submit" />
</button>
</form>
85
Cases à cocher
L’utilisateur peut basculer entre les positions on et off en cliquant sur la case à
cocher. Un tel composant est créé avec <input> dont l’attribut type vaut
"checkbox". Ce composant est idéal pour :
fournir une simple réponse oui/non avec une case à cocher
sélectionner plusieurs items d’une liste d’options possibles
Exemple
<input type="checkbox" name="chkAccept" checked />
I accept the terms ... <br />
<input type="checkbox" name="chkSkills" value="css"/> CSS <br />
<input type="checkbox" name="chkSkills" value="php"/> PHP <br />
Remarques
En l’absence de l’attribut value, la valeur est automatiquement "on".
Plusieurs cases à cocher peuvent partager le même nom.
86
Exemple
<form action="http://..." method="get">
<b> Quelles sont vos compétences ? </b>
<input type="checkbox" name="chkSkills"
value="html" /> HTML <br />
...
<input type="checkbox" name="chkSkills"
value="php" /> PHP <br />
<input type="submit" value="Submit" />
</form>
<br />
<form action="http://..." method="get">
<input type="checkbox" name="ack"
checked />
I accept the conditions <br />
< input type="submit" />
</form>
87
Boutons radios
L’utilisateur peut sélectionner une seule option à un moment donné dans un
groupe qui a été déclaré. Un tel composant est créé avec <input> dont
l’attribut type vaut"radio".
Exemple
<input type="radio" name="radClass"
value="First"/> First class
<input type="radio" name="radClass"
value="Business"/> Business class
Remarque
Un groupe de boutons radios correspond à tous les boutons radio partageant la
même valeur de l’attribut name.
Attention !
Vous devez fournir au moins 2 boutons radios dans chaque groupe.
88
Exemple
<form action="http://..." method="get">
<b> En quelle classe voulez-vous
voyagez ? </b> <br />
<input type="radio" name="radClass"
value="First"/> Première <br />
<input type="radio" name="radClass"
value="Biz"/> Business <br />
<input type="radio" name="radClass"
value="Eco"/> Economie <br />
<input type="submit" value="Send" />
</form>
89
Exercice
On souhaite écrire le formulaire suivant qui comporte un champ de saisie, trois
cases à cocher et un bouton submit. Pour chaque case à cocher, la description est
donnée ici par une image. Les images sont des icônes de taille 32x32 pixels et ont
pour nom java.png, python.png et php.png.
Attention !
Dans la “vraie vie”, on évitera d’utiliser une image plutôt que du texte pour une
utilisation aussi sensible.
90
Listes à choix multiple
Une liste à choix multiple permet de sélectionner un item dans une liste
déroulante, et peut prendre bien moins de place qu’un groupe de boutons radios.
Un tel composant est créé avec <select> contenant plusieurs éléments
<option>.
Exemple
<select name="selColor">
<option value="red"> Red </option>
<option value="green"> Green </option>
...
</select>
Parmi les attributs pour <select>, on trouve :
size: spécifie le nombre de lignes de la liste pouvant être visibles à un
instant donné; on peut alors obtenir une liste avec un ascenseur
multiple: permet de sélectionner plusieurs items dans la liste
91
Exemple
<form action="http://..." method="get">
<select name="selColor">
<option selected value="">Select color
</option>
<option value="red"> Red </option>
<option value="green"> Green </option>
<option value="blue"> Blue </option>
</select>
<input type="submit" value="Choose" />
</form>
<form action="http://..." method="get">
<select name="selDay" size="4" >
<option value="Mon">Monday</option>
<option value="Tue">Tuesday</option>
...
<option value="Sun">Sunday</option>
</select>
<input type="submit" value="Submit" />
</form>
92
Grouping Options
It is possible to group options using the <optgroup> element which acts as a
container for several options. The <optgroup> element can carry a label
attribute.
Exemple
<select name="sellInformation">
<optgroup label="Hardware">
<option value="Desktop"> Desktop computers </option>
<option value="Laptop"> Laptop computers </option>
</optgroup>
...
Remarque
To initially have one option selected, you must write
<option selected ...
93
File Upload Controls
You can propose a form control in order to allow the user to upload a file to the
server. Such a control is created by an element <input> with an attribute type
whose value is "file".
Exemple
<form enctype="multipart/form-data" ...>
<input type="file" name="fileUpload" accept="image/*" />
...
Remarque
The enctype attribute of the <form> alement indicates here that only files with
an image format can be uploaded; but this is partially supported by browsers.
Attention !
The method and enctype attributes of the <form> element must be given the
values "post" and "multipart/form-data", repectively.
94
Composants cachés
Pour passer de l’information entre différentes pages
sans que l’utilisateur ne le voie, vous pouvez utiliser
un composant caché. Un tel composant est créé avec
<input> dont l’attribut type est fixé à "hidden".
Exemple
<input type="hidden" name="hidName" value="toto" />
Attention !
L’information contenue dans le composant caché ne doit pas être confidentielle
car elle est visible dans le code source.
95
Exemple
<form action="http://..." method="post"
enctype="multipart/form-data">
<input type="file" name="fileUpload"
accept="image/*" /> <br /> <br />
<input type="submit" value="Submit" />
</form>
<p>
<strong>
NB : Il est nécessaire d’utiliser
method="post".
</strong>
</p>
<br />
<form action="http://..." method="get">
<input type="hidden" name="secret"
value="coucou" />
<input type="submit" value="Click here.
" />
</form>
96
L’élément <label>
Pour tout composant de formulaire n’ayant pas un attribut label, il est de
bonne pratique d’utiliser l’élément <label>. La valeur de l’attribut for de
l’élément <label> doit être la valeur de l’attribut id d’un composant.
Exemple
<tr>
<td> <label for="idName"> User name </label> </td>
<td> <input type="text" id="idName" name="txtName" /> </td>
Remarque
Pour un champ de saisie, il est habituel de placer le label à gauche, tandis que
pour les cases à cocher et les boutons radios c’est à droite.
Remarque
Une alternative est d’utiliser l’élément <label> en tant que conteneur, mais cela
ne permet pas de contrôler complètement l’endroit où le label sera positionné.
97
Elts <fieldset> and <legend>
Pour de grands formulaires, les éléments
<fieldset> et <legend> peuvent aider à grouper
les composants :
<fieldset> crée une bordure
<legend> ajoute une légende
Exemple
<fieldset>
<legend> <em> Contact Information </em> </legend>
<label> First name: <input type="text" name="txtFName" />
...
Attention !
Lorsqu’il est utilisé, l’élément <legend> doit toujours être le premier fils de
l’élément <fieldset>.
98
Exemple
<form>
<fieldset>
<legend> <em> Connectez vous </em>
</legend>
<table>
<tr>
<td> <label for="idName">
User name </label> </td>
<td> <input type="text" id="idName"
name="txtUserName" /> </td>
</tr>
<tr>
<td> <label for="idPwd"> Password </
label> </td>
<td> <input type="password" id="idPwd"
name="pwdPassword" /> </td>
</tr>
</table>
</fieldset>
<p> <input type="submit" value="Send" /> </p>
</form>
<p>
<strong> NB : Ne pas utiliser methood="get"
dans la vraie vie car le mot de passe est
visible lors de l’envoi.
</strong>
</p>
99
Contrôler le focus
Les éléments avec lesquels l’utilisateur peur interagir peuvent recevoir le focus.
Pour contrôler l’ordre dans lequel les éléments peuvent obtenir le focus, utiliser
l’attribut tabindex avec une valeur comprise entre 0 et 32767.
Exemple
<input type="checkbox" name="chkN" value="1" tabindex="3"
<input type="checkbox" name="chkN" value="2" tabindex="7"
Remarque
0 est pour les éléments sans l’attribut tabindex.
Attention !
Un élément désactivé (disabled) ne peut obtenir le focus.
100
Access Keys
Access keys représentent des raccourcis clavier.
Exemple
<legend accesskey="c">
Contact Information (SHIFT + ALT + C)
</legend>
...
<input accesskey="e" type="submit" value="Enter" />
Les éléments suivants peuvent être accompagnés de l’attribut accesskey :
<a>, <area>, <button>, <input>, <label>, <legend>,
<textarea>
les éléments suivants peuvent être accompagnés de l’attribut tabindex :
<a>, <area>, <button>, <input>, <object>, <select>,
<textarea>
101
Composants désactivés et en lecture seule
Certains composants de formulaire peuvent porter les attributs disabled et
readonly.
readonly: spécifie que l’utilisateur ne peut changer la valeur du composant
(mais un scripte peut). Un couple nom/valeur pour le composant est envoyé
lorsque le formulaire est soumis.
disabled: spécifie que l’utilisateur ne peut changer la valeur du composant
(mais un scripte peut réactiver le composant). Un couple nom/valeur pour le
composant n’est pas envoyé au serveur lorsque le formulaire est soumis.
102
Attribut placeholder
Cet attribut permet de placer une indication au niveau de certains éléments
<input>, disparaissant dés que l’utilisateur entre une information.
Exemple
<input type="text" name="query" placeholder="Recherche">
<button type="submit">OK</button>
<input type="text" name="lgn" placeholder="Nom d’utilisateur">
<input type="password" name="pwd" placeholder="Mot de passe">
<button type="submit">Se connecter</button>
103
Validation : HTML
Un test de validation est effectué à chaque soumission (bouton submit) pour tout
controle ayant l’attribut required Pour une validation instantanée (c’est-à-dire,
dés que l’utilisateur quitte un champ), il faut utiliser Javascript.
Remarque
Pour désactiver (temporairement) la validation au niveau d’un formulaire, il faut
utiliser novalidate au niveau de l’élément <form>. Une alternative est
d’utiliser formnovalidate au niveau d’un bouton (submit).
Exemple
<form ... novalidate>
<input type="text" name="login" required>
<input type="text" name="mail" required>
...
104
Validation : CSS
Il est possible d’utiliser les pseudo-classes suivantes pour accompagner la gestion
de validation :
:required, pour tout élément <input> ayant l’attribut required
:optional, pour tout élément <input> n’ayant pas l’attribut required
:valid et :invalid pour tout élément valide et invalide couramment
:in-range et :out-of-range pour les éléments qui utilisent les
attributs min et max
Exemple
input:required:invalid {
background-color:lightyellow;
}
105
Validation : expressions régulières et attribut pattern
Il est possible d’utiliser l’attribut pattern pour forcer le texte tapé à respecter
une certain forme, donnée par une expression régulière.
Exemple
<label for="promoCode">Promotion Code</label>
<input id="promoCode" placeholder="QRB-001" title=
"Your promotion code is three uppercase letters, a dash,
then three numbers" pattern="[A-Z]{3}-[0-9]{3}">
Remarque
Certaines
106
Validation : Javascript
Il est possible d’utiliser la fonction setCustomValidity de Javascript pour
controler la validité du texte tapé.
Exemple
<script>
function validerCommentaire(control) {
if (control.value.length < 20)
control.setCustomValidity("Commentaire trop court.");
else
control.setCustomValidity(""); // pas d’erreur
}
</script>
<textarea oninput="validerCommentaire(this)" required>
</textarea>
107
Validation : Polyfill
Pour gérer les problèmes rencontrés avec les navigateurs anciens (type IE), étudier
les solutions sur http://tinyurl.com/polyfills, comme par exemple
http://tinyurl.com/html5forms.
Exemple
<script src="shared/js/modernizr.com/Modernizr-2.5.3.forms.j
</script>
<script src="shared/js/html5Forms.js"
data-webforms2-support="all"
data-webforms2-force-js-validation="true">
</script>
Remarque
On peut simplement énumérer les fonctionnalités dont on a besoin comme par
exemple :
data-webforms2-support="validation,placeholder"
108
Attributs autofocus et autocomplete
autofocus permet de placer le focus sur un controle <input> donné.
autocomplete permet d’éviter l’auto-completion lorsque cela est sensible
(login, etc.) ; valeurs on/off.
Exemple
<form ... autocomplete="off">
<input type="text" name="login" autofocus>
...
Remarque
Il n’est possible d’utiliser autofocus qu’une seule fois par formulaire.
109
Attributs autocorrect, autocapitalize ...
Il peut etre pertinent de régler certains de ces attributs, notamment pour certains
mobiles.
autocorrect pour la correction automatique (on/off).
autocapitalize pour la mise en majuscule automatique (on/off).
spellcheck (true/false)
Exemple
<form autocomplete="off" autocapitalize="off" autocorrect="off">
<input name="name" placeholder="Please enter your name"><br>
<input name="street" placeholder="Please enter street"><br>
<textarea cols="10" rows="8" ></textarea>
</form>
110
Nouveaux controles (HTML5)
Nouvelles valeurs de type pour <input> :
email, adresse unique ou liste (avec la virgule comme séparateur) si
l’attribut multiple est positionné
tel
url
number, nombre avec la possibilité d’encadrer celle-ci avec les attributs min
et max et de gérer les parties fractionnaires avec step
range, pour choisir un nombre à l’aide d’un slider
color, pour choisir une couleur à l’aide d’une boite de dialogue
search
Exemple
<label for="email">Email <em>*</em></label>
<input id="email" type="email" required>>
<label for="age">Age<em>*</em></label>
<input id="age" type="number" min="0" max="120" step="0.5">
111
Nouveaux controles (HTML5)
Pour entrer une date ou heure, nous disposons des valeurs suivantes de type
pour <input> :
date, pour choisir une couleur à l’aide d’une boite de dialogue ; format
YYYY-MM-DD
datetime; format YYYY-MM-DDTHH:mm:ss (secondes optionnelles)
datetime-local
month ; format YYYY-MM
week, format YYYY-Www (par exemple, 2014-W02)
time ; format HH:mm:ss.ss (secondes optionnelles).
Remarque
Possibilité d’utiliser les attributs min et max. Par exemple :
<input type=”date” min=”2014-01-01” max=”2014-12-31”>
Remarque
Utiliser polyfill, par exemple la librairie HTML5Forms pour les navigateurs qui
n’implantent pas ces éléments
112
Exemple
Telephone Number:<br>
<input type="tel" name="txtTel">
Email:<br>
<input type="email" name="txtEmail">
Favorite Color:<br>
<input type="color" name="txtColor">
Date of Birth:<br>
<input type="date" name="txtDate">
113
Suggestions avec datalist
Pour créer une liste de suggestions, il faut créer un élement <datalist> en y
plaçant des <option> et l’associer à un autre élément à l’aide de l’attribut
list.
Exemple
<datalist id="animaux">
<option value="zebre">
<option value="chat">
<option value="caribou">
...
<option value="crabe">
</datalist>
...
<input list="animaux">
Remarque
Il est possible d’utiliser l’attribut label en plus de value ; le label sera affiché,
la veleur sera envoyée.
114
Elements <progress> et <meter>
L’élément <progress> affiche une barre de progression palpitante, sauf si une
valeur est donnée à l’attribut value. L’élément <meter> affiche une barre
(jauge) indiquant une valeur relative par rapport à un intervalle.
Exemple
<progress>Task in progress...</progress>
<progress value=0.50>50%</progress>
<progress max=200 value=100>50%</progress>
<meter min="5" max="70" value="28">28 pounds</meter>
<meter min="5" max="100" high="70" value="79">79 pounds</meter>
Remarque
Un jeu de couleurs est utilisé pour les jauges selon que les valeurs soient jugées
basses ou élevées par rapport aux valeurs des attributs low and high.
115
Plan
1
Introduction
2
Éléments et attributs élémentaires
3
Listes et Tables
4
Liens et images
5
Formulaires
6
Audio / Video (HTML5)
7
Encore plus de HTML5
116
Technologies
Encore à venir pour HTML5 :
gestion copyright (HTML 5.1 ?)
audio/video recording (element <device> ?)
controle fin du streaming et buffering
gestion dynamique pour l’audio
117
Element <audio>
Grande simplicité.
Exemple
<audio controls src="song.mp3">
</audio>
Remarque
Il est nécessaire d’utiliser une balise ouvrante et une balise fermante
118
Attributs pour <audio>
autoplay specifies that the audio will start playing as soon as it is ready
controls specifies that audio controls should be displayed (such as a
play/pause button etc)
loop specifies that the audio will start over again, every time it is finished
muted specifies that the audio output should be muted
preload avec 3 valeurs possibles :
I
I
I
auto : the browser should load the entire audio file when the page loads
metadata : the browser should load only metadata when the page loads
none the : browser should NOT load the audio file when the page loads
src specifies the URL of the audio file
119
Element <video>
Grande simplicité.
Exemple
<video controls src="film.mp4">
</video>
Remarque
Il est nécessaire d’utiliser une balise ouvrante et une balise fermante
120
Attributs pour <video>
Les mêmes que pour <audio>, et aussi :
height
width
poster qui indique le nom d’un fichier contenant une image utilisée si :
I
I
I
la première image de la video n’a pas encore été téléchargée
si l’attribut preload a comme valeur none
si le fichier video n’est pas trouvé (ou reconnu)
Exemple
<video src="video.mp4" poster="image.jpg">
</video>
Remarque
Si la boite est plus grande (valeurs explicites de heigth et width) que la video,
celle-ci est élargie dans la mseure du possible (pas de déformation)
121
Oui mais différents formats
Pour l’audio
Format
MP3
OGG Vorbis
WAV
Description
format classique
standard libre
audio brut
Extension
.mp3
.ogg
.wav
MIME
audio/mpeg
audio/ogg
audio/wav
Description
standard de l’industrie
standard libre
nouveau format (VP8)
Extension
.mp4
.ogv
.webm
MIME
video/mp4
video/ogg
video/webm
Pour la video
Format
H.264
OGG Theoria
WebM
122
Fichiers videos
Ils utilisent trois formats :
le codec video (H.264, Theoria ou WebM par exemple)
le codec audio (MP3 ou Vorbis par exemple)
le format global du container qui encapsule le tout (avec aussi par exemple
des fichiers pour les sous-titres et/ou des images)
Le type .mkv est un format qui peut utiliser du H.264 ou du Theoria.
123
Fallback
Devant le problème d’absence de standard, une solution de repli est de proposer
plusieurs formats :
Exemple
<audio controls>
<source src="song.ogg" type="audio/ogg">
<source src="song.mp3" type="audio/mpeg">
Votre navigateur n’accepte pas l’element audio.
</audio>
<video controls>
<source src="film.webm" type="video/webm">
<source src="film.mp4" type="video/mp4">
Votre navigateur n’accepte pas l’element video.
</video>
Remarque
le problème, c’est qu’il faut encoder la même séquence audio ou video de
124
Autres solutions de repli
Pour une solution hénergée (Dailymotion, Youtube, etc.), il faut uploader la video
et récupérer la ligne de code qui correspond à un élément <iframe>.
Exemple
<iframe width="420" height="315"
src="http://www.youtube.com/embed/J---aiyznGQ"
allowfullscreen>
</iframe>
Pour une solution Flah, on utilise un élément <object>.
Remarque
Possibilité d’intégrer une solution de repli Flash au sein d’un élement HTML5, ou
le contraire (non présenté ici).
125
Avec Javascript pour l’audio
Exemple
<audio id="song" src="song.mp3"></audio>
...
var audio = document.getElementById("song");
audio.play();
...
audio.pause();
audio.currentTime = 0; // pause() et cette instruction = sto
...
audio.volume=5;
alert(audio.volume + " " + audio.duration);
...
var audiobis = document.createElement("audio");
if (audiobis.canPlayType("audio/ogg"))
audiobis.src = "song2.ogg";
else if (audiobis.canPlayType("audio/mp3"))
audiobis.src = "song2.mp3";
126
Avec Javascript pour la video
Exemple
<video id="film" src="film.mp4" ontimeupdate="progress()"></
<progress id="prg" value="0"></progress>
<p id="time">0 seconde.</p>
...
var video = document.getElementById("video");
video.play();
video.playbackRate = 2;
...
function progress() {
var newValue=video.currentTime / video.duration;
document.getElementById("prg").value = newValue;
document.getElementById("time").innerHTML=video.currentTim
}
127
Sous-titres
De nombreux formats pour timed text tracking :
WebVTT (Web Video Text Tracks Format) ; extension .vtt ; voir
http://dev.w3.org/html5/webvtt/
TTML (Timed Text Markup Language) ; W3C standard mais en perte de
vitesse
...
Exemple
00:00:03.000 --> 00:00:7.000
apparaı̂t après 3 secondes jusque 7 secondes
00:01:00.000 --> 00:01:10.000
dure 10 secondes à partir d’une minute
00:01:10.000 --> 00:01:12.000
<i> sous-titre </i> en italique juste après le précédent
Remarque
Il existe des outils pour créer les sous-titres. Par exemple
http://ie.microsoft.com/testdrive/Graphics/CaptionMaker/
128
Sous-titres : élément <track>
Exemple
<video controls width="600" height="400">
<source src="movie.mp4" type="video/mp4">
<source src="movie.webm" type="video/webm">
<track src="movie.vtt" srclang="en" kind="subtitles"
label="English" default>
<track src="movieFr.vtt" srclang="fr" kind="subtitles"
label="French">
</video>
Remarque
Il existe un polyfill pour les sous-titres, tel que par exemple http://captionatorjs
129
Plan
1
Introduction
2
Éléments et attributs élémentaires
3
Listes et Tables
4
Liens et images
5
Formulaires
6
Audio / Video (HTML5)
7
Encore plus de HTML5
130
Compatibilité avec HTML5
Pour connaitre le support HTML5 de votre navigateur : http://html5test.com/
131
Compatibilité avec HTML5
Pour connaitre le support HTML5 des différents navigateurs : http://caniuse.com
132
Compatibilité avec HTML5
Pour connaitre les statistiques des navigateurs : http://gs.statcounter.com
133
Compatibilité avec HTML5
Pour connaitre les propriétés supportées par le navigateur (client), télécharger
modernizr depuis http://modernizr.com
Exemple
<head>
...
<script src="modernizr-latest.js"></script>
</head>
<body>
<p>The verdict is... <span id="result"></span></p>
<script>
var result = document.getElementById("result");
if (Modernizr.draganddrop)
result.innerHTML = "drag-and-drop supported !";
else
result.innerHTML = "drag-and-drop not supported !";
</script>
</body>
134
Nouveaux éléments sémantiques en HTML5
Plutot que d’utiliser des éléments <div> pour structurer les pages, lorsque c’est
approprié, on utilisera :
<header> : pour l’en-tete de page (et aussi de parties)
<footer> : pour le bas de page (et aussi de parties) ; typically contains the
author of the document, copyright information, links to terms of use, contact
information, etc.
<nav> : définit un ensemble de liens de navigation
<aside> : définit du contenu juxtaposé à un autre élément (sidebar)
<main> : définit le contenu principal de la page ; un seul élément par page
<article> : définit du contenu autonome (pouvant etre distribué tel quel)
<section> : définit une section de la page (normalement contient un
heading)
135
Illustration
header
header
aside
main
article
nav
header
article
nav
section
section
div
article
aside
article
footer
footer
136
Element <time>
L’élement <time> est un autre élément sémantique, nouveau en HTML5, qui
permet d’indiquer une date ou un heure, voire les deux. On utilisera l’attribut
datetime.
Exemple
Il
Il
Il
Il
joue
joue
joue
joue
à <time>10:00</time>.
à <time datetime=10:00>10 heures</time>.
le <time datetime=2014-02-25>25 Février</time>.
le <time datetime=2014-02-25 10:00>25 Février à 10 h
Remarque
Il est aussi possible d’utiliser T comme séparateur
137
Element <time>
On peut préciser le fuseau horaire (voir http://en.wikipedia.org/wiki/Time zone)
Exemple
<time datetime=2014-02-25 10:00+01:00>25 Février à 10 heures
138
Autres éléments sémantiques en HTML5
<figure> et <figcaption> pour les illustrations ; <figcaption> doit
etre placé comme premier ou dernier fils
<output> : remplace <span> lorsque l’élément correspond au résultat
d’un calcul (effectué par Javascript)
<mark> : pour attirer l’attention sur du texte qui est devenu important.
<details> et <summary>
Exemple
<p> Le résultat est : <output id="result"></output> </p>
<figure>
<img src="pulpit.jpg" alt="The Pulpit Rock" />
<figcaption>Fig1. - The Pulpit Pock, Norway.</figcaption>
</figure>
139
Editer du contenu
L’attribut <contenteditable> permet d’éditer le contenu d’un élément.
Exemple
function startEdit() {
document.getElementById("test").contentEditable = true;
}
function stopEdit() {
document.getElementById("test").contentEditable = false;
alert("Your edited content: " + element.innerHTML);
}
<div id="test" contenteditable="true">You can edit this.</di
<button onclick="startEdit()">Start Editing</button>
<button onclick="stopEdit()">Stop Editing</button>
Remarque
L’attribut designmode de document peut rendre tout le document éditable.
140
Web sémantique
Ajouter du sens à vos pages avec des meta-data !
Plusieurs standards :
ARIA (Accessible Rich Internet Applications) pour les screen readers
RDFa (Resource Description Framework), qui est complexe
Microformats, qui exploite l’attribut class
Microdata, qui exploite ses propres attributs
Remarque
microdata est supporté par Microsoft, Google, Yahoo, and Yandex. Voir
http://schema.org
141
Microdata
Attributs importants :
itemscope, pour commencer à définir un nouvel objet sémantique
itemtype, pour indiquer le type de l’objet à définir, comme par exemple
http://schema.org/Person
itemprop, pour indiquer un attribut de l’objet à définir
Remarque
La définition d’un objet sémantique peut mener à la définition interne d’un autre
objet.
Exemple
<p> Laurent Dupont </p>
<ul>
<li> 3 rue de paris 92100 Belvil </li>
<li> 03 34 54 21 89 </li>
<li> [email protected] </li>
</ul>
142
Microdata
Exemple
<p itemscope itemtype="http://schema.org/Person"
itemprop="name"> Laurent Dupont </p>
<ul>
<li itemprop="address"
itemscope itemtype="http://schema.org/PostalAddress">
<span itemprop="streetAddress"> 3 rue de paris </span>
<span itemprop="postalCode">92100 </span>
<span itemprop="addressLocality"> Belvil <span>
</li>
<li itemprop="telephone"> 03 34 54 21 89 </li>
<li itemprop="email"> [email protected] </li>
</ul>
Remarque
Il faut parfois introduire des éléments <div> ou <span> supplémentaires.
143
Microdata
Il est possible de construire automatiquement et de manière conjointe les élements
HTML et microdata. Par exemple, à l’aide d’un site comme :
http://schema-creator.org
www.microdatagenerator.com
Intéret des meta-data :
information utilisable par les navigateurs ; pour le moment, peu avéré sauf
avec un plug-in tel que http://krofdrakula.github.io/microdata-tool
search engine optimization. Google supporte nombre de meta-data ; voir
http://tinyurl.com/GoogleRichSnippets.
Pour tester comment cela rend sous Google, voir
http://www.google.com/webmasters/tools/richsnippets
144
Canvas
Un objet permettant de dessiner des figures.
Exemple
canvas {
border: 1px dashed black;
}
<canvas id="test" width="500" height="300"></canvas>
Remarque
Il ne faut pas utiliser CSS pour définir les valeurs de width et height
145
Context
Il faut un objet context pour dessiner avec un canvas.
Exemple
window.onload = function() {
var canvas = document.getElementById("test");
var context = canvas.getContext("2d");
// dessiner ici avec l’objet context
}
Le système de coordonnées que l’on va utiliser est classique :
146
Exemple
Deux traits d’épaisseur 10 tracés séparément
Exemple
context.lineWidth = 10; context.strokeStyle = "rgb(205,40,40
// premier segment avec terminaison classique (butt)
context.moveTo(10,50);
context.lineTo(400,50); context.lineCap = "butt";
context.stroke();
// second segment avec terminaison arrondi (round)
context.beginPath();
context.moveTo(10,120);
context.lineTo(400,120); context.lineCap = "round";
context.stroke();
Remarque
La méthode beginPath permet de commencer la description d’un nouveau tracé
et la méthode stroke permet de réaliser ce tracé.
147
Exemple
Un triangle
Exemple
context.moveTo(250,50);
context.lineTo(50,250); context.lineTo(450,250);
context.closePath(); // dernier trait automatique
// Paint the inside.
context.fillStyle = "blue";
context.fill();
// Draw the outline.
context.lineWidth = 10;
context.strokeStyle = "red";
context.stroke();
Remarque
La méthode fill permet de remplir la dernière forme décrite.
148
Exemple
strokeRect(x,y,width,height)
fillRect(x,y,width,height)
arc(x,y,radius, startingAngle,endingAngle) ; utiliser 0 et 2*Math.PI pour un
cercle
arcTo
bezierCurveTo
quadraticCurveTo
149

Documents pareils