XHTML ou eXtensible HyperText Markup Language est un langage à/de balises issu de XML, qui dérive lui-même des concepts du SGML (Standard Generalized Markup Language) conçu à partir de 1969 par Charles Goldfarb travaillant à l'époque chez IBM. SGML est employé dans les industries de la documentation et de l'édition.
La compréhension d'une langue (français, anglais, ...) repose sur au moins deux points :
L'idée fondamentale soutendue par XML est l'utilisation de balises pour ajouter un contenu sémantique à un texte. Par exemple, la phrase Le lion mange la gazelle peut être agrémentée de balises :
Le lion | mange | la gazelle |
sujet | verbe | complément |
---|
On retrouve la phrase initiale agrémentée d'informations complémentaires :
Le langage XHTML est l'application de ce principe à la description de pages web.
Ainsi, à partir d'un ensemble de textes, on pourrait en déduire le régime alimentaire des lions. Il suffirait d'utiliser un outil d'interrogation de fichiers XML en cherchant, dans toutes les phrases, le mot lion/lionne dans le sujet et mange/dévore au niveau du verbe. Le complément doit alors contenir un animal que les lions mangent.
XHTML 1.0 (2001) est une évolution de HTML version 4.01 basée sur XML. La version XHTML 2.0 qui a été développée pendant près de 8 ans a été abandonnée en 2009 à la faveur de XHTML 5 (2012). XHTML 2.0 n'était pas rétro-compatible avec HTML 4.
Aujourd'hui on parle de manière équivalente de HTML 5 ou XHTML 5. XHTML est simplement plus restrictif dans sa syntaxe. On parle alors de (X)HTML.
Parmi les principaux éléments liés à XHTML 5, on note :
Les conventions sont les suivantes :
On associe généralement à un fichier XML un fichier DTD (pour Document Type Definition), qui décrit la grammaire du document :
Une DTD permet notamment grâce à des outils spécifiques de vérifier qu'un fichier XML suit l'organisation de la grammaire, on vérifie donc la conformité de la syntaxe.
Dans l'exemple qui suit, on définit un système qui permet de déclarer des classes pour, par
la suite, générer le code C++ ou Java correspondant. On dit par exemple en ligne 1 que la balise
En ligne 5, on déclare l'attibut
Les fichier (X)HTML prennent l'extension .html ou (parfois .htm), il existe d'autres extensions notamment lorsque l'on utilise des langages de script pour dynamiser les pages web :
L'organisation (ou la structure) d'une page web est la suivante :
En fonction de la version HTML / XHTML, on utilisera un préambule différent :
On voit rapidement qu'il est plus facile d'utiliser XHTML 5.
Il existe pour la balise
On peut par exemple ajouter :
<meta name="viewport" content="width=device-width, initial-scale=1" />
Ces dernières années, les résolutions d'écran ont atteint une taille telle que les pixels individuels
sont difficiles à distinguer à l'œil nu. Par exemple, les smartphones récents ont généralement un écran de 5
pouces avec des résolutions supérieures à 1920-1080 pixels (~400 dpi). Pour cette raison, de nombreux
navigateurs peuvent afficher leurs pages dans une taille physique plus petite en convertissant plusieurs
pixels matériels pour chaque « pixel » CSS. Au départ, cela a causé des problèmes de convivialité et de
lisibilité sur de nombreux sites Web optimisés pour le tactile.
Voir cette page pour un aperçu plus détaillé.
Voici un exemple de page :
On notera la définition de l'encodage des caractères est assez simple. Il existe une autre manière de faire en utilisant le code suivant :
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"> <!-- Préférer la méthode ci-dessous --> <meta charset="utf-8" >
Parmi les balises XHTML qui permettent de décrire le contenu d'une page dans
Si on suit une organisation classique d'une page, on trouve :
Il est à noter que les balises
La balise
On donne généralement un attribut identifiant
Nous allons à présent nous intéresser aux balises liées au texte, aux listes, aux tableaux.
Les deux éléments principaux liés au texte sont les titres et les paragraphes :
D'autres balises à l'intérieur d'un titre ou d'un paragraphe permette de modifier l'apparence de celui-ci :
citation
Il est recommandé de ne plus utiliser certaines de ces balises comme
Voici un exemple qui utilise le style (CSS) défini pour cette page :
Voici un texte en gras, en emphase, souligné.
<h1>Titre h1</h1> <h2>Titre h2</h2> <p>Voici un texte <b>en gras</b>, <em>en emphase</em>, <u>souligné</u>. </p>
Les balises
Un lien ou hyperlien est défini par :
Bonjour, ceci est ma première page web !
<p>Bonjour, ceci est ma première <a href="http://leria-info.univ-angers.fr/~jeanmichel.richer/">page</a> web !</p>
On peut, en outre, ajouter une référence dans la page grâce au caractère # (hash sign) que l'on ajoute à la fin de l'URL.
Mais il faudra également ajouter la définition de ce lien dans la page :
<p>Je veux aller au <a href="#SECOND_PARAGRAPHE">second paragraphe</a> de la page info.html</p> <a name="SECOND_PARAGRAPHE"></a> <p>Un second paragraphe</p>
On peut également ouvrir une page dans un nouvel onglet en ajoutant l'attribut
Se rendre sur Yahoo en ouvrant un nouvel onglet.
<p>Se rendre sur <a href="http://yahoo.fr" target="_blank" rel="noopener noreferrer">Yahoo</a> en ouvrant un nouvel onglet.</p>
Enfin, on peut ouvrir une URL dans une nouvelle fenêtre :
Ouvrir une nouvelle fenêtre vers Yahoo.
<p>Ouvrir une nouvelle fenêtre vers <a href="http://yahoo.fr" target="_parent" onclick="window.open('http://yahoo.fr', name='_blank', 'width=600, height=400, toolbar=yes, resizable=no'); return false;">Yahoo</a>.</p>
Il existe une seule balise auto fermante appelée
<p class="center"> <img src="ens/l1/img/bi2_part_2.png" alt="structure des répertoires sous Linux" width="400" height="300" /> </p>
Deux nouvelles balises ont été introduites afin de gérer les images :
Il existe trois types de listes :
Pour les listes
Pour les listes
L'exemple qui suit montre comment utiliser ces listes :
<!-- liste non numérotée --> <h5>Liste non numérotée</h5> <ul> <li>premier élément</li> <li>second élément</li> </ul> <!-- liste numérotée --> <h5>Liste numérotée</h5> <ol> <li>premier élément</li> <li>second élément</li> </ol> <!-- liste de descriptions --> <h5>Liste de descriptions</h5> <dl> <dt>Nos Cafés</dt> <dd>Cappuccino</dd> <dd>Latté</dd> <dd>Latté Machiatto</dd> <dt>Nos Thés</dt> <dd>English Breakfast</dd> <dd>Chaï</dd> </dl> <!-- Combinaison de listes --> <h5>Combinaison de listes</h5> <dl> <dt>Nos Cafés</dt> <dd> Capuccino <ul> <li>classique</li> <li>lait d'amande</li> <li>lait de coco</li> </ul> </dd> <dd>Latté</dd> <dd>Latté Machiatto</dd> <dt>Nos Thés</dt> <dd>English Breakfast <ol> <li>Darjeeling</li> <li>Russian</li> </ol> </dd> <dd>Chaï</dd> </dl>
Concernant les listes, on pourra modifier le style de numérotation ou le symbole utilisé pour les listes non numérotées qui peut être un carré, un cercle ou une image.
On utilise la propriété
Remarque : ces valeurs peuvent aussi s'appliquer à des listes numérotées.
On modifie le type de numérotation en utilisant la même propriété mais en utilisant les valeurs :
Il est possible de remplacer les cercles ou carrés par une image en définissant la propriété
les tableaux sont introduits par la balise
De nouvelles balises ont été introduites en XHTML afin de pouvoir afiner les styles des tableaux :
Les balises classiques sont les suivantes :
Month | Savings |
---|---|
Sum | $180 |
January | $100 |
February | $80 |
<table style="border-collapse: collapse;" width="350" class="center"> <caption>Ma première table</caption> <!-- l'entête avec les titres des colonnes --> <thead> <tr> <th>Month</th> <th>Savings</th> </tr> </thead> <!-- éventuellement le bas de tableau avec des données récapitulatives --> <tfoot> <tr style="background: wheat; font-weight: bold;"> <td>Sum</td> <td class="right">$180</td> </tr> </tfoot> <!-- le corps avec les données --> <tbody> <tr> <td>January</td> <td class="right">$100</td> </tr> <tr> <td>February</td> <td class="right">$80</td> </tr> </tbody> </table>
Deux attributs sont également utilisés pour les balises
Voici un exemple avec une table de 4 lignes par 3 colonnes :
fusion de deux colonnes | 2 | |
3 | 4 | 5 |
fusion de deux lignes |
7 | 8 |
9 | 10 |
<table style="border-collapse: collapse;" class="center"> <!-- le corps avec les données --> <tbody> <tr> <td colspan="2"> fusion de deux colonnes </td> <td>2</td> </tr> <tr> <td>3</td> <td>4</td> <td>5</td> </tr> <tr> <td rowspan="2"> fusion de<br />deux lignes </td> <td>7</td> <td>8</td> </tr> <tr> <td>9</td> <td>10</td> </tr> </tbody> <caption>Ma table</caption> </table>
Voici un exemple assez simple d'une commande de produits : table sans mise en forme et le même exemple avec mise en forme.
Les formulaires permettent de saisir des informations qui seront envoyées au serveur pour y être traitées : il peut s'agir de faire un calcul, d'insérer ou d'extraire des informations d'une base de données.
Les formulaires débutent par la balise
Si les données sont envoyées au format
Ce formulaire ressemble sans style CSS à cela.
Voici le même formulaire avec un style (CSS) : formulaire avec style.
Les différents éléments de base qui composent les formulaires sont les suivants :
Nous allons passer en revue ces différents éléments afin de voir comment les utiliser.
Le
Il dispose d'un attribut
<form name="label1" method="post" action=""> <label for="nom">nom (label avec for)</label> <input type="text" name="nom" value="" id="nom"/> <br /> <label>prénom (label sans for)</label> <input type="text" name="prenom" value="" id="prenom"/> <br /> <br /> <label> </label> <input type="submit" value="Submit" onclick="return _label1();" /> </form>
Les champs input permettent de saisir de l'information textuelle en précisant éventuellement un format de saisie.
On doit définir les attibuts suivants pour ce genre de champs :
L'attribut
<form name="input1" method="post" action=""> <label for="login">login</label> <input type="text" name="login" value="" id="login"/> <br /> <label>password</label> <input type="password" name="password" value="" id="password"/> <br /> <label>email</label> <input type="email" name="email" value="" id="email"/> <br /> <label>immatriculation</label> <input type="text" name="immatriculation" value="" id="immatriculation" pattern="[A-Z]{2}-\d{3}-[A-Z]{2}" placeholder="XY-012-ZT" title="Format attendu : AA-123-AA" /> <br /> <br /> <label> </label> <input type="submit" value="Submit" onclick="return _input1();" /> </form>
<form name="input2" method="post" action=""> <label>number</label> <input type="number" name="number_2" value="3" id="number_2"/> <br /> <br /> <label for="range_2">range</label> <input type="range" name="range_2" value="19" id="range_2" min="10" max="31" step="3" oninput="this.nextElementSibling.value = this.value" /> <output>19</output> <br /> <br /> <label>date</label> <input type="date" name="date_2" value="1970-09-30" id="date_2" /> <br /> <label>time</label> <input type="time" name="time_2" value="23:30" /id="time_2" /> <br /> <label for="tel_2">telephone</label> <input type="tel" name="tel_2" value="" id="tel_2" pattern="\d{2}-\d{2}-\d{2}-\d{2}-\d{2}" placeholder="XX-XX-XX-XX-XX" required > <br /> <label>file</label> <input type="file" value="" name="file_2" id="file_2" /> <br /> <label>color</label> <input type="color" value="#80A0F0" name="color_2" id="color_2" /> <br /> <br /> <label> </label> <input type="submit" value="Submit" >   <button onclick="return _input2();">View</button> </form>
Attention : si on définit un
On introduit un sélecteur avec la balise
Pour chaque option on définit un attribut
Par défaut, la première balise
<form name="select_form" method="post" action=""> <label>Département de naissance</label> <select name="departement"> <option value="-1" default> <Veuillez faire un choix> </option> <option value="49">Maine et Loire (Angers)</option> <option value="44">Loire Atlantique (Nantes)</option> <option value="21">Côte d'Or (Dijon)</option> <option value="99">Autre</option> </select> <br /> </form>
Les champs
<form name="radio_button_form" method="post" action=""> <fieldset> <legend>Statut Marital</legend> <label>Statut :</label> <div> <label class="small" for="cel">Célibataire</label> <input type="radio" name="statut" id="cel" value="1" checked> </div> <div> <label class="small" for="mar">Marié</label> <input type="radio" name="statut" id="mar" value="2"> </div> <div> <label class="small" for="div">Divorcé</label> <input type="radio" name="statut" id="div" value="3"> </div> <br /> <div> <label class="small" for="veu"> <input type="radio" name="statut" id="veu" value="4"> Veuf</label> </div> </fieldset> </form>
Les champs
On procède généralement en donnant le même
<form name="checkbox_form" method="post" action=""> <fieldset> <legend>Menu</legend> <input type="checkbox" name="choix[]" id="ham" value="hamburger" checked> Hamburger<br /> <input type="checkbox" name="choix[]" id="fri" value="frites"> Frites<br /> <input type="checkbox" name="choix[]" id="col" value="soda"> Cola Loca<br /> <input type="checkbox" name="choix[]" id="coo" value="cookie"> Cookie<br /> </fieldset> </form>
Si on sélectionne un Hamburger, un Cola et un Cookie, on obtiendra lors d'un traitement ultérieur en PHP, les données suivantes :
Array ( [choix] => Array ( [0] => hamburger [1] => soda [2] => cookie ) )
Un champ
Un champ
< input type="submit" value="Envoyer" />
On peut également utiliser la balise
<button type="submit">Envoyer</button>
Le formulaire doit inclure dans sa définition un attribut
Les formulaires HTML fournissent trois méthodes d'encodage des données (attribut
Pour le téléchargement de fichiers, il est nécessaire de définir :
<form name="upload_file" method="post" action="" enctype="multipart/form-data"> <label for="nom_fichier">Fichier </label> <!-- Limite 100Mo --> <input type="hidden" name="MAX_FILE_SIZE" value="104857600" /> <input type="file" name="nom_fichier" accept=".png, .pdf, .doc" data-max-size="1000000"/> <br /> </form>
Par défaut, les caractères < et > sont réservés en HTML puisqu'ils introduisent des balises.
Pour afficher ces caractères il faut utiliser la syntaque suivante :
< pour less than
et
> pour greater than
Il existe bien d'autres caractères que l'on peut coder sur le même modèle ainsi que les emoticons :
φ Π π « » À Á Â
怀 态 怂 😀 🤪 ♎ ✅ ✖ ❌