HTML§
Département Informatique (IUT Lyon 1)
Ce travail est sous licence Creative Commons Attribution-ShareAlike 3.0 France.
Département Informatique (IUT Lyon 1)
Ce travail est sous licence Creative Commons Attribution-ShareAlike 3.0 France.
Vocabulaire
En anglais, les balises sont appelées tags; « langage à balise » se traduit par markup language.
Si vous écrivez :
Qu'est-ce qu'une <em>balise</em>?
… vous verrez :
Qu'est-ce qu'une balise?
Le mot « balise » est marqué comme important (em = emphase), c’est pourquoi il est affiché en italique.
Qu'est-ce qu'une <em>balise</em>?
<
et >
est considéré une balise.<em>
est une balise ouvrante,
</em>
est la balise fermante qui lui correspond;
elles délimitent le texte concerné.Astuce
Les éditeurs de texte reconnaissent les balises, et les mettent automatiquement en couleur pour faciliter la lecture du code HTML.
On peut appliquer plusieurs balises au même texte, à condition de respecter la règle d”emboîtement :
toute balise B ouverte à l’intérieur d’une balise A doit également être fermée à l’intérieur de A.
Exemples :
<p>Emboîtement <em>correct</em></p>
<p>Emboîtement <em>incorrect</p></em>
De la règle d’emboîtement, il découle que les balises confèrent une structure d”arbre au document :
<X><Y>Lorem <Z>ipsum</Z></Y> dolor <X>sit.</X></X>
Certaines balises, en plus du contenu textuel qu’elles délimitent, ont besoin d’information supplémentaire (mais qui n’apparaîtra pas dans le document).
Cette information est donnée par des attributs,
qui ont la forme nom=valeur
et sont placés entre les chevrons de la balise ouvrante,
après son nom.
Par exemple :
<a href="http://champin.net/">P-A. Champin</a>
n’affichera que le texte « P-A. Champin ».
Certaines balises particulières n’attendent pas de contenu textuel. Ces balises vides n’ont donc pas de balise fermante correspondante :
Cette balise <Y a="v"> n'a pas de contenu.
On peut (mais ce n’est pas une obligation) indiquer explicitement l’absence de balise fermante en ajoutant la barre oblique à la fin de la balise ouvrante :
Cette balise <Y a="v"/> n'a pas de contenu.
Si vous écrivez :
Gestion des
espaces.
… vous verrez :
Gestion des espaces.
HTML considère tous les caractères d’espacements (espaces, retours à la ligne…) comme des séparations entre mots, et les affiche comme une simple espace.
Cela donne de la souplesse dans la mise en page du code HTML (notamment en utilisant l”indentation, comme en programmation).
On va voir dans la suite comment faire afficher des retours à la ligne.
Depuis la version 4, HTML vise a décrire la structure logique du document, c’est à dire le fond et non la forme.
La mise en forme (qu’on appelle parfois structure physique) est gérée par une feuille de style qui sera décrite en CSS.
Cette séparation est indispensable pour assurer l”adaptabilité du contenu, et cette adaptabilité est incontournable dans un environnement ouvert comme le Web:
Note
Considérez que votre page web peut être visualisée sur
1 2 3 4 5 6 7 8 9 10 | <!DOCTYPE html>
<html>
<head>
<title>Titre du document</title>
<meta charset="utf-8"/>
</head>
<body>
...
</body>
</html>
|
<html>
) comprend deux parties.<head>
) contient les méta-données,
qui ne sont pas directement affichées :<title>
) est obligatoire,<body>
) contient
le contenu à proprement parler du document.Note
On remarque que l’indication d’encodage est un exemple de balise sans contenu et possédant un attribut.
Le W3C fournit un service de validation en ligne :
Son utilisation vous est vivement recommandée.
Un document typique est une séquence de
Les titres ont différents niveaux d’importance, repérables à leur typographie (et parfois à leur numérotation), et donnent une structure hiérarchique au document (en parties, sous-parties, etc.).
Question
Identifiez-vous les différents niveaux de titre dans l’exemple suivant ?
<p>
<h1>
, <h2>
…, <h6>
;<h1>
est le niveau le plus important,
et <h6>
le moins important.Illustration :
<h1>Ceci est un titre</h1>
<p>Ceci est un paragraphe.</p>
<p>Ceci est un deuxième paragraphe.</p>
<h1>Ma dissertation</h1>
<h2>Thèse</h2>
<p>Paragraphe d'introduction</p>
<h3>Argument 1</h3>
<p>...</p> <p>...</p> <p>...</p>
<h3>Argument 2</h3>
<p>...</p> <p>...</p> <p>...</p>
<h2>Antithèse</h2>
<h3>Contre-argument 1</h3>
<p>...</p> <p>...</p> <p>...</p>
<h3>Contre-argument 2</h3>
<p>...</p> <p>...</p> <p>...</p>
<h2>Synthèse</h2>
<p>...</p> <p>...</p> <p>...</p>
Notez l’indentation pour faciliter la lecture.
⚠ L’enchaînement des niveaux de titre doit être cohérent :
Avertissement
« Mais si le <h2>
ne se différencie pas assez du <h1>
visuellement, j’ai le droit de mettre un <h3>
à la place ? »
→ non; HTML doit être cohérent avec la structure du document. Pour changer la typographie, on modifiera plutôt le CSS.
NB : ces règles de cohérence ne sont pas normatives, leur non-respect n’est pas signalé par le valideur, mais il est tout de même à proscrire.
Avertissement
C’est donc à vous d’être attentifs à bien les respecter.
Téléchargez le texte correspondant à l”exemple ci-avant
en utilisant les balises <p>
et <hN>
.
NB : la mise en forme sera différente, mais cherchez surtout à reproduire la structure logique du document.
Téléchargez le modèle HTML correspondant à l’exemple,
et recopiez votre code à l’intérieur de la balise <body>
.
Ce modèle contient un lien vers la feuille de style appropriée.
Dans les deux cas, ne tenez pas compte pour l’instant des mots en gras, italique et souligné.
Les titres définissent en fait une structure de plus haut niveau :
Une section contient donc
- un titre,
- éventuellement des paragraphes,
- éventuellement une ou plusieurs section(s) de niveau suivant.
<section>
,<h1>Ma dissertation</h1>
<section>
<h2>Thèse</h2>
<p>Paragraphe d'introduction</p>
<section>
<h3>Argument 1</h3>
<p>...</p> <p>...</p> <p>...</p>
</section><section>
<h3>Argument 2</h3>
<p>...</p> <p>...</p> <p>...</p>
</section>
</section><section>
<h2>Antithèse</h2>
<section>
<h3>Contre-argument 1</h3>
<p>...</p> <p>...</p> <p>...</p>
</section><section>
<h3>Contre-argument 2</h3>
<p>...</p> <p>...</p> <p>...</p>
</section>
</section><section>
<h2>Synthèse</h2>
<p>...</p> <p>...</p> <p>...</p>
</section>
Note
À ce stade, on pourrait arguer que l’ordinateur peut reconstruire la structure des sections à partir des niveaux de titre, et donc qu’il est superflu d’alourdir le code HTML avec cette information redondante.
Lorsqu’on étudiera CSS et les scripts (l’an prochain), on comprendra mieux l’intérêt de rendre cette structure explicite.
Améliorez votre version de l”exemple ci-avant
en ajoutant les balises <section>
.
RMQ: l’emboîtement des sections suffit à déterminer leur niveau, donc l’information portée par le numéro de titre est redondante.
→ en HTML5, on peut en théorie n’utiliser que <h1>
à tous les niveaux,
- les navigateurs compatibles adapteront la typographie en fonction de la « profondeur ».
⚠ cependant, en pratique on évitera de le faire, car
- ce n’est pas compatible avec les anciens navigateurs,
- certains outils (moteurs de recherche, lecteurs d’écran) attendent un unique
h1
dans la page.
Note
Pour ces raisons,
le valideur HTML du W3C émet un warning lorsqu’une page contient plusieurs h1
.
<h1>Ma dissertation</h1>
<section>
<h1>Thèse</h1>
<p>Paragraphe d'introduction</p>
<section>
<h1>Argument 1</h1>
<p>...</p> <p>...</p> <p>...</p>
</section><section>
<h1>Argument 2</h1>
<p>...</p> <p>...</p> <p>...</p>
</section>
</section><section>
<h1>Antithèse</h1>
<section>
<h1>Contre-argument 1</h1>
<p>...</p> <p>...</p> <p>...</p>
</section><section>
<h1>Contre-argument 2</h1>
<p>...</p> <p>...</p> <p>...</p>
</section>
</section><section>
<h1>Synthèse</h1>
<p>...</p> <p>...</p> <p>...</p>
</section>
Les balises suivantes représentent des sections avec une sémantique particulière.
<main> |
contenu principal de la page |
<article> |
contenu auto-suffisant |
<aside> |
encart |
<header> |
en-tête de la section parent (ou du doc) |
<footer> |
pied de la section parent (ou du doc) |
<nav> |
section contenant des liens de navigation |
<!-- this examples comes from http://www.w3.org/TR/html5/ -->
<body>
<header>
<h1>My wonderful blog</h1>
<p>My tagline</p>
</header>
<aside>
<!-- this aside contains two sections that are tangentially related
to the page, namely, links to other blogs, and links to blog posts
from this blog -->
<nav>
<h1>My blogroll</h1>
<ul>
<li><a href="http://blog.example.com/">Example Blog</a>
</ul>
</nav>
<nav>
<h1>Archives</h1>
<ol reversed>
<li><a href="/last-post">My last post</a>
<li><a href="/first-post">My first post</a>
</ol>
</nav>
</aside>
<aside>
<!-- this aside is tangentially related to the page also, it
contains twitter messages from the blog author -->
<h1>Twitter Feed</h1>
<blockquote cite="http://twitter.example.net/t31351234">
I'm on vacation, writing my blog.
</blockquote>
<blockquote cite="http://twitter.example.net/t31219752">
I'm going to go on vacation soon.
</blockquote>
</aside>
<article>
<!-- this is a blog post -->
<h1>My last post</h1>
<p>This is my last post.</p>
<footer>
<p><a href="/last-post" rel=bookmark>Permalink</a>
</footer>
</article>
<article>
<!-- this is also a blog post -->
<h1>My first post</h1>
<p>This is my first post.</p>
<aside>
<!-- this aside is about the blog post, since it's inside the
<article> element; it would be wrong, for instance, to put the
blogroll here, since the blogroll isn't really related to this post
specifically, only to the page as a whole -->
<h1>Posting</h1>
<p>While I'm thinking about it, I wanted to say something about
posting. Posting is fun!</p>
</aside>
<footer>
<p><a href="/first-post" rel=bookmark>Permalink</a>
</footer>
</article>
<footer>
<nav>
<a href="/archives">Archives</a> —
<a href="/about">About me</a> —
<a href="/copyright">Copyright</a>
</nav>
</footer>
</body>
Nous allons maintenant présenter un certain nombre de balises qui peuvent être utilisées à l’intérieur des balises de paragraphe ou de titre.
Voici quelques balises utiles, avec leur sémantique, et leur mise en forme par défaut.
<em> |
emphase | italique |
<strong> |
emphase forte | gras |
<dfn> |
définition | italique |
<cite> |
titre d’ouvrage | italique |
<q> |
citation | guillemets |
Selon <cite>Wikipedia</cite>, la <dfn>prose</dfn> est :
<q>la forme <em>ordinaire</em> de l'expression verbale.</q>
Selon Wikipedia, la prose est :
la forme ordinaire de l'expression verbale.
Selon Wikipedia, la prose est :
la forme ordinaire de l'expression verbale.
Les balises suivantes sont utiles pour écrire des documentations informatiques (ou scientifiques).
<code> |
code informatique | non-prop |
<kbd> |
entrée clavier | non-prop |
<samp> |
sortie de programme | non-prop |
<var> |
variable | italique |
La boucle <code>while</code> affiche <samp>1 2 3 4</samp>,
soient toutes les valeurs prises par <var>i</var>.
La boucle while
affiche 1 2 3 4,
soient toutes les valeurs prises par i.
La boucle while
affiche 1 2 3 4,
soient toutes les valeurs prises par i.
Les balises suivantes sont utiles pour faire apparaître les évolutions d’un document.
<ins> |
texte inséré | souligné |
<del> |
texte supprimé | barré |
Je <del>ne</del> connais
<del>rien à</del><ins>bien</ins> HTML.
Je ne connais
rien àbien HTML.
Je ne connais
rien àbien HTML.
Ces balises datent des premières versions de HTML, où la séparation fond / forme n’était pas encore de rigueur.
<b> |
texte en gras |
<i> |
texte en italique |
<u> |
texte souligné |
<br> |
saut de ligne (sans contenu) |
Avertissement
Elles sont encore valides en HTML5, (et donc acceptées par le valideur) mais la plupart du temps, il faut leur préférer une balise avec une sémantique plus précise.
Reprenez votre code HTML reproduisant l”exemple ci-avant, et ajoutez les balises manquantes.
Le rendu doit maintenant être très proche de celui de l’exemple.
Une liste est un paragraphe d’un type particulier, contenant une énumération d’éléments.
<ul>
<li>sucre</li>
<li>céréales</li>
<li>lait</li>
</ul>
<ol>
<li>sucre</li>
<li>céréales</li>
<li>lait</li>
</ol>
On note que :
<ul>
signifie unordered list<ol>
signifie ordered list<li>
signifie list itemDans une liste ordonnée, les éléments sont automatiquement numérotés (mais cette numérotation peut être contrôlée avec une feuille de style).
Dans l”exemple ci-avant pouvez-vous identifier une liste ? Reprenez votre code HTML reproduisant cet exemple et modifiez-le en conséquence.
Le rendu doit maintenant être identique à celui de l’exemple.
Vers la Séance 4.
Avertissement
Malgré cette similitude, les ressources ne correspondent pas toujours à des fichiers.
« » | l’URL de base |
« toto » | la ressource toto dans le « dossier » courant |
« . » | le « dossier » courant |
« .. » | le « dossier » parent du « dossier » courant |
« / » | le « dossier » racine du serveur |
On peut ensuite combiner ces éléments en les séparant par « / ».
Étant données une URL de base et une URL relative, on peut calculer l’URL absolue correspondante simplement par un jeu d’écriture.
Note
Plus précisément, c’est une manipulation purement syntaxique, qui est donc indépendante de la structure des éventuels fichiers sur le serveur.
Il est même possible que l’URL relative et le nom de fichier relatif donnent des résultats différents, exemple :
http://example.org/pchampin/
correspond au répertoire
/home/pchampin/public_html/
sur le serveur ;../jdoe/
conduit à l’URL http://example.org/jdoe/
,
qui correspond au répertoire /home/jdoe/public_html/
,../jdoe/
conduit au répertoire
/home/pchampin/jdoe/
qui n’a pas d’URL correspondante
(et d’ailleurs n’existe probablement pas).Combinez chacune des URLs de base de gauche avec chacune des URLs relatives de droite.
URLs absolues | URLs relatives |
---|---|
|
Considérant l’URL de base http://example.com/foo/bar/p1.html , donnez une URL relative pour :
<img>
.src
: l’URL (absolue ou relative) de l’image,alt
: une description textuelle de l’image.Note
La description textuelle est obligatoire pour les situations où l’image ne peut pas être affichée :
<img src="_static/monalisa-small.jpg" alt="Portrait de Mona Lisa">
Source image Wikipedia
Avertissement
Le fait qu’une image soit disponible sur le Web ne signifie pas que vous avez toute latitude pour la réutiliser sur votre propre site.
Ce qu’il faut faire :
<a>
transforme son contenu en lien hypertexte.href
,
qui contient l’URL (absolue ou relative) vers lequel dirige ce lien.Bienvenue à
<a href="http://iut.univ-lyon1.fr/">l'IUT de Lyon</a>
Bienvenue à l'IUT de Lyon
<a>
§Rien n’empêche bien sûr la balise <a>
de contenir d’autres balises.
Bienvenue à
<a href="http://iut.univ-lyon1.fr/">
l'<strong>IUT</strong> de Lyon
<img src="_static/logo-lyon1.jpg" alt="Logo de Lyon1" />
</a>
Bienvenue à
l'IUT de Lyon
id
.Note
Deux éléments du même document ne peuvent pas avoir
la même valeur pour l’attribut id
(ce qui serait contradictoire avec la notion d’identifiant).
Dans les anciennes versions d’HTML, on utilisait une balise vide de la forme:
<a name="identifier">
mais cette syntaxe est obsolète.
<a href="#sec1">
pointe vers le fragment #sec1 du document courant</a>
<a href="other.html#sec2">
pointe vers le fragment #sec2 d'un autre document</a>
<a href="http://en.wikipedia.org/wiki/Lyon#Details">
pointe vers la section "Détails" d'un article
Wikipedia</a>
<section id="sec1">
La section vers laquelle pointe le 1er lien ci-dessus.
...</section>
Téléchargez ce fichier html. Il contient un livre dont vous êtes le héros minimaliste.
Lorsque le nombre de fichiers constituant un site croît, il devient important de penser leur organisation. Quelques conseils :
index.html
comme « point d’entrée » de chaque
répertoire.├ assets/
│ ├ style.css
│ ├ img1.png
│ └ ...
├ index.html
├ page1.html
├ page2.html
│
├ sous-site1/
│ ├ assets/
│ │ └ ...
│ ├ index.html
│ └ page2.html
└ sous-site2/
└ ...
En plus des images, HTML5 permet d’inclure des vidéos,
grâce à la balise <video>
.
<video src="_static/Chrome_ImF.webm">
Ici, une vidéo représentant...
</video>
Source vidéo : Google.
Note
Le contenu textuel de la balise <video>
,
affiché uniquement si le navigateur ne supporte pas cette balise,
joue le rôle de l’attribut alt
des images.
La balise video supporte les attributs suivants :
autoplay
: lance la lecture automatiquementcontrols
: affiche l’interface de lectureloop
: reprend automatiquement la lecture à la fin de la vidéomuted
: fixe le volume sonore à 0poster
: URL d’une image à afficher avant la lectureNB : à part poster
, ces attributs n’ont pas besoin de valeur ;
la simple présence de l’attribut active son effet.
Il n’est donc même pas indispensable de leur donner une valeur ;
au lieu de autoplay=""
, on peut écrire simplement autoplay.
<video src="_static/Chrome_ImF.webm"
autoplay loop muted>
Ici, une vidéo représentant...
</video>
<video src="_static/Chrome_ImF.webm"
controls poster="_static/sun.png">
Ici, une vidéo représentant...
</video>
Source vidéo : Google, image: johnny_automatic.
Les navigateurs ne supportent pas tous les même formats vidéo. Il peut donc être nécessaire de fournir plusieurs sources alternatives pour la même vidéo.
La balise vidéo peut donc, à la place de l’attribut src
,
contenir plusieurs balises <source>
ayant chacune :
- un attribut
src
avec l’URL d’une version de la vidéo,- éventuellement un attribut
type
décrivant son format.
Avec les formats WebM et MP4 (H264+AAC), on couvre la grande majorité des navigateurs.
<video autoplay loop muted>
<source src="_static/Chrome_ImF.webm"
type='video/webm; codecs="vp8, vorbis"'>
<source src="_static/Chrome_ImF.mp4"
type='video/mp4; codecs="avc1.42E01E, mp4a.40.2"'>
Ici, une vidéo représentant...
</video>
Source vidéo : Google.
Les caractères suivants ont une signification spéciale en HTML, donc il faut utiliser un code spécial (entité) pour les afficher :
< | < |
lower than |
> | > |
greater than |
« | "e; |
quote |
“ | ' |
apostrophe |
& |
& |
ampersand |
Il existe d’autres entités pour de nombreux caractères non-SCII,
par exemple é
pour é, À
pour À, ç
pour ç…
Cependant, HTML supporte désormais unicode, donc ces entités ne sont plus nécessaires. En revanchent elles nuisent à la lisibilité du code HTML. Leur utilisation est donc déconseillée.
En HTML, tout texte commençant par <!–
et se terminant par -->
est considéré comme un commentaire.
Tout ce qu’il contient (texte et balises) sera ignoré.
hello <!--
<strong>wonderful</strong>
--> world
hello world
Les commentaires servent à
Notons que le commentaire ne concerne pas que l’affichage :
<link rel="stylesheet" type="text/css" href="style1.css"/>
<!--
<link rel="stylesheet" type="text/css" href="style2.css"/>
inhibe temporairement la 2e feuille de style -->
<meta>
sont situées dans l’élément <head>
du document.<meta charset="utf-8">
<meta name="description"
content="apprenez plus de tours en HTML">
<meta name="author"
content="Pierre-Antoine Champin">
<meta name="keywords" content="html web iut">
Note
On a déjà rencontré la balise <meta>
pour spécifier l’encodage du document.
Avec le nom robot
,
la balise <meta>
peut être utilisée
pour fournir des instructions aux moteurs de recherche :
index/noindex
: doivent-ils indexer cette page ou non ?follow/nofollow
: doivent-ils suivre les liens ou non ?<meta name="robot" content="index,nofollow">
Les méta-données peuvent être fournies dans différentes langues,
spécifiées dans l’attribut lang
à l’aide d’un code spécifié par BCP47.
<meta name="description" lang="en"
content="learn advanced tricks in HTML">
<meta name="description" lang="fr"
content="apprenez plus de tours en HTML">
NB : l’attribut lang
peut en fait être utilisé
sur n’importe quelle balise,
y compris dans le corps (<body>
) du document.
HTML fournit deux balises neutres (c.à.d. sans sémantique particulière) :
Ces éléments sont utiles pour rajouter de la structuration au document, notamment en portant des classes personnalisées.
Avertissement
Même lorsqu’on utilise des classes personnalisées, il est préférable de les associer, autant que possible, à une balise dont la sémantique est proche, plutôt qu’à une balise neutre.
Vers la Séance 6.
Un tableau (ou une table) permet d’organiser des information sur deux dimensions.
Une table (table) est composée de lignes (rows), elles-mêmes composées de cellules (cells).
On considère deux sortes de cellules : les cellules d’en-tête (header cells) et les cellules de données (data cells).
the table | ||
a row | ||
a header cell | a data cell | another data cell |
---|
Les différents éléments d’un tableau sont représentés par
table | <table> |
row | <tr> |
header cell | <th> |
data cell | <td> |
<table>
<tr>
<td></td> <th>Medium</th> <th>Large</th>
</tr>
<tr>
<th>Americano</th> <td>1.50€</td> <td>1.90€</td>
</tr>
<tr>
<th>Latte</th> <td>1.90€</td> <td>2.10€</td>
</tr>
<tr>
<th>Cappucino</th> <td>1.90€</td> <td>2.10€</td>
</tr>
</table>
Medium | Large | |
---|---|---|
Americano | 1.50€ | 1.90€ |
Latte | 1.90€ | 2.10€ |
Cappucino | 1.90€ | 2.10€ |
Une cellule peut s’étendre
sur plusieurs lignes (vers le bas) et/ou colonnes (vers la droite)
à l’aide des attributs rowspan
et colspan
.
Indice
Dans ce cas, le nombre de <td>
ou <th>
pourra varier d’une <tr>
à l’autre…
rowspan=2 | colspan=2 | . | |
. | colspan=2 rowspan=2 | ||
. | . |
Reproduisez le modèle ci-dessous représentant une calculatrice.
<caption>
: légende du tableau (premier fils de <table>
)<thead>
: ensemble de lignes (<tr>
) constituant l’en-tête (par ex. intitulés de colonnes)<tbody>
: ensemble de lignes (<tr>
) constituant le corps (données à proprement parler)<tfoot>
: ensemble de lignes (<tr>
) constituant le pied (par ex. rappel des intitulés de colonnes, ou somme des valeurs par colonne)<colgroup>
et <col>
permettent d’identifier les colonnes (par exemple pour les besoins du CSS)Pour plus de détails, voir http://www.w3.org/TR/html5/tabular-data.html#table-model .
Avant que CSS ne s’impose, les tableaux ont souvent été utilisés pour faciliter la mise en page des sites (en tête et pied de page, menu latéral, présentation sur plusieurs colonnes).
Aujourd’hui, cette pratique est fortement déconseillée, car elle est beaucoup moins flexible que l’utilisation de CSS pour le positionnement.
C’est aussi une violation de la séparation entre fond et forme :
l’utilisation de <table>
se justifie lorsque les éléments situés sur la même ligne
(resp. la même colonne) ont quelque-chose qui les relie.
L’utilisation d’un tableau pour afficher une galerie d’image sur deux colonnes est une mauvaise solution.
Il est plus judicieux d’utiliser CSS pour obtenir le même résultat, d’autant que ce résultat pourra adapter le nombre de colonnes (éventuellement pour le réduire à 1) en fonction du type d’affichage.
Vers la Séances 9.
Certaines pages HTML comportent des champs
permettant à l’utilisateur de saisir de l’information.
La balise offrant cette possibilité est la balise <input>
.
<input>
HTML offre un certain nombre de types de champs, les plus utilisés étant
<input type="text"> |
|
<input type="password"> |
|
<input type="checkbox"> |
|
<input type="radio"> |
|
<input type="file"> |
|
<input type="number"> |
|
<input type="range"> |
NB : HTML5 définit d’autres types de champs (par exemple date
ou color
),
mais ils ne sont pas encore largement implémentés.
Les champs de saisie sont le plus souvent associés à un libellé.
Ceci est représenté en encapsulant
le libellé (n’importe quel code HTML) et la balise <input>
dans une balise <label>
.
<div><label>Nom : <input></label></div>
<div><label><input type=checkbox> tarif réduit</label></div>
Une autre méthode consiste à
<input>
avec l’attribut id
, et<label>
avec l’attribut for
.Par exemple :
<table>
<tr><td><label for="name">Nom :</label></td>
<td><input id="name"></td></tr>
<tr><td><label for="gname">Prénom :</label></td>
<td><input id="gname"></td></tr>
</table>
L’association du libellé au champ explicite la sémantique du document, ce qui permet notamment d’améliorer :
l’ergonomie :
lorsqu’on clique sur un libellé, c’est le champ qui prend le focus ;
l’accessibilité :
l’adaptation du formulaire (par exemple pour un lecteur d’écran) peut se faire de manière plus pertinente.
Note
Considérez par exemple le formulaire suivant, et sa lecture par un lecteur d’écran :
Adresse (, , ) : | |
Pour les champ de type text
ou password
,
une alternative au libellé consiste à utiliser l’attribut placeholder
:
<input placeholder="identifiant">
<input type="password" placeholder="mot de passe">
Un autre type de champ permet de sélectionner (ou ou plusieurs) éléments dans une liste.
<select>
<option>Georges</option>
<option>John</option>
<option>Paul</option>
<option>Ringo</option>
</select>
L’attribut multiple
autorise la sélection de plusieurs éléments.
Le champ <input>
ne permet pas la saisie de texte sur plusieurs lignes.
Pour cela, on utilise le champ <textarea>
.
<textarea placeholder="type your message">Hello
world</textarea>
NB : contrairement à <input>
,
<textarea>
attend une balise fermante, car le texte contenu dans le champ est le contenu de la balise
(le texte du placeholder
disparaît lorsque l’utilisateur tape du texte, contrairement au texte contenu dans le champ qui reste).
La balise <button>
permet de créer des boutons.
<button>Ok</button> <button><em>Annuler</em></button>
Note
Historiquement, les boutons étaient générés par la balise <input>
avec des types spécifiques (button
et submit
notamment).
Les champs sont généralement regroupés dans une balise <form>
,
qu’on appelle un formulaire.
Cette balise requiert l’attribut action
, qui contient
l’URL de la ressource qui traitera les données du formulaire.
Pour pouvoir être traités,
les champs d’un formulaire doivent tous être identifiés par un nom,
porté par l’attribut name
:
<form action="_static/formproc/debug">
<input name="name" placeholder="identifiant">
<input name="tel" placeholder="n° de tel">
<button>Je m'inscris</button>
</form>
Les champs ayant le type checkbox
ou radio
vont souvent par groupe.
Tous les membres d’un groupe ont le même nom,
et se différencient par une valeur portée par un attribut value
.
Pour les cases à cocher, le nom se voit affecter l’ensemble des valeurs sélectionnées.
Pour les boutons radio, une seule valeur peut-être affectée (l’activation d’un bouton du groupe désactive automatiquement les autres).
<form action="_static/formproc/debug">
<p>Taille :
<label><input name="size" type="radio" value="s"> Petite</label>
<label><input name="size" type="radio" value="m"> Moyenne</label>
<label><input name="size" type="radio" value="l"> Grande</label>
</p>
<p>Garniture :
<label><input name="topping" type="checkbox" value="ch"> Fromage</label>
<label><input name="topping" type="checkbox" value="ol"> Olives</label>
<label><input name="topping" type="checkbox" value="mu"> Champignons</label>
</p>
<button>Commander</button>
</form>
Les boutons ont trois fonctionnalités possibles, portées par l’attribut type
:
submit
: envoie les données du formulaire (défaut)reset
: remet tous les champs du formulaire à leur valeur initialebutton
: aucun comportement par défautLes boutons du dernier type sont utiles en conjonction avec des scripts (hors-programme pour cette année).
La balise <form>
accepte un attribut method
, qui peut prendre deux valeurs :
get
: les données sont passée via l’URL (défaut)post
: les données sont passées dans la requête HTTPLa méthode get
doit être employée :
Dans tous les autres cas, la méthode post
doit être utilisée.
Note
Bien que les données du formulaire n’apparaissent pas directement avec la méthode post
,
celle-ci n’est pas plus sécurisée que la méthode get
:
les données circulent en clair sur le réseau.
La bonne manière de faire transiter des données de manière sûre sur le Web consiste à utiliser le protocole HTTPS au lieu de HTTP.
L’emploi de <input type="file">
pour envoyer le contenu d’un fichier
nécessite deux précautions au niveau du <form>
englobant :
method="post"
enctype="multipart/form-data"
sans quoi c’est le nom du fichier, et non son contenu, qui sera envoyé au serveur.
Reprenez votre code représentant une calculatrice et améliorez le pour qu’il soit conforme au modèle ci-dessous.
Ajoutez ensuite la ligne suivante dans le <head>
de votre document:
<script type="text/javascript" src="http://champin.net/enseignement/intro-web/_static/exo_calculette/calculette.js"></script>
et essayez votre calculette…
Dans un nouveau document, créer un formulaire (par exemple, pour commander des pizzas), en expérimentant les différents types de champs avec le processeur fourni à l’adresse suivante :
http://liris.cnrs.fr/~pchampin/enseignement/intro-web/_static/formproc/debug
Vers la Séance 12.