Alain Barraud Mémento informatique  
 
Accueil Logithèque - SE Photo - vidéo Internet - protocoles Site Web PC - Réseau Archives

XHTML : les bases

Les sémantiques des éléments et leurs attributs sont définis dans la Recommandation W3C pour le HTML 4. Ces sémantiques définissent les fondations de l'extensibilité future de XHTML. La compatibilité avec les agents utilisateurs HTML actuels est possible en suivant un ensemble raisonnable de règles.

Sommaire de la page
Principales différences entre HTML 4 et XHTML 1
XHTML1.1 : modularisation
Types de balises et attributs
Synthaxe du code de base
Les commentaires
Les commentaires conditionnels pour IE
Mise en forme du texte
Les liens
Les images

Principales différences entre HTML 4 et XHTML 1

Différences syntaxiques les plus courantes entre un document écrit en HTML 4 et en XHTML 1.0 :

CODE HTML 4
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<title>
Exemple HTML 4</title>
<ul>
<li>
Des éléments comme HTML, HEAD et BODY sont implicites, leurs balises ouvrantes et fermantes sont optionnelles.</li>
<li>
De nombreuses balises fermantes sont optionnelles, notamment pour P (paragraphe) et LI (entrée de liste).
<li>Les noms d'éléments et d'attributs peuvent <EM Class="important">librement</Em> mélanger majuscules et minuscules.</li>
<li>
Certains attributs ont une valeur par défaut <table border><tr><td>x</td></tr></table>.</li>
<li>
Les guillemets ne sont pas <em class=important>toujours</em> obligatoires autour des valeurs d'attribut.</li>
<li>
Les éléments vides n'ont pas de balise fermante <img src="i.png" alt="i">.</li>
</ul>

CODE XHTML 1.0
<!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>
Exemple XHTML 1</title>
</head>
<body>

<ul>
<li>
Tous les éléments doivent être explicitement balisés.</li>
<li>
Les balises fermantes ne sont pas optionnelles.</li>
<li>
Les noms d'éléments et d'attributs <em class="important">doivent</em> être en minuscules.</li>
<li>
Tous les attributs doivent avoir une valeur explicite <table border="1"><tr><td>x</td></tr></table>.</li>
<li>
Les guillemets sont <em class="important">toujours</em> obligatoires autour des valeurs d'attribut.</li>
<li>
Les éléments vides doivent être fermés <img src="i.png" alt="i" />.</li>
</ul>
</body>
</html>


XHTML1.1 : modularisation

HTML 4.0 et XHTML 1.0 sont des langages très vastes avec un registre pas tout à fait simple de 80 éléments, de leurs attributs possibles, de leurs règles d'imbrication et de toute une série de signes nommés. Les deux langages demandent pour les navigateurs certaines capacités qu'on ne peut pas demander à des logiciels tournant sur des téléphones portables par exemple.
Les évolutions suivantes, qui ont abouti à XHTML 1.1, divisent le langage XHTML en modules, chacun regroupant un type de fonctionnalités. Cette division est conçue pour permettre à du matériel informatique aux capacités techniques limitées, notamment du matériel portable, de ne prendre en charge que des parties bien définies de XHTML.
Cette modularisation est accompagnée de l'abandon des fonctionnalités de HTML 4 pouvant être reprises dans des feuilles de style (typiquement en CSS) : les fonctionnalités définissant les détails de présentation d'une page Web. Le but de cette séparation entre contenu informatif et présentation est également de doter les pages en XHTML de la souplesse nécessaire pour permettre la consultation avec des appareils très divers, de l'ordinateur de bureau au téléphone portable.

Les principaux modules

Voici une description de quelques-uns des modules disponibles, rangés dans leur catégorie, parmi les plus importants :

Modules de base
STRUCTURE : tout ce qui concerne le squelette du document (body, head, html, title)
TEXT : balises permettant de définir le type de texte, hors listes (p, acronym, em, strong…)
HYPERTEXT : le lien, tout simplement (a)
LIST : les définitions de liste (ul, li, dt, dd…)
PRESENTATION : balises de mise en page du texte (b, i, hr, sub…)
BASIC FORMS: le minimum nécessaire aux formulaires (form, input, label, textarea…)
BASIC TABLES : le strict nécessaire aux tableaux (table, td, tr, th, caption)
IMAGE : la balise image seule (img)
OBJET : les balises de gestion d'objets (object, param)
SCRIPTING : ce qui concerne un contenu exécutable (script, noscript)
STYLE SHEET : permet de styler le document (style)
LEGACY : les éléments ne devant plus être utilisés… mais quand même disponibles au cas où (font, center, strike, u…)
Sur les 28 modules disponibles, quatre sont nécessaires pour que le document soit conforme : les modules de base Structure, Text, HyperText et List.


Types de balises et attributs

Il y a 2 types de balises :

  • Les balises de type conteneur
    La plupart des balises vont par paires, avec une « balise ouvrante » et une « balise fermante ».
    Exemple de syntaxe Xhtml : <title>Ceci est un titre</title>
    Ces balises peuvent être de type Bloc ou En Ligne.
  • Les balises seules, appelées aussi balises autofermantes
    Exemple de syntaxe Xhtml : <img />
    Les balises seules ont un espace avant le slash "/"
    Ces balises peuvent être de type Bloc ou En Ligne.
De même, on peut classer les balises en 2 catégories : block et inline (en français : Bloc et En Ligne)
  • Les balises de type bloc permettent de structurer la page en blocs.
    Une balise de type "bloc" crée automatiquement, sur une page web, un retour à la ligne avant et après. Il suffit d'imaginer tout simplement un bloc. Une page web sera en fait constituée d'une série de blocs les uns à la suite des autres.
    Ces blocs peuvent bien sur contenir des éléments orphelins (comme du texte), des balises en lignes, des balises autofermantes ainsi que d'autres balises de type bloc, augmentant ainsi considérablement, les possibilités pour la création du design d'un site Web.
    Liste des balises de type Bloc :
    <address>, <blockquote>, <body>, <dd>, <div>, <dl>, <dt>, <fieldset>, <form>, <h1>, <h2>, <h3>, <h4>, <h5>, <h6>, <head>, <hr />, <html>, <li>, <map>, <noscript>, <ol>, <p>, <pre>, <script>, <style>, <table>, <tbody>, <td>, <tfoot>, <th>, <thead>, <tr>, <ul>.
  • Les balises de type En Ligne : à l'intérieur d'un paragraphe. Une balise de type "En Ligne" se trouve obligatoirement à l'intérieur d'une balise "Bloc". Une balise En Ligne ne crée pas de retour à la ligne, le texte qui se trouve à l'intérieur s'écrit donc à la suite du texte précédent, sur la même ligne (c'est pour cela que l'on parle de balise "en ligne").
    Les balises de type En Ligne ne peuvent contenir que des éléments orphelins (texte…).
    Les éléments En Ligne se distinguent eux-même en deux parties : les éléments "remplacés" et les éléments "non remplacés".
    Les éléments "remplacés" sont les seuls qui possèdent des dimensions (width, height). Ce sont les balises <img />, <object>, <button>, <input />,<select>, <textarea>
    Les autres balises de type En Ligne n'ont pas de dimensions (aucune largeur, ni hauteur).
    Liste des balises de type En Ligne :
    <a>, <abbr>, <acronym>, <area />, <bdo>, <br />, <button>, <caption>, <cite>, <code>, <del>, <dfn>, <em>, <img />, <input />, <ins>, <kdd>, <label>, <legend>, <link />, <meta />, <object>, <optgroup>, <option>, <param />, <q>, <samp>, <select>, <span>, <strong>, <sub>, <sup>, <textarea>, <title>, <var>.
Note : voir comment une balise block peut devenir inline et inversement

Les balises universelles
Ce sont des balises qui n'ont aucun sens particulier (contrairement à <p> qui veut dire "paragraphe", <strong> "important" etc…).
Le principal intérêt de ces balises c'est de pouvoir appliquer une class (ou un id) pour le css quand aucune autre balise ne convient. (Voir page correspondante)

Il existe 2 balises génériques, et comme par hasard la seule différence entre les deux c'est que l'une d'elle est inline, l'autre est block :
  • <span></span> (inline)
  • <div></div> (block)

Les attributs
Les attributs servent à donner des précisions sur une balise.

Note :
- Les noms des balises et attributs s'écrivent toujours en minuscules
- Les valeurs des attributs peuvent contenir des majuscules


Synthaxe du code de base

Syntaxe du code de base d'une page en Xhtml

<!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" xml:lang="fr" >
      <head>
            <title>
Bienvenue sur mon site !</title>
            <meta
http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
      </head>
      <body>

            <!-- Rappel : c'est ici que l'on écrit le contenu de notre page web -->
      </body>
</html>

Explication :

  • Déclaration Doctype qui sert au navigateur pour indiquer qu'il s'agit d'une page xhtml en version 1.0
  • La balise <html> contient 2 attributs :
    • xmlns= : obligatoire, indique l'adresse traitant du xhtml (à recopier tel quel)
    • xml:lang= : indique dans quelle langue la page est rédigée.


Les commentaires

Les commentaires : <!-- commentaires -->

Dans un commentaire, on peut écrire ce que l'on veut, mais mieux vaut éviter les caractères spéciaux notamment les crochets < et >, le dernier pouvant être interprété par le navigateur comme la fin du commentaire.


Les commentaires conditionnels pour IE

Les commentaires conditionnels sont des commentaires HTML classiques, mais avec une syntaxe particulière que seul Internet Explorer Windows peut interpréter (mécanisme propre à Windows et que Microsoft préconise). Les autres navigateurs considèrent ces commentaires conditionnels comme tels et les ignorent. IE Windows les prend en compte depuis sa version 5 pour gérer les défauts d'implémentation CSS qui changent suivant les versions.
Il est fortement conseillé d'utiliser ces commentaires conditionnels plutôt que les hacks CSS pour gérer les défauts d'implémentation CSS pouvant être différents suivant les versions IE rendant par la même les hacks problèmatiques.
Les commentaires conditionnels serviront surtout pour IE6 et IE7, IE8 respectant à priori CSS2 (pour CSS3, IE8 toujours en retard).
Les commentaires conditionnels embarquent des instructions que IE pourra interpréter.
Peuvent servir à ajouter des éléments <style>, <script> ou <link> à une page quand elle est lue par IE (cacher pour les autres).

Syntaxe type

<!--[if IE]>
    Ici code HTML pour IE
<![endif]-->
Ce qui se passe :
  • <!--, ouverture du commentaire, à partir d'ici, tout ce qui se trouvera après jusqu'à la fin du commentaire, ne sera pas interprété par les navigateurs.
  • [if IE] (et ses variantes), cette condition sera lue et interprétée par IE
  • le chevron fermant > sans les doubles tirets, ne ferme pas le commentaire HTML. Par contre, pour IE, cela veut dire que ce qui suit devra être interprété comme HTML (pour les autres, ce sera toujours le commentaire)
  • <![endif] signifie à IE la fin du contenu conditionnel. Pour les autres navigateurs, ce n'est pas interprété, on est toujours dans le commentaire.
  • --> indique la fin du commentaire
Le commentaire conditionnel peut s'adresser à une ou plusieurs versions de IE :
- if IE, condition générique minimale, signifie toutes les versions d'IE
- l'ajout du numéro de version en limeite la portée d'application à la version indiquée (if IE5 pour IE 5.0 et IE5.5)
- si on veut qu'une version d'IE5, on met la décimale voulue (if IE5.0 ne concernera que la version 5.0)
- Pour une version bien précise, indiquer la totalité du numéro
On peut aussi utiliser des opérateurs de comparaison :
- gt pour greater than : > strictement supérieur
- gte pour greater than equal : ≥ supérieur ou égal
- lt pour less than : > strictement inférieur
- lte pour less than equal : ≤ inférieur ou égal

Des exemples commentés :
<!--[if IE 5.0]> pour IE 5.0 <![endif]-->
<!--[if lte IE 6]> pour IE 5.0, IE 5.5 et IE 6.0 <![endif]-->
<link rel="stylesheet" media="screen" type="text/css" title="Mon style" href="style.css" />
<!--[if IE 7]>
<link rel="stylesheet" media="screen" type="text/css" title="Mon style" href="style_ie7.css" />
<![endif]-->
Enfin, on peut masquer une feuille de style à IE avec ! opérateur de négation (not), if !IE signifie si le navigateur n'est pas IE Windows
Exemple :
<!--[if !IE]> <-->
    <link rel="stylesheet" media="screen" type="text/css" title="Mon style" href="style.css" />
<!--> <![endif]-->
Dans ce cas, on a des balises commentaires en plus. Explication :
  • <!--[if !IE]>, comme avant, ouverture commentaire conditionnel disant si le navigateur n'est pas IE Windows. IE ignorera donc tout ce qu'il y aura jusqu'au [endif]
  • <-->, indique aux autres navigateurs la fin du commentaire et ils interprèteront ce qui suivra.
  • ensuite, réouverture d'un autre commentaire, IE y trouve la fermeture du commentaire conditionnel ![endif] et le commentaire est finalement fermé
L'intérêt de cette technique est de viser une version d'IE avec d'autres conditions. Exemple :
<!--[if IE7]> <-->
    <link rel="stylesheet" media="screen" type="text/css" title="Mon style" href="style.css" />
<!--> <![endif]-->
Signifie : sera lu par Safari, Firefox,etc…, mais sera aussi lu par IE7 mais pas par les autres versions d'IE.


Mise en forme du texte

Pour connaître le détail des balises de mise en forme, se reporter au tableau des balises.
Ce paragraphe est destiné à survoler les principales balises, et à préciser certaines particularités.

Les paragraphes
<p>Ceci est un paragraphe</p>
Note : <p> est une balise de type block qui non seulement provoque un retour à la ligne, mais provoque également un saut de ligne. Donc pour créer un saut de ligne, il suffit de faire un second paragraphe.

A la ligne
Voici la balise <br />
pour aller à la ligne. On peut faire plusieurs retour à la ligne dans un paragraphe, mais cette balise deviendra inutile avec l'emploi des CSS
C'est une balise seule qui sert juste à indiquer qu'on doit aller à la ligne. On doit obligatoirement la mettre à l'intérieur d'un paragraphe, donc pas de <br /> à l'extérieur des balises <p> </p>.

Les titres
6 niveaux de titres de h1 à h6 suivant l'importance que l'on souhaite. Idem à html
Note : la balise titre est une balise block qui donc constitue un bloc. On ne doit PAS mettre de titre à l'intérieur d'un paragraphe.

Mettre en valeur le texte
pour mettre en valeur des mots à l'intérieur d'un paragraphe, 2 balises :

  • <em>pour mettre un peu en valeur</em>
    ce qui donne : pour mettre un peu en valeur
  • <strong>pour mettre bien en valeur</strong>
    ce qui donne : pour mettre bien en valeur

Exposants et indices

  • <sup>mettre un exposant</sup>
  • <sub>indicer en bas</sub>

Citation longue
C'est la balise blockquote de type block qui comme toutes les balises de type block sert à structurer la page et constitue un bloc séparé et donc ne doit pas se trouver à l'intérieur d'un paragraphe.
On doit mettre <p> à l'intérieur de <blockquote> comme ceci :
<blockquote>
<p>

texte à écrire
</p>
</blockquote>

Les acronymes
C'est une suite d'initiales dont on ne connaît pas toujours la signification. Grâce à l'attribut title, possibilité d'insérer une info bulle
Exemple : <acronym title="eXtensible HyperText Markup Language">XHTML</acronym> est le langage qui permet de créer un site web.
donne (laisser la souris sur XHTML) : XHTML est le langage qui permet de créer un site web.
Note : Firefox souligne en pointillés l'acronyme, tandis qu'IE... ne fait rien.


Les liens

Idem à html

Lien vers une autre page
Note : mettre un info bulle sur un lien, utiliser l'attribut title
Aller sur la page <a href="balise.html" title="Liste des balises">Liste des balises</a>
donne : Liste des balises

lien pour envoyer un mail
Exemple de syntaxe : Pour me contacter, <a href="mailto:jean.dupont@free.fr">cliquez ici</a>

lien vers une ancre
Pour créer une ancre, on ajoute l'attribut id à une balise qui servira alors de repère
Exemple de syntaxe : <h2 id="mon_ancre">Titre</h2>
Il suffit de rajouter un dièse (#) : <a href="#mon_ancre">Titre</a>
Lien vers une ancre située dans une autre page : même syntaxe et idem html pour le lien :
<a href="cible.html#mon_ancre">lien autre page</a>


Les images

.jpg, .png, .gif (a compléter)
insérer une image
utilisation de la balise de type marqueur <img />
<img /> peut avoir plusieurs attributs. 2 sont indispensables :

  • src : url de l'image
  • alt : signifie texte alternatif. Court texte obligatoire alternatif à l'image en cas de non affichage

Note : comme pour alt, une image doit être insérée dans un paragraphe, entre les balises <p></p>, pour être conforme à la norme xhtml. (sinon, la page s'affichera mais ne sera pas valide en tant que xhtml.
info bulle avec l'attribut title. Avec IE, sans cet attribut, IE affiche le texte alt comme info bulle ce qui est anormal. Dans le cas où IE trouve les 2 attributs, il affichera l'info bulle de title.(ce qui est normal)
Exemple de syntaxe:
<p>
Voici une photo <img src="images/photo.jpg" alt="Photo de moi" title="Ceci est ma photo" />
</p>
image cliquable mettre image entre balises <a> et </a>
pour le cadre bleu, voir CSS
Syntaxe :
pour retourner au sommaire, cliquer sur le dossier : <a href="index.html"><img src="images/dossier.gif" alt="dossier" title="Sommaire" /></a>
Résultat :
pour retourner au sommaire, cliquer sur le dossier : dossier