# Tutoriel

# Tutoriel XHTML : les bases

## Introduction

Le langage XHTML est un langage de formatage de texte adapté à la conception de pages web.

Ce n'est pas un langage de programmation, mais un langage de mise en forme de données : une page Web décrit une structure statique, tandis qu'un programme est un processus dynamique. Vous n'avez aucunement besoin d'avoir des bases de programmation pour écrire du XHTML !

Pour vous le présenter, un peu de généalogie facilitera les choses, notamment pour expliquer la différence entre HTML et XHTML.

### Généalogie du XHTML

La famille du XHTML est une famille nombreuse, et elle n'a pas fini de s'étendre ! L'aïeul s'appelle SGML ; il eut deux enfants, le HTML puis le XML. Le XML eut à son tour un enfant, qui s'appelle XHTML et ressemble comme deux gouttes d'eau à son oncle HTML.

Le SGML est un méta-langage : il permet de définir des langages balisés. Le HTML est l'un de ces langages balisés, fondé en particulier sur la notion de lien hypertexte, qui permet de naviguer confortablement d'une page à une autre.

Le HTML a très vite remporté un grand succès. Mais il a aussi rencontré certaines limites. En particulier, il n'est pas extensible. Aussi a-t-il reçu un petit frère, le langage XML, précisément fondé sur la notion d'extensibilité ; comme le SGML, le XML est un méta-langage.

Le problème, c'est que le HTML n'était pas compatible avec le XML ; c'est pourquoi l'on a conçu le langage XHTML, qui est dérivé du XML, mais conserve les principes fondamentaux du HTML, dont il hérite également de nombreuses spécificités.

La norme du XHTML est définie par le W3C, qui encourage les concepteurs de pages web à passer du HTML au XHTML. L'avantage du XHTML sur le HTML est son extensibilité, qui lui vient du langage XML. C'est pourquoi nous vous recommandons très fortement de préférer le XHTML au HTML. Le site des tuteurs observe scrupuleusement les spécifications de ce langage. À terme, le HTML est appelé à disparaître.

### Structure logique d'un document

Le XHTML définit la structure logique d'un document, permettant ensuite à un navigateur (Firefox, Mozilla, Netscape, Opera, Internet Explorer, etc.) de rendre visuellement (mais aussi auditivement ou tactilement, pour les non-voyants) le document.

Pour des raisons évidentes d'interopérabilité, le XHTML possède une norme, rédigée par le World Wide Web Consortium (W3C), qui regroupe des acteurs majeurs du Web comme Microsoft, MacroMedia (qui produit Flash), Apple, AOL, etc. Nous en sommes actuellement à la norme XHTML 1.0.

L'élément de base d'un site est la page. C'est un fichier dont l'extension est normalement `.html` (ou `.htm` si votre système d'exploitation vous impose cette limitation) et qui contient du code XHTML.

Le XHTML ne s'occupe que de définir la structure logique de votre document. Pour l'aspect visuel (mise en page, couleurs, fontes, etc.), c'est le domaine des feuilles de style, dont le tutoriel est en cours de rédaction.

## Principes fondamentaux

### Les balises

Le XHTML utilise des balises (aussi appelées « éléments ») pour distinguer les éléments logiques de la page.

Toute balise doit être ouverte (sans quoi elle n'existe pas, évidemment) ; et toutes les balises doivent également être fermées.

L'obligation de fermer chaque balise est l'une des principales différences entre le HTML et le XHTML ; c'est une caractéristique que le XHTML hérite du XML.

Une balise se présente sous la forme <tagada>, avec un < et un >.

Les balises se referment avec </tagada>, / étant l'élément fermant. Certaines balises se ferment à l'intérieur (et à la fin) d'elles-mêmes. Dans ce cas, la barre tranversale doit être placée juste avant le > final. Exemple : <br />.

Un jeu de balises présente donc obligatoirement l'une des deux formes suivantes :

    <tagada> quelque chose </tagada>

ou bien :

    <tagada />

Il n'existe aucune autre forme possible.

### Les attributs

Les balises acceptent parfois des options, qu'on appelle des attributs : dans <tagada type="plouf" />, tagada est l'élément, `type` l'attribut, et « plouf » la valeur de l'attribut.

### Casse

En XHTML, on écrit les éléments et les attributs en minuscules.

L'écriture des balises en minuscules est, là encore, un héritage du XML ; en HTML, on recommandait d'écrire les éléments en majuscules et les attributs en minuscules.

### Commentaires

Les commentaires s'insèrent entre <!-- et -->. Attention, à l'intérieur de commentaires, il vaut mieux ne pas utiliser de doubles tirets (--). On ne peut pas placer de commentaires à l'intérieur d'un élément.

### Syntaxe générale

Toutes les balises doivent être refermées.

Toute partie de la page doit être contenue dans (au moins) une balise.

Les balises doivent être ouvertes et refermées dans l'ordre. Faites spécialement attention dans le cadre de balises imbriquées.

Il ne faut donc pas écrire :

    <p> Je vous préviens tout de suite, c'est <em>non.</p></em>

mais :

    <p> Je vous préviens tout de suite, c'est <em>non.</em> </p>

Il faut refermer la balise <em> avant <p>, car on l'a ouverte après. C'est le principe des poupées russes.

### Astuce de conception

Quand un texte s'étoffe, il devient très vite difficile de se rappeler dans l'ordre toutes les balises que l'on a ouvertes, ou de tout relire pour être sûr de ne pas en avoir oublié. Comment être sûr que l'on emboîte bien les poupées russes ?

Voici une astuce. Écrivez dans l'ordre :

1. à gauche, la balise ouvrante ;
2. à droite, la balise fermante qui lui correspond ;
3. au milieu, le texte à insérer entre les deux balises.

Ainsi, vous serez sûr de ne jamais commettre d'erreur dans l'ordre de vos balises.

Exemple : Je mets les balises :

    <p> </p>

et je les remplis :

    <p>Je vous préviens tout de suite, c'est <p>

et je mets les balises :

    <p>Je vous préviens tout de suite, c'est <em> </em> </p>

et je les remplis :

    <p>Je vous préviens tout de suite, c'est <em>non.</em> </p>

Fabuleux, non ? N'est-ce pas ridiculement simple ?

### Caractères spéciaux : entités XHTML et Unicode

Vous avez parfois besoin de caractères spéciaux, que l'on ne peut pas saisir trivialement au clavier. Pour cela, le XHTML a défini des entités, qui par convention représentent ces caractères. Par exemple, le symbole euro (€) est `&euro;`, le e dans l'o (œ) s'écrit `&oelig;`.

En plus de ces entités XHTML (dont vous pouvez trouver la liste chez David Madore), vous disposez des entités Unicode. Unicode est une convention dont le but est de représenter tous les langages du monde. Ainsi, vous écrirez correctement le nom du compositeur Antonín Dvořák en utilisant l'entité Unicode du r caron, à savoir &#345; (ř).

## Le squelette d'une page

Toute page XHTML est contenue entre deux balises <html> (c'est-à-dire entre <html> et </html>).

Remarque : les balises s'appellent bien <html> et non <xhtml> : c'est un héritage, vous vous en doutez, du HTML.

### Le DTD

Toute page XHTML doit commencer par les éléments suivants :

- votre document doit déclarer son Document Type Definition (DTD), qui précise au navigateur quelle version de XHTML vous utilisez :

      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

- ensuite, vous devez déclarer l'espace de noms XML (XMLNS) :

      <html xmlns="http://www.w3.org/1999/xhtml">

Il existe d'autres DTD, par exemple celui pour les cadres (frames), mais souvenez-vous qu'utiliser les cadres n'est pas une bonne idée ; cf. l'excellent article « Pour en finir avec les cadres » sur le site de l'OpenWeb Group.

Pour l'instant, notre page-squelette ressemble donc à ceci :

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml">

    <!-- Ce sont des commentaires. Ils sont complètement ignorés par
    <!-- les navigateurs. Sinon, ici se trouve normalement le corps de
    <!-- votre page. -->

    </html>

### Les en-têtes

Le rôle des en-têtes dans une page XHTML (comme dans un courrier électronique) est de donner des méta-informations plus ou moins importantes.

Par exemple, l'identité de l'auteur, le titre de la page, l'encodage, la langue utilisée, etc. Les en-têtes sont déclarées à l'intérieur de l'élément <head> (logique, non ?), c'est-à-dire entre les balises <head> et </head>.

#### Le titre

La plus importante des en-têtes est... le titre de la page. Dans un navigateur graphique (Internet Explorer, Mozilla, etc.) il est affiché dans la barre de titre. Il est également utilisé par les moteurs de recherche. Un bon titre est informatif (évitez les jeux de mots nazes) tout en restant relativement court. Il se déclare dans l'élément <title> qui est obligatoire.

Ainsi, Jean-Paul Sartre pourra utiliser comme titre de sa page d'accueil :

    <title> Page Web de Jean-Paul Sartre </title>

#### Les balises <meta>

Elles sont facultatives, mais importantes à la fois pour le navigateur qui a des renseignements sur la manière dont afficher la page, et pour les moteurs de recherche, qui s'en servent pour indexer vos pages. Nous vous en présentons quelques-unes.

##### Auteur de la page

    <meta name="author" content="Jean-Paul Sartre" />

Vous pouvez déclarer plusieurs auteurs en séparant les noms par des virgules.

##### Encodage de la page

    <meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1" />

Ceci déclare que votre page est du (X)HTML (là encore, il s'agit d'un héritage...) et que l'encodage est l'iso-8859-1 (alias iso-latin-1), l'encodage standard pour l'Europe occidentale. La déclaration de l'encodage est importante pour le navigateur.

##### Langue de la page

    <meta http-equiv="Content-Language" content="fr" />

Quelques codes utiles : `fr` pour le français, `en` pour l'anglais, `de` pour l'allemand, `es` pour l'espagnol, `it` pour l'italien, `ru` pour le russe. Déclarer la langue utilisée est utile pour les synthétiseurs vocaux des navigateurs pour aveugles (qui en déduisent comment prononcer) comme pour les navigateurs standards qui peuvent en déduire, par exemple, s'il faut utiliser des guillemets anglo-saxons ("") ou français (« »).

##### Mots clefs

    <meta name="keywords" lang="fr" content="Philosophie, existentialisme,
    littérature engagée" />

Cette balise `meta` est utilisée par certains moteurs de recherche pour indexer les pages. Ne mettez que les mots-clefs les plus significatifs, les moteurs n'aiment pas les listes trop longues. Notez au passage que vous pouvez tout à fait passer à la ligne.

### Le corps de la page

Voilà, on en a fini avec les en-têtes (on n'oublie pas le </head> à la fin). On passe au cœur de votre page : ce que le lecteur va voir via son navigateur.

Le corps de la page est contenu entre balises <body>. Comment le remplir ? Vous le verrez dans les lignes suivantes.

Important : pour tous les éléments de <body> il y a une distinction importante entre les balises dites « block level » et les balises « inline level ».

Les block level sont par exemple des paragraphes, des titres, etc. Ils forment des « blocs ». Typiquement, ils comprennent une ou plusieurs phrases.

Les éléments inline sont plutôt de la mise en forme, ils s'appliquent à l'intérieur des blocs. C'est le cas des balises qui mettent en valeur le texte, qui le renforcent. Typiquement, on les trouve à l'intérieur d'une phrase.

La distinction peut vous paraître confuse mais vous comprendrez mieux ensuite. Vous pouvez regarder par exemple la différence entre citation inline et bloc.

### Squelette entier

Vous pouvez le copier-coller pour servir de modèle à vos pages Web.

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml">

    <head>
    <title><!-- insérer le titre --></title>
    <meta name="author" content="<!-- Insérer votre nom -->" />
    <meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1" />
    <meta http-equiv="Content-Language" content="fr" />
    <meta name="keywords" lang="fr" content="<!-- Insérer les mots-clefs de votre page-->" />
    </head>

    <body>

    <!-- Ici c'est le corps de la page -->

    </body>
    </html>

## Hiérarchiser

Maintenant, il s'agit de remplir un peu votre page. Pour cela, il faut réfléchir un peu avant et la structurer au moyen de titres hiérarchisés. En effet, dès que la page dépasse les « vous êtes bien sur la page de Toto », les informations ont besoin d'être hiérarchisées pour être lisibles. Imaginez cette page sans le moindre titre !

Si vous avez fait du LaTeX, vous connaissez ce genre de chose (`\chapter{}`, `\section{}`, `\subsection{}`...). Idem pour Word avec son système de Titre 1, Titre 2, etc.

En XHTML, c'est aussi simple : <h1>, <h2>, <h3>... Ça va comme ça jusqu'à <h6>, ce qui vous laisse pas mal de marge pour structurer votre document. Traditionnellement, <h1> est réservé au titre de la page (qui peut être, ou pas, le même que le <title>, à vous de voir).

    <h1>Logique transcendantale</h1>
    <!-- ... -->
    <h2>Analytique transcendantale</h2>
    <!-- ... -->
    <h3>Analytique des principes</h3>
    <!-- ... -->
    <h4>Système de tous les principes de l'entendement pur</h4>
    <!-- ... -->
    <h5>Représentation systématique de tous les principes synthétiques</h5>
    <!-- ... -->
    <h6>Les postulats de la pensée empirique en général</h6>
    <!-- ... -->
    <h6>Réfutation de l'idéalisme</h6>
    <!-- ... -->
    <h2>Dialectique transcendantale</h2>

## Mettre en forme

On en arrive au cœur du problème : mettre en forme le texte.

### Paragraphes et sauts de ligne

La plus grande partie d'un texte, habituellement, c'est... du texte. Des paragraphes de texte. En XHTML, les paragraphes sont délimités par des <p> (et </p>, évidemment). Avec la plupart des navigateurs, les paragraphes sont rendus à la manière anglo-saxonne : alignement sur la gauche, pas d'alinéa. Il y a généralement une espace entre deux paragraphes.

Pour aller simplement à la ligne, utilisez l'élément <br />.

### Citations

Vous pouvez citer au niveau inline, soit en utilisant directement des guillemets, soit en utilisant l'élément <q> (pour quote) :

    <q>Delenda Carthago</q>, comme disait le grand Caton...

Au passage, Internet Explorer ignore purement et simplement l'élément <q>, donc mieux vaut utiliser directement les guillemets.

Au niveau bloc, c'est l'élément <blockquote> qu'il vous faut :

    <p>Charles-Marie de La Condamine est un savant et explorateur
    français, né à Paris en 1701. Il est admis à à l'Académie française en
    1760. Il écrit à ce sujet :</p>

    <blockquote>
    <p>
    La Condamine est aujourd'hui<br />
    Reçu dans la troupe immortelle<br />
    Il est bien sourd, tant mieux pour lui,<br />
    Mais non muet, tant pis pour elle.<br />
    </p>
    </blockquote>

<blockquote> est généralement rendu par un bloc indenté à droite et à gauche :

> La Condamine est aujourd'hui
> Reçu dans la troupe immortelle
> Il est bien sourd, tant mieux pour lui,
> Mais non muet, tant pis pour elle.

### Styles de texte

#### Gras et italique

Le XHTML ne se soucie pas du rendu visuel. Pour lui, le gras et l'italique n'existent pas à proprement parler. Mais il sait mettre en valeur du texte.

<strong> est utilisé pour renforcer un membre de phrase, insister sur son importance. Il est donc souvent rendu par du gras par les navigateurs.

<em> (pour emphasize) sert également à mettre en relief un membre de phrase. Il est plus faible que <strong>. Il est généralement rendu par de l'italique.

Selon les règles typographiques habituelles, un mot, une citation en langue étrangère non francisée doit être mis en italique. Il ne s'agit pas ici de mettre en valeur, mais d'une convention typographique. Dans ce cas, vous devez utiliser l'élément <i>. Vous pouvez indiquer de quelle langue il s'agit en utilisant l'attribut `lang`. Exemple :

    Selon le goût italien, les pâtes doivent être cuites <i lang="it"> al dente </i>.

Ce qui donne :

    Selon le goût italien, les pâtes doivent être cuites al dente.

#### Définitions

Le XHTML vous permet de structurer encore davantage vos documents, essentiellement les documents techniques. <dfn> (pour define) sert à indiquer un mot dont on va donner la définition, une fois pour le reste du document. Exemple :

    <p>On dit qu'un morphisme de schémas est <dfn>étale</dfn>
    lorsqu'il est à la fois lisse et non ramifié. En fait, il suffit pour cela
    qu'il soit à la fois <em>plat</em> et non ramifié.</p>

#### Titres (films, livres, etc.)

C'est <cite> qu'il faut utiliser pour les citations de titres de livres, de films, etc. L'élément <cite> est usuellement rendu par de l'italique. Exemple :

    Le film <cite lang="it">Morte a Venezia</cite> de Luchino
    Visconti est une adaptation de la nouvelle <cite lang="de">Der Tod
    in Venedig</cite> de Thomas Mann.

#### Code informatique

<code> (que vous reverrez dans la section du texte préformaté) est également un style de texte qui sert à démarquer un extrait de code informatique du texte normal. Exemple :

    La ligne <code>#include &lt;stdio.h&gt;</code>
    demande au compilateur d'inclure dans le programme certaines
    informations sur la bibliothèque standard d'entrées-sorties.

#### Sigles et acronymes

Les sigles peuvent être indiqués par un élément <abbr>, et les acronymes (sigles prononçables, comme ONU, OTAN, etc.) par l'élément... <acronym>. Ces éléments sont intéressants surtout si on utilise leur attribut `title` : certains navigateurs peuvent alors afficher le contenu de `title` dans une bulle d'aide. Démonstration :

    L'<acronym lang="en" title="United Nations Special
    Commission">UNSCOM</acronym> a été créée pour assister
    l'<abbr lang="en" title="International Atomic Energy
    Agency">IAEA</abbr> en Iraq.

Les bons navigateurs (Mozilla ou FireFox par exemple) affichent le contenu du `title` sous la forme d'une bulle d'aide (tooltip en anglais) quand vous laissez le curseur dessus. Faites le test :

    L'UNSCOM a été créée pour assister l'IAEA en Iraq.

### Listes

Il y a trois sortes de listes possibles en XHTML :

- les listes numérotées ;
- les listes non numérotées ;
- les listes de définitions (lexiques).

Toutes les listes sont des éléments blocs.

#### Listes non numérotées

Elles sont aussi dites « listes à puces » car souvent les navigateurs affichent des puces devant chaque entrée de liste. <ul> et </ul> (pour Unordered Lists) marquent le début et la fin d'une liste, <li> et </li> le début et la fin d'une entrée de liste.

En exemple, voici quelques armes de Goldorak :

    <ul>
    <li> mégavolts</li>
    <li> cornofulgure</li>
    <li> astéro-hache</li>
    </ul>

Ce qui donne :

- mégavolts
- cornofulgure
- astéro-hache

#### Listes numérotées

Même principe, avec <ol> (Ordered Lists) à la place de <ul>. La numérotation se fera par défaut en chiffres arabes (1, 2, 3...). Vous pouvez changer le type de numérotation, en chiffres romains ou en caractères alphabétiques (a, b, c...) grâce à l'attribut `type` :

    <ol type="i">
    <li> mégavolts</li>
    <li> cornofulgure</li>
    <li> astéro-hache</li>
    </ol>

Ce qui donne :

1. mégavolts
2. cornofulgure
3. astéro-hache

Pour changer de numérotations, changez la valeur de `type` : I pour les chiffres romains majuscules, a pour les caractères alphabétiques minuscules, A pour les majuscules.

#### Lexiques

On utilise l'élément <dl> (Definition list). À l'intérieur de l'élément <dl>, <dt> (pour definition term) est une entrée du lexique, et <dd> (pour definition definition...) la définition associée à cette entrée. Admettons que vous fassiez un lexique du folklore normalien.

    <dl>

         <dt>Amazon</dt>
              <dd>Flipper mythique de la K-fêt, arrivé à l'École en 1990.</dd>

         <dt>Fun machine</dt>
              <dd>L'autre flipper, qui ne sert comme son nom l'indique qu'à se dérouiller les
    	  doigts ou à tuer le temps en attendant de jouer à l'Amazon.</dd>

    </dl>

Ce qui donne :

Amazon
  Flipper mythique de la K-fêt, arrivé à l'École en 1990.
Fun machine
  L'autre flipper, qui ne sert comme son nom l'indique qu'à se dérouiller les doigts ou à tuer le temps en attendant de jouer à l'Amazon.

### Texte préformaté

On utilise l'élément <pre> pour du texte préformaté au niveau bloc. Différences avec du texte normal : les navigateurs respectent toutes les espaces que vous avez indiqués et ils utilisent généralement une fonte à espacement fixe. Le texte préformaté peut être utilisé pour mettre en page un poème, par exemple, ou plus prosaïquement, du code informatique.

Attention toutefois, <pre> n'est pas l'environnement `verbatim` de LaTeX : le code XHTML y est interprété. Dans cette documentation, par exemple, on a recours aux entités pour représenter <, > et &.

Prenons un exemple, un programme très simple en langage C :

    <pre>
    #include &lt;stdio.h&gt;

    int main(void)
    {
        printf("Hello, world!\n");
        return 0;
    }
    </pre>

sera rendu par :

    #include <stdio.h>

    int main(void)
    {
        printf("Hello, world!\n");
        return 0;
    }

(pour les littéraires, recopiez ça dans un fichier `hello.c`, faites `gcc hello.c` puis `./a.out` et regardez).

Pour citer du code en inline, utilisez la bien-nommée balise <code>.

## Images

On se sert de l'élément <img /> (pour image, bien sûr) et de ses attributs. Le principal attribut est `src` : il permet de spécifier l'adresse où aller chercher l'image. Ainsi, quand on écrit son fichier `~/www/index.html` pour inclure une image située dans son répertoire `~/www/images/`, on écrira :

    <img src="images/monimage.jpg" />

On peut aussi indiquer une adresse absolue quand l'image n'est pas sur votre compte, par exemple :

    <img src="http://www.eleves.ens.fr/tuteurs/icones/note.png" />

Il est obligatoire d'indiquer une description de votre image, en guise de texte alternatif pour les navigateurs texte, ou si pour une raison quelconque l'image ne peut pas être téléchargée ; le texte alternatif sert, en particulier, pour les non-voyants qui disposent de logiciels pour lire du texte à haute voix, mais n'ont rien pour décrire des images. Ce texte doit être court et informatif. On l'indique avec l'attribut `alt` :

    <img src="images/pouf.jpg" alt="Photo de moi et mon chien Pouf en vacances" />

Si l'image ne joue aucun rôle sémantique (c'est-à-dire si elle n'est là que pour décorer), on indique `alt=""`.

Les formats les plus couramment utilisés pour le Web sont le JPEG, en `.jpg` et le GIF, en `.gif` — utiliser de préférence le format PNG, GIF n'étant pas libre, et moins bon techniquement. JPEG est un format qui est plus adapté aux photos, GIF ou PNG sont plus adaptés aux logos et de manière générale aux images ayant peu de couleurs.

## Tableaux

Les tableaux sont décrits par l'élément <table>. C'est l'un des chapitres les plus complexes du XHTML : les possibilités sont très nombreuses.

### Un tableau simple

<table> définit l'ensemble du tableau. À l'intérieur, il faut décrire les lignes du tableau et ses cellules. L'élément <tr> décrit les lignes, et <td> les cellules. On déclare dans l'ordre <table>, puis <tr> et enfin <td>.

    <table>
    <tr><td> Cellule 1 </td><td> Cellule 2 </td></tr>
    <tr><td> Cellule 3 </td><td> Cellule 4 </td></tr>
    <tr><td> Cellule 5 </td><td> Cellule 6 </td></tr>
    </table>

Ce qui donne :

Cellule 1 | Cellule 2
Cellule 3 | Cellule 4
Cellule 5 | Cellule 6

Pas très croquignolet, hein ?

### Un tableau plus évolué

On peut déjà commencer par donner un titre à ce tableau, grâce à l'élément <caption>. Le titre du tableau se place au début du tableau, avant la première ligne (avant le premier <tr>) mais dans le tableau tout de même (donc après la déclaration de <table>).

On veut également différencier des méta-cellules, qui donnent des informations sur le contenu des cellules de données, des cellules de données à proprement parler. Les cellules de données, c'est bien sûr <td>, et les méta-cellules, c'est l'élément <th> (le H étant pour header, en-tête) qui s'en charge.

On peut aussi, pour rendre le tableau un peu plus esthétique, et plus lisible (6 cellules ça va, mais quand vous en aurez 42...), lui donner une bordure. On utilise pour cela l'attribut border à qui on spécifie une épaisseur en nombre de pixels. Généralement, border=1 suffit amplement à ce que vous voulez faire (délimiter mieux les cellules).

    <table border=1>
    <caption>Ceci est un tableau</caption>
    <tr><th> Colonne gauche </th><th> Colonne droite</th></tr>
    <tr><td> Cellule 1 </td><td> Cellule 2</td></tr>
    <tr><td> Cellule 3 </td><td> Cellule 4</td></tr>
    <tr><td> Cellule 5 </td><td> Cellule 6</td></tr>
    </table>

Donc :

Ceci est un tableau
Colonne gauche | Colonne droite
--- | ---
Cellule 1 | Cellule 2
Cellule 3 | Cellule 4
Cellule 5 | Cellule 6

## Liens

Le meilleur pour la fin, les liens ! Ce qui fait d'une page Web une vraie page hypertexte (le HT de XHTML) et pas un bête document. Les liens se décrivent avec l'élément <a> (qui est, bien sûr, inline), suivi d'attributs.

### Lien simple

Le lien de base utilise l'attribut href :

    Retourner au <a href="http://www.eleves.ens.fr/">serveur des élèves</a>.

donne ainsi :

    Retourner au serveur des élèves.

On peut utiliser des liens absolus, comme celui ci-dessus, qui donne l'ensemble de l'URL, mais aussi des liens relatifs, qui sont relatifs à l'arborescence de votre site. Admettons que vous ayez dans votre répertoire `~/www/` un répertoire `stage` qui contient, entre autres, le fichier `rapport.html`. Pour faire un lien dessus, depuis la page d'accueil, ça donnera :

    Mon <a href="stage/rapport.html">rapport de stage</a>
    parle du lien entre les nombres p-adiques et les phases de
    la lune.

### Ancres

Une ancre sert à faire un lien local, c'est-à-dire vers un endroit précis du document. C'est particulièrement utile pour faire une table des matières avec des liens qui pointent vers les titres, ou encore pour faire des références croisées dans un document.

On commence par définir les ancres, c'est-à-dire les endroits vers lesquels on veut pointer. On utilise l'attribut `name` de l'élément <a> :

    Les <a name="olm">Olmèques</a> ont véritablement
    existé. C'est la première des grandes civilisations précolombiennes...

Quand vous lisez le document avec un navigateur, l'ancre est invisible. Pour choisir le nom de l'ancre, vous avez à votre disposition tous les caractères alphanumériques, et mêmes les caractères accentués. Veuillez seulement à ne pas utiliser deux fois la même ancre au sein du document.

Pour faire le lien vers cette ancre, on utilise toujours l'attribut `href`, mais en modifiant la syntaxe avec un `#` :

    Esteban, Zia et Tao rencontrent alors les Olmèques, une peuplade
    extra-terrestre (voir ici la <a href="#olm">véritable histoire
    du peuple olmèque</a>.

Vous pouvez positionner un lien vers cette ancre même depuis un autre fichier :

    Voir <a href="citesdor.html#olm">l'histoire des Olmèques</a>.

### Liens spéciaux

Vous pouvez créer un lien de telle sorte que, lorsqu'on suit ce lien, on vous envoie un courrier électronique. On utilise toujours l'élément <a> et son attribut `href`. Seulement, le protocole du lien change. Auparavant c'étaient des liens HTTP (Web). Mais vous pouvez aussi utiliser le protocole `mailto`, qui est le protocole des courriers électroniques.

    Écrivez-moi : <a href="mailto:mon.adresse@ens.fr">mon.adresse@ens.fr</a>

Quand un lecteur suivra ce lien, son navigateur lui proposera de vous envoyer un mail.

Donner une adresse « en clair » sur son site est une excellente manière de recevoir du spam. Mieux vaut utiliser un encodage très simple, à base d'entités, qui vous permettra de damer le pion aux robots collecteurs d'adresses.

Les entités dont vous avez besoin en l'espèce sont `&#64;` pour une arobase (@) ou encore `&#46;` pour un point (.) et `&#45;` pour un tiret (-). Ce qui donne :

    Mon adresse : <a href="mailto:jean&#45;paul&#46;sartre@ens.fr">jean&#45;paul&#46;sartre&#64;ens&#46;fr</a>

Complètement illisible, on est bien d'accord ? C'est ce que verra le robot collecteur d'adresses. En revanche, un lecteur normal passant par un navigateur verra ceci :

    Mon adresse :  <a href="mailto:jean-paul.sartre@ens.fr">jean-paul.sartre@ens.fr</a>

Vous pouvez utiliser ce système avec d'autres protocoles, celui des news (`news:`) pour que le navigateur affiche (s'il en est capable) le message dont vous avez donné le message-ID, ou le FTP...

## Le validateur du W3C

Vous avez fini de taper votre première page XHTML. Vous vous êtes bien relu. Il vous reste une dernière étape : passer cette page au validateur XHTML. Il vous permettra de voir si vous avez bien refermé toutes vos balises dans l'ordre qu'il faut, par exemple.

### Validation

Il vous suffit d'aller dire coucou au validateur du W3C et de lui indiquer l'URL de votre page XHTML, ou encore de lui indiquer le chemin du fichier sur votre disque dur. Vous saurez tout de suite si votre code est bon ou s'il reste quelques corrections à faire...

Attention : le validateur ne vérifie que la correction formelle de votre code. En clair, il peut vous dire que votre fichier est syntaxiquement correct, mais pas s'il est sémantiquement correct.

Si le code de votre page n'est pas correct, le validateur vous l'indiquera, en vous précisant quelles sont les lignes incriminées dans votre fichier XHTML, et la nature de l'erreur. En suivant ces instructions, vous pourrez corriger votre code.

### Le label

Quand vous aurez une page impeccable, ce qui est loin d'être difficile à obtenir (et qui est très gratifiant, vous verrez), le validateur vous permettra d'insérer dans votre page le code suivant :

    <p>
    <a href="http://validator.w3.org/check?uri=referer">
       <img src="http://www.w3.org/Icons/valid-xhtml10"
            alt="Valid XHTML 1.0!" height="31" width="88" /></a>
    </p>

Il peut être très utile de suivre ce conseil. Vous aurez ainsi dans votre page le logo suivant :

ce qui présente les avantages suivants :

- vos lecteurs peuvent voir que vous respectez les normes et les promouvez ;
- en cliquant dessus, vous pouvez vérifier en un clin d'œil la conformité de votre page aux normes, et corriger très rapidement tout écart.

### Pourquoi respecter les normes ?

Nous vous rappelons que les respect des normes n'est pas seulement une affaire de pédanterie, mais avant tout d'accessibilité. Pour en savoir plus sur le calvaire des pages non conformes à la norme pour les personnes handicapées, vous pouvez aller voir le site AccessiWeb.

Auteurs : Marie-Lan Nguyen (HTML), Baptiste Mélès (XHTML). Dernière modification : .