Site de Jean-Michel RICHER

Maître de Conférences en Informatique à l'Université d'Angers

Ce site est en cours de reconstruction certains liens peuvent ne pas fonctionner ou certaines images peuvent ne pas s'afficher.


stacks
home  accueil cours counter_1   Réseau counter_2   (X)HTML counter_3   CSS counter_4   CSS Extra counter_4   Travaux pratiques counter_4   Sitographie

3. Développement Web - XHTML

3.1. XML / XHTML

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 :

  • la syntaxe : l'ordre dans lequel apparaissent les mots
  • la sémantique : le sens des mots

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
Afficher le code    ens/l1/devweb1/xml_example.xml
  1. <phrase>
  2.   <sujet>
  3.     <article genre="masculin" nombre="singulier"> le </article>
  4.     <nom type="animal, sauvage, carnivore"> lion </nom>
  5.   </sujet>
  6.   <verbe groupe="premier" personne="troisieme"
  7.     nombre="singulier" racine="manger"
  8.     temps="indicatif-présent"> mange </verbe>
  9.   <complement>
  10.     <article genre="feminin" nombre="singulier"> la </article>
  11.     <nom type="animal, herbivore"> gazelle </nom>
  12.   </complement>
  13. </phrase>
  14.  
  15.  

On retrouve la phrase initiale agrémentée d'informations complémentaires :

  • phrase, sujet, article, ... sont des balises
  • genre, nombre, type, racine, temps sont des attributs
  • le chat mange la souris, représente le contenu

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 :

  • l'introduction d'un canvas qui permet de réaliser des graphiques
  • l'édition de documents directement dans la page web
  • la validation automatique de formulaires
  • le glisser / déposé plus simple
  • la gestion améliorée des supports média : audio, vidéo
  • de nouveaux éléments structurels qui évitent l'utilisation des <div>

Les conventions sont les suivantes :

  • balises et attributs sont écrits en minuscule
  • une balise est toujours fermée : <p> ... </p>, sauf les balises auto-fermantes (cf. plus avant)
  • certaines balises qui ne peuvent être fermées comme break rule, passage à la ligne, s'écrivent <br />
  • les valeurs des attributs sont données entre double quotes attribut="valeur"

3.1.1. DTD

On associe généralement à un fichier XML un fichier DTD (pour Document Type Definition), qui décrit la grammaire du document :

  • liste des éléments (ou balises)
  • liste des attibuts, leur contenu et leur agencement

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 ezxml2code contient une ou plusieurs (+) balises class. En ligne 3, on indique qu'une balise class contient éventuellement (?) une balise import, suivie d'une balise attributes, suivie éventuellement d'une balise methods.

En ligne 5, on déclare l'attibut name associé à la balise class. Cet attribut est de type chaîne de caractère (CDATA) et il est nécessaire de le déclarer (#REQUIRED).


Warning: file_get_contents(xml/ezxml2code.dtd): Failed to open stream: No such file or directory in /home/jeanmichel.richer/public_html/ez_web.php on line 397
Afficher le code    xml/ezxml2code.dtd
  1.  

Warning: file_get_contents(xml/ezxml2code_minimal.xml): Failed to open stream: No such file or directory in /home/jeanmichel.richer/public_html/ez_web.php on line 397
Afficher le code    xml/ezxml2code_minimal.xml
  1.  

3.1.2. extensions de fichiers

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 :

  • .php pour le langage PHP
  • .py pour Python
  • .pl pour Perl
  • .asp Active Server Page, Microsoft
  • .jsp Java Server Pages (J2EE, Oracle)

3.2. Organisation d'une page XHTML

L'organisation (ou la structure) d'une page web est la suivante :

  • préambule qui décrit la grammaire de la page et comment le document devra être interprété par le navigateur

    En fonction de la version HTML / XHTML, on utilisera un préambule différent :

    Afficher le code    ens/l1/devweb1/doctypes.html
    1. HTML 4.01 Loose
    2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    3. "http://www.w3.org/TR/html4/loose.dtd">
    4.  
    5. HTML 4.01 Strict
    6. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
    7. "http://www.w3.org/TR/html4/strict.dtd">
    8.  
    9. HTML 4.01 Frameset
    10. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
    11. "http://www.w3.org/TR/html4/frameset.dtd">
    12.  
    13. XHTML 1 Transitional
    14. <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    15. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    16.  
    17. XHTML 1 Strict
    18. <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    19. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    20.  
    21. XHTML 1 Frameset
    22. <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
    23. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
    24.  
    25. HTML5 / XHTML5
    26. <!DOCTYPE html>
    27.  

    On voit rapidement qu'il est plus facile d'utiliser XHTML 5.

  • l'entête head qui décrit des informations supplémentaires qui ne seront pas affichées :
    • balises meta : description de la page, de l'auteur, mots-clés, encodage des caractères
    • balises link : référence à des feuilles de styles pour la mise en forme
    • balises script : référence à du code Javascript pour dynamiser la page côté client
    • balise title qui permet de définir une chaîne de caractère qui sera affichée dans l'onglet du navigateur qui affiche la page
  • la partie body qui représente ce qui sera effectivement affiché dans le navigateur

3.2.1. Meta et viewport

Il existe pour la balise meta, attribut name de valeur viewport et dont l'attribut content contient une valeur qui permet d'optimiser l'affichage sur portable ou tablette.

On peut par exemple ajouter :


Warning: Undefined variable $file_name in /home/jeanmichel.richer/public_html/ensl1i_devweb1_lib.php on line 32

Warning: Undefined variable $file_name in /home/jeanmichel.richer/public_html/ensl1i_devweb1_lib.php on line 32
Afficher le code
  1. <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é.

3.2.2. une page simple en XHTML 5

Voici un exemple de page :

Afficher le code    ens/l1/devweb1/html5.html
  1. <!DOCTYPE html>
  2. <html dir="ltr" lang="fr-FR">
  3.  
  4. <!-- entete -->
  5.  
  6. <head>
  7.   <meta charset="utf-8">
  8.   <meta name="author" content="Jean-Michel Richer">
  9.   <meta name="keywords" content="Enseignement L1">
  10.   <meta name="description" content="Ma première page sans CSS">
  11.   <title>XHTML 5</title>
  12. </head>
  13.  
  14. <!-- contenu de la page -->
  15.  
  16. <body>
  17.   <main>
  18.     <h2>Ma première page</h2>
  19.  
  20.     <p>Bonjour !</p>
  21.   </main>
  22. </body>
  23.  
  24. </html>
  • le document commence par le préambule (X)HTML 5
  • puis on introduit le document avec la balise html, celle-ci peut comporter plusieurs attributs, ici en l'occurrence on trouve :
    • dir (optionnelle) qui indique la direction d'affichage du texte ltr (= Left To Right)
    • lang qui indique la localisation linguistique : le français de France. On aurait pu utiliser :
      • fr-BE : Français belge
      • fr-CA : Français canadien
      • en-GB : Anglais britannique
      • en-US : Anglais américain
      • ...
  • vient ensuite la partie entête head qui décrit :
    • l'encodage des caractères et le titre de la page
    • l'auteur de la page
    • les mots clés associés à la page (utile pour le référencement)
    • la description de la page (utile pour le référencement)
  • finalement, le contenu body qui contient une balise main qui contient un titre et un paragraphe.
  • on remarque que les commentaires sont déclarés sous la forme <!-- commentaire -->

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 :


Warning: Undefined variable $file_name in /home/jeanmichel.richer/public_html/ensl1i_devweb1_lib.php on line 32

Warning: Undefined variable $file_name in /home/jeanmichel.richer/public_html/ensl1i_devweb1_lib.php on line 32
Afficher le code
  1. <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
  2. <!-- Préférer la méthode ci-dessous -->
  3. <meta charset="utf-8" >

3.3. Eléments structurants de la page

Parmi les balises XHTML qui permettent de décrire le contenu d'une page dans body, on trouve les balises structurantes, c'est-à-dire celles qui permettent d'organiser la page en différentes parties :

Si on suit une organisation classique d'une page, on trouve :

  • header qui permet de créer une zone plus ou moins haute dans laquelle on place le titre de la page, attention il ne faut pas confondre cette balise avec la balise head au début du document XHTML
  • nav qui permet de disposer d'une zone de navigation avec un menu à l'horizontale
  • aside (on peut ne pas l'utiliser) qui permet de positionner un menu vertical sur le côté qui peut correspondre à une table des matières, ou une liste d'ingrédients pour une recette, ...
  • main qui correspond au contenu principal, cette partie sera composée d'article et de section
  • footer qui comme la partie header autorise à disposer d'une zone verticale avec diverses informations (Copyright, adresse de contact, email, téléphone, ...)

Il est à noter que les balises section et article sont interchangeables : une section peut contenir des articles qui peuvent contenir des sections et inversement. La balise main pourra donc contenir plusieurs sections ou articles.

3.3.1. Autre balise structurante

La balise div est également souvent utilisée pour introduire des éléments structurants qui ne correspondraient pas à l'un des éléments précédents.

On donne généralement un attribut identifiant id à ces balises div afin de pouvoir leur appliquer un style ou modifier leur contenu (cf. CSS, Javascript).

3.4. Eléments non structurants de la page

Nous allons à présent nous intéresser aux balises liées au texte, aux listes, aux tableaux.

3.4.1. Eléments liés au texte

Les deux éléments principaux liés au texte sont les titres et les paragraphes :

  • les titres (ou headers, attention là encore, il ne faut pas confondre avec la balise header) sont introduits par la lettre h suivie par un chiffre de 1 à 6 : h1, ..., h6
  • les paragraphes sont introduits par la balise p
Afficher le code    ens/l1/devweb1/html5_example_base_h1a6.html
  1. <!DOCTYPE html>
  2.  
  3. <!-- langue utilisée -->
  4. <html lang="fr">
  5.  
  6. <!-- entete -->
  7.  
  8.   <!-- titre de la page affiché dans un des onglets du navigateur -->
  9.   <title>Balises h1 à h6</title>
  10.  
  11.   <!-- encodage des caractères -->
  12.   <meta charset="utf-8">
  13.  
  14.   <!-- description de la page, optionnel -->
  15.   <meta name="author" content="Jean-Michel Richer">
  16.   <meta name="description" content="Une page web avec balise h1 à h6">
  17.   <meta name="keywords" content="page, web, création">
  18.  
  19. </head>
  20.  
  21. <!-- contenu de la page -->
  22.  
  23.   <h1>Balise h1</h1>
  24.   <h2>Balise h2</h2>
  25.   <h3>Balise h3</h3>
  26.   <h4>Balise h4</h4>
  27.   <h5>Balise h5</h5>
  28.   <h6>Balise h6</h6>
  29.   <p>un paragraphe.</p>
  30. </body>
  31.  
  32. </html>
  33.  
  34.  

D'autres balises à l'intérieur d'un titre ou d'un paragraphe permette de modifier l'apparence de celui-ci :

  • la balise b (bold) permet de mettre le texte en gras
  • la balise i (italic) permet de mettre le texte en italique
  • la balise em (emphasis) permet de mettre le texte en emphase (similaire à l'italique)
  • la balise s permet de barrer un texte
  • la balise u (underline) permet de souligner un texte
  • la balise quote introduit une citation
  • la balise sub (subscript) met le texte en indice
  • la balise sup (super-script) met le texte en exposant
  • la balise span permet de modifier le style du texte (voir CSS)

Il est recommandé de ne plus utiliser certaines de ces balises comme b, u, i, s (et de passer par le CSS) même si elles restes utilisables et bien pratiques.

Voici un exemple qui utilise le style (CSS) défini pour cette page :

Titre h1

Titre h2

Voici un texte en gras, en emphase, souligné.


Warning: Undefined variable $file_name in /home/jeanmichel.richer/public_html/ensl1i_devweb1_lib.php on line 32

Warning: Undefined variable $file_name in /home/jeanmichel.richer/public_html/ensl1i_devweb1_lib.php on line 32
Afficher le code
  1. <h1>Titre h1</h1>
  2. <h2>Titre h2</h2>
  3. <p>Voici un texte <b>en gras</b>, <em>en emphase</em>, <u>souligné</u>. </p>

3.4.2. La balise liées aux hyperliens

3.4.2.a  Naviguer entre pages

Les balises <a>...</a> sont l'élément essentiel des documents (X)HTML car elles permettent la navigation de page en page.

Un lien ou hyperlien est défini par :

  • l'URL (Uniform Resource Locators) ou adresse de la page sur laquelle on désire se rendre introduit par l'attribut href
  • la partie de texte sur laquelle on devra cliquer pour accéder à la page définie entre les balises <a>texte à cliquer</a>

Bonjour, ceci est ma première page web !


Warning: Undefined variable $file_name in /home/jeanmichel.richer/public_html/ensl1i_devweb1_lib.php on line 32

Warning: Undefined variable $file_name in /home/jeanmichel.richer/public_html/ensl1i_devweb1_lib.php on line 32
Afficher le code
  1. <p>Bonjour, ceci est ma première
  2. <a href="http://leria-info.univ-angers.fr/~jeanmichel.richer/">page</a> web !</p>

3.4.2.b  Naviguer vers un endroit de la page

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 :

Je veux aller au second paragraphe de la page info.html

Un second paragraphe


Warning: Undefined variable $file_name in /home/jeanmichel.richer/public_html/ensl1i_devweb1_lib.php on line 32

Warning: Undefined variable $file_name in /home/jeanmichel.richer/public_html/ensl1i_devweb1_lib.php on line 32
Afficher le code
  1. <p>Je veux aller au <a href="#SECOND_PARAGRAPHE">second paragraphe</a>
  2. de la page info.html</p>
  3. <a name="SECOND_PARAGRAPHE"></a>
  4. <p>Un second paragraphe</p>

3.4.2.c  Ouvrir un nouvel onglet

On peut également ouvrir une page dans un nouvel onglet en ajoutant l'attribut target. On recommande d'ajouter rel="noopener noreferrer" pour des raisons de sécurité :

Se rendre sur Yahoo en ouvrant un nouvel onglet.


Warning: Undefined variable $file_name in /home/jeanmichel.richer/public_html/ensl1i_devweb1_lib.php on line 32

Warning: Undefined variable $file_name in /home/jeanmichel.richer/public_html/ensl1i_devweb1_lib.php on line 32
Afficher le code
  1. <p>Se rendre sur <a href="http://yahoo.fr" target="_blank"
  2.   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.


Warning: Undefined variable $file_name in /home/jeanmichel.richer/public_html/ensl1i_devweb1_lib.php on line 32

Warning: Undefined variable $file_name in /home/jeanmichel.richer/public_html/ensl1i_devweb1_lib.php on line 32
Afficher le code
  1. <p>Ouvrir une nouvelle fenêtre vers <a href="http://yahoo.fr" target="_parent"
  2.    onclick="window.open('http://yahoo.fr', name='_blank',
  3.    'width=600, height=400, toolbar=yes, resizable=no'); return false;">Yahoo</a>.</p>

3.4.3. Les images

Il existe une seule balise auto fermante appelée <img> pour insérer des images. Elle dispose de plusieurs attributs comme :

  • src (obligatoire) qui donne l'URL de l'image
  • alt, que l'on conseille de remplir, et qui donne une description sous forme d'un texte de l'image; elle remplacera l'image si celle-ci n'est pas trouvée
  • width, la largeur de l'image (facultatif), exprimée en pixels; on ne donne que la largeur sans préciser l'unité
  • height, la hauteur de l'image (facultatif), exprimée en pixels; on ne donne que la hauteur sans préciser l'unité

structure des répertoires sous Linux


Warning: Undefined variable $file_name in /home/jeanmichel.richer/public_html/ensl1i_devweb1_lib.php on line 32

Warning: Undefined variable $file_name in /home/jeanmichel.richer/public_html/ensl1i_devweb1_lib.php on line 32
Afficher le code
  1. <p class="center">
  2.   <img  
  3.         src="ens/l1/linux1/bi2_part_2.png"
  4.        alt="structure des répertoires sous Linux"
  5.        width="400" height="300" />
  6. </p>

Deux nouvelles balises ont été introduites afin de gérer les images :

3.4.4. Eléments liés aux listes

Il existe trois types de listes :

  • les listes non numérotées introduites par ul (unordered list)
  • les listes numérotées ol (ordered list)
  • les listes de définitions ou de descriptions dl (description list) pour lesquelles on associe un texte explicatif à un terme ou une expression

Pour les listes ul et ol, la balise li (list item) permet de définir un élément de la liste.

Pour les listes dl on utilise deux autres balises :

  • dt (data term) définit un terme qui sera mis en gras
  • dd (data definition) correspond au texte associé à ce terme

L'exemple qui suit montre comment utiliser ces listes :

Liste non numérotée
  • premier élément
  • second élément
Liste numérotée
  1. premier élément
  2. second élément
Liste de descriptions
Nos Cafés
Cappuccino
Latté
Latté Machiatto
Nos Thés
English Breakfast
Chaï
Combinaison de listes
Nos Cafés
Capuccino
  • classique
  • lait d'amande
  • lait de coco
Latté
Latté Machiatto
Nos Thés
English Breakfast
  1. Darjeeling
  2. Russian
Chaï

Warning: Undefined variable $file_name in /home/jeanmichel.richer/public_html/ensl1i_devweb1_lib.php on line 32

Warning: Undefined variable $file_name in /home/jeanmichel.richer/public_html/ensl1i_devweb1_lib.php on line 32
Afficher le code
  1.   <!-- liste non numérotée --> 
  2.   <h5>Liste non numérotée</h5>
  3.  
  4.   <ul>
  5.     <li>premier élément</li>
  6.     <li>second élément</li>
  7.   </ul>
  8.  
  9.   <!-- liste numérotée -->
  10.   <h5>Liste numérotée</h5>
  11.  
  12.   <ol>
  13.     <li>premier élément</li>
  14.     <li>second élément</li>
  15.   </ol>
  16.  
  17.   <!-- liste de descriptions -->
  18.   <h5>Liste de descriptions</h5>
  19.  
  20.   <dl>
  21.     <dt>Nos Cafés</dt>
  22.       <dd>Cappuccino</dd>
  23.       <dd>Latté</dd>
  24.       <dd>Latté Machiatto</dd>
  25.     <dt>Nos Thés</dt>
  26.       <dd>English Breakfast</dd>
  27.       <dd>Chaï</dd> 
  28.   </dl>
  29.  
  30.   <!-- Combinaison de listes -->
  31.   <h5>Combinaison de listes</h5>
  32.  
  33.   <dl>
  34.     <dt>Nos Cafés</dt>
  35.       <dd> Capuccino
  36.         <ul>
  37.           <li>classique</li>
  38.           <li>lait d'amande</li>
  39.           <li>lait de coco</li>
  40.         </ul>  
  41.       </dd>
  42.       <dd>Latté</dd>
  43.       <dd>Latté Machiatto</dd>
  44.     <dt>Nos Thés</dt>
  45.       <dd>English Breakfast
  46.         <ol>
  47.           <li>Darjeeling</li>
  48.           <li>Russian</li>
  49.         </ol>
  50.       </dd>
  51.       <dd>Chaï</dd> 
  52.   </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.

3.4.4.a  listes non numérotées

On utilise la propriété list-style-type qui peut prendre les valeurs suivantes :

  • none : rien n'est affiché avant le texte
  • square : un carré précède le texte
  • circle : un cercle précède le texte, c'est le style par défaut

Remarque : ces valeurs peuvent aussi s'appliquer à des listes numérotées.

3.4.4.b  listes numérotées

On modifie le type de numérotation en utilisant la même propriété mais en utilisant les valeurs :

  • decimal : 1, 2, 3
  • lower-alpha : a, b, c
  • upper-alpha : A, B, C
  • lower-roman : i, ii, iii, iv
  • upper-roman : I, II, III, IV

3.4.4.c  listes avec image

Il est possible de remplacer les cercles ou carrés par une image en définissant la propriété list-style-image. Cependant le texte ne sera pas centré verticalement par rapport à l'image. Il est donc préférable de suivre ce qui est fait dans l'exemple suivant.

3.4.5. Eléments liés aux tableaux

les tableaux sont introduits par la balise table (voir la documentation W3C Tables Module).

De nouvelles balises ont été introduites en XHTML afin de pouvoir afiner les styles des tableaux :

  • thead concerne les titres des colonnes
  • tfoot concerne les dernières lignes du tableau, normalement cette balise doit être introduite avant tbody
  • tbody englobe les lignes de données de la table
  • caption converne la légende de la table
  • summary est un texte qui peut être utilisé pour décrire la table et peut également être utilisé par un système de synthèse vocale pour aider les non voyants

Les balises classiques sont les suivantes :

  • tr (table row) définit une ligne
  • th (table header) définit une cellule qui contient le titre d'une colonne
  • td (table data) définit une cellule de données
Ma première table
Month Savings
Sum $180
January $100
February $80

Warning: Undefined variable $file_name in /home/jeanmichel.richer/public_html/ensl1i_devweb1_lib.php on line 32

Warning: Undefined variable $file_name in /home/jeanmichel.richer/public_html/ensl1i_devweb1_lib.php on line 32
Afficher le code
  1. <table style="border-collapse: collapse;" width="350" class="center">
  2.  
  3.   <caption>Ma première table</caption>
  4.  
  5.   <!-- l'entête avec les titres des colonnes -->
  6.   <thead>
  7.     <tr>
  8.           <th>Month</th>
  9.           <th>Savings</th>
  10.     </tr>
  11.   </thead>
  12.  
  13.   <!-- éventuellement le bas de tableau avec des données récapitulatives -->
  14.   <tfoot>
  15.     <tr style="background: wheat; font-weight: bold;">
  16.       <td>Sum</td>
  17.       <td class="right">$180</td>
  18.     </tr>
  19.   </tfoot>
  20.  
  21.   <!-- le corps avec les données -->
  22.   <tbody>
  23.     <tr>
  24.         <td>January</td>
  25.         <td class="right">$100</td>
  26.     </tr>
  27.     <tr>
  28.         <td>February</td>
  29.         <td class="right">$80</td>
  30.     </tr>
  31.   </tbody>
  32.  
  33.  

Deux attributs sont également utilisés pour les balises td :

  • colspan qui définit le nombre de cellules que l'on désire agglutiner
  • rowspan qui définit le nombre de lignes que l'on désire agglutiner

Voici un exemple avec une table de 4 lignes par 3 colonnes :

  • on fusionne les deux premières colonnes de la première ligne
  • ainsi que les deux dernières lignes sur la première colonne
fusion de deux colonnes 2
3 4 5
fusion de
deux lignes
7 8
9 10
Ma table

Warning: Undefined variable $file_name in /home/jeanmichel.richer/public_html/ensl1i_devweb1_lib.php on line 32

Warning: Undefined variable $file_name in /home/jeanmichel.richer/public_html/ensl1i_devweb1_lib.php on line 32
Afficher le code
  1. <table style="border-collapse: collapse;" class="center">
  2.  
  3.   <!-- le corps avec les données -->
  4.   <tbody>
  5.     <tr>
  6.         <td colspan="2"> fusion de deux colonnes </td>
  7.         <td>2</td>
  8.     </tr>
  9.     <tr>
  10.         <td>3</td>
  11.         <td>4</td>
  12.         <td>5</td>
  13.     </tr>
  14.     <tr>
  15.       <td rowspan="2"> fusion de<br />deux lignes </td>
  16.       <td>7</td>
  17.       <td>8</td>
  18.     </tr>
  19.     <tr>
  20.       <td>9</td>
  21.       <td>10</td>
  22.     </tr>
  23.      
  24.   </tbody>
  25.  
  26.   <caption>Ma table</caption>

Voici un exemple assez simple d'une commande de produits : table sans mise en forme et le même exemple avec mise en forme.

3.5. Les formulaires

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.

3.5.1. La balise form

Les formulaires débutent par la balise <form>...</form>, cette balise contient trois attributs :

  • name qui définit le nom du formulaire, mais qui est optionnel
  • method qui définit la manière dont seront envoyées les données : post ou get
  • action qui est l'URL ou envoyer les données

Si les données sont envoyées au format get, elles seront ajoutées à l'URL fournie dans l'attribut action.

Afficher le code    ens/l1/devweb1/html5_example_form_sans_style.html
  1. <!DOCTYPE html>
  2.  
  3. <!-- langue utilisée -->
  4. <html lang="fr">
  5.  
  6. <!-- entete -->
  7.  
  8.   <!-- titre de la page affiché dans un des onglets du navigateur -->
  9.   <title>Un formulaire simple</title>
  10.  
  11.   <!-- encodage des caractères -->
  12.   <meta charset="utf-8">
  13.  
  14.   <!-- description de la page -->
  15.   <meta name="description" content="Mon premier formulaire">
  16.  
  17.    
  18. </head>
  19.  
  20. <!-- contenu de la page -->
  21.  
  22.   <!-- balise d'entête -->
  23.   <h1>Informations personnelles</h1>
  24.  
  25.   <form action="" method="post" name="mon_formulaire">
  26.  
  27.   <label>Nom :</label>
  28.   <input type="text" name="nom" /><br />
  29.   <label>Prénom :</label>
  30.   <input type="text" name="prenom" /><br />
  31.   <label>Année de naissance :</label>
  32.   <input type="text" name="annee" /><br />
  33.   <br />
  34.   <label>&nbsp; </label>
  35.   <input type="submit" value="Soumettre" onclick="return false;"/><br />
  36.   </form>
  37.  
  38. </body>
  39.  
  40. </html>
  41.  
  42.  

Ce formulaire ressemble sans style CSS à cela.

Voici le même formulaire avec un style (CSS) : formulaire avec style.

3.5.2. Les éléments de base

Les différents éléments de base qui composent les formulaires sont les suivants :

  • les champs de saisie de texte comme les input (sur une ligne) ou les textarea sur plusieurs lignes
  • les boutons (button) ou les champs input de type submit ou reset
  • les boites ou listes déroulantes (combo box) appelées select
  • les cases à cocher :
    • à choix exclusif (input) de type radio button
    • ou multiples de type checkbox

Nous allons passer en revue ces différents éléments afin de voir comment les utiliser.

3.5.3. Les labels

Le label permet de définir du texte associé à un élément de saisie d'information.

Il dispose d'un attribut for qui spécifie à quel élément le label est associé au travers d'un id ce qui autorise le focus sur l'élément de saisie en cliquant sur le label : "nom (label avec for)".




  jsfiddle


Warning: Undefined variable $file_name in /home/jeanmichel.richer/public_html/ensl1i_devweb1_lib.php on line 32

Warning: Undefined variable $file_name in /home/jeanmichel.richer/public_html/ensl1i_devweb1_lib.php on line 32
Afficher le code
  1. <form name="label1" method="post" action="">
  2.  
  3.   <label for="nom">nom (label avec for)</label>
  4.   <input type="text" name="nom" value="" id="nom"/>
  5.   <br />
  6.  
  7.   <label>prénom (label sans for)</label>
  8.   <input type="text" name="prenom" value="" id="prenom"/>
  9.   <br />
  10.  
  11.   <br />
  12.  
  13.   <label> &nbsp; </label>
  14.   <input type="submit" value="Submit" onclick="return _label1();" />
  15.  
  16. </form>

3.5.4. Les champs input

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 :

  • name qui correspond au nom du champ qui sera réutilisé par le serveur pour extraire l'information soumise
  • value la valeur initiale du champ, ce champ est bien entendu optionnel
  • type qui correspond au type de champ

L'attribut type peut prendre plusieurs valeurs :

  • text : qui signifie qu'on saisit du texte
  • password : qui cache le texte saisi et donc lié à la saisie des mots de passe
  • reset : pour une remise à zéro des champs
  • submit : qui est équivalent à un bouton sur lequel on clique afin d'envoyer les informations du formulaire à un serveur
  • file et image pour télécharger (upload) des fichiers
  • checkbox ou radio : pour créer des case à cocher (voir ci-après)
  • avec HTML5 ont été rajoutés : date, email, url, tel, number, ...






Warning: Undefined variable $file_name in /home/jeanmichel.richer/public_html/ensl1i_devweb1_lib.php on line 32

Warning: Undefined variable $file_name in /home/jeanmichel.richer/public_html/ensl1i_devweb1_lib.php on line 32
Afficher le code
  1. <form name="input1" method="post" action="">
  2.  
  3.   <label for="login">login</label>
  4.   <input type="text" name="login" value=""  id="login"/>
  5.   <br />
  6.  
  7.   <label>password</label>
  8.   <input type="password" name="password" value="" id="password"/>
  9.   <br />
  10.  
  11.   <label>email</label>
  12.   <input type="email" name="email" value="" id="email"/>
  13.   <br />
  14.  
  15.   <label>immatriculation</label>
  16.   <input type="text" name="immatriculation" value="" id="immatriculation"
  17.     pattern="[A-Z]{2}-\d{3}-[A-Z]{2}"  
  18.        placeholder="XY-012-ZT"
  19.        title="Format attendu : AA-123-AA"
  20.    />
  21.   <br />
  22.  
  23.   <br />
  24.  
  25.   <label> &nbsp; </label>
  26.   <input type="submit" value="Submit" onclick="return _input1();" />
  27.  
  28. </form>


19







  

Warning: Undefined variable $file_name in /home/jeanmichel.richer/public_html/ensl1i_devweb1_lib.php on line 32

Warning: Undefined variable $file_name in /home/jeanmichel.richer/public_html/ensl1i_devweb1_lib.php on line 32
Afficher le code
  1. <form name="input2" method="post" action="">
  2.  
  3.   <label>number</label>
  4.   <input type="number" name="number_2" value="3" id="number_2"/>
  5.   <br />
  6.  
  7.   <br />
  8.   <label for="range_2">range</label>
  9.    <input type="range" name="range_2" value="19" id="range_2"
  10.     min="10" max="31" step="3"
  11.     oninput="this.nextElementSibling.value = this.value" />
  12.     <output>19</output>
  13.   <br />
  14.   <br />
  15.  
  16.   <label>date</label>
  17.   <input type="date" name="date_2" value="1970-09-30" id="date_2" />
  18.   <br />
  19.  
  20.   <label>time</label>
  21.   <input type="time" name="time_2" value="23:30" /id="time_2" />
  22.   <br />
  23.  
  24.   <label for="tel_2">telephone</label>
  25.   <input type="tel"
  26.        name="tel_2"
  27.        value=""
  28.     id="tel_2"
  29.        pattern="\d{2}-\d{2}-\d{2}-\d{2}-\d{2}"
  30.     placeholder="XX-XX-XX-XX-XX"
  31.        required >
  32.   <br />
  33.  
  34.   <label>file</label>
  35.   <input type="file" value="" name="file_2" id="file_2" />
  36.   <br />
  37.  
  38.   <label>color</label>
  39.   <input type="color" value="#80A0F0" name="color_2" id="color_2" />
  40.   <br />
  41.  
  42.  
  43.   <br />
  44.  
  45.   <label> &nbsp; </label>
  46.   <input type="submit" value="Submit" >
  47.     &nbsp&nbsp;
  48.     <button onclick="return _input2();">View</button>
  49.  
  50. </form>

Attention : si on définit un onclick pour le bouton Submit, la validation du téléphone ne fonctionnera pas.

3.5.5. Les combobox ou sélecteurs

On introduit un sélecteur avec la balise select, puis à l'intérieur de cette balise, on ajoute des balises option qui correspondent à chacun des choix possibles.

Pour chaque option on définit un attribut value qui permettra d'identifier l'option choisie.

Par défaut, la première balise option est affichée, mais on peut choisir une option par défaut autre que la première en ajoutant l'attribut (sans valeur) default.



Warning: Undefined variable $file_name in /home/jeanmichel.richer/public_html/ensl1i_devweb1_lib.php on line 32

Warning: Undefined variable $file_name in /home/jeanmichel.richer/public_html/ensl1i_devweb1_lib.php on line 32
Afficher le code
  1. <form name="select_form" method="post" action="">
  2.    
  3.   <label>Département de naissance</label>
  4.    
  5.     <select name="departement">
  6.         <option value="-1" default> &lt;Veuillez faire un choix&gt; </option>
  7.         <option value="49">Maine et Loire (Angers)</option>
  8.         <option value="44">Loire Atlantique (Nantes)</option>
  9.         <option value="21">Côte d'Or (Dijon)</option>
  10.         <option value="99">Autre</option>
  11.     </select>
  12.  
  13.   <br />
  14.  
  15. </form>

3.5.6. Les boutons radio

Les champs input de type radio permettent de choisir un élément parmi plusieurs de manière exclusive.

Statut Marital

Warning: Undefined variable $file_name in /home/jeanmichel.richer/public_html/ensl1i_devweb1_lib.php on line 32

Warning: Undefined variable $file_name in /home/jeanmichel.richer/public_html/ensl1i_devweb1_lib.php on line 32
Afficher le code
  1. <form name="radio_button_form" method="post" action="">
  2.    
  3.     <fieldset>
  4.         <legend>Statut Marital</legend>
  5.  
  6.     <label style="margin-left:-40px;">Statut :</label>
  7.    
  8.     <div style="display: flex; flex-direction: row; gap: 15px; margin-top: 10px;">
  9.    
  10.         <label class="small" for="cel" style="display: inline-flex; align-items: center; gap: 5px; cursor: pointer;">
  11.             <input type="radio" name="statut" id="cel" value="1" checked style="margin: 0;">
  12.             Célibataire
  13.         </label>
  14.        
  15.         <label class="small" for="mar" style="display: inline-flex; align-items: center; gap: 5px; cursor: pointer;">
  16.             <input type="radio" name="statut" id="mar" value="2" style="margin: 0;">
  17.             Marié
  18.         </label>
  19.        
  20.         <label class="small" for="div" style="display: inline-flex; align-items: center; gap: 5px; cursor: pointer;">
  21.             <input type="radio" name="statut" id="div" value="3" style="margin: 0;">
  22.             Divorcé
  23.         </label>
  24.        
  25.         <label class="small" for="veu" style="display: inline-flex; align-items: center; gap: 5px; cursor: pointer;">
  26.             <input type="radio" name="statut" id="veu" value="4" style="margin: 0;">
  27.             Veuf
  28.         </label>
  29.     </div>
  30.    
  31.     </fieldset>
  32. </form>

3.5.7. Les checkbox

Les champs input de type checkbox permettent de cocher plusieurs éléments.

On procède généralement en donnant le même name pour chaque élément de choix mais en indiquant qu'il s'agit d'un tableau (cf. code ci-dessous).

Menu Hamburger
Frites
Cola Loca
Cookie

Warning: Undefined variable $file_name in /home/jeanmichel.richer/public_html/ensl1i_devweb1_lib.php on line 32

Warning: Undefined variable $file_name in /home/jeanmichel.richer/public_html/ensl1i_devweb1_lib.php on line 32
Afficher le code
  1. <form name="checkbox_form" method="post" action="">
  2.    
  3.     <fieldset>
  4.         <legend>Menu</legend>
  5.  
  6.      
  7.     <input type="checkbox" name="choix[]" id="ham" value="hamburger" checked>
  8.     Hamburger<br />
  9.        
  10.     <input type="checkbox" name="choix[]" id="fri" value="frites">
  11.     Frites<br />
  12.      
  13.     <input type="checkbox" name="choix[]" id="col" value="soda">
  14.     Cola Loca<br />
  15.  
  16.     <input type="checkbox" name="choix[]" id="coo" value="cookie">
  17.     Cookie<br />
  18.    
  19.    
  20.     </fieldset>
  21. </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 ) )

3.5.8. Champ input de type reset

Un champ input de type reset réinitialise les différents champs d'un formulaire.

3.5.9. Champ input de type submit

Un champ input de type submit envoie les données du formulaire à l'URL spécifiée dans l'attribut action de la balise form :

 < input type="submit" value="Envoyer" />

On peut également utiliser la balise button mais de type submit, comme suit :

 <button type="submit">Envoyer</button> 

3.5.10. Champs input de type file

Le formulaire doit inclure dans sa définition un attribut enctype de valeur multipart/form-data.

Les formulaires HTML fournissent trois méthodes d'encodage des données (attribut enctype de la balise form) qui seront transmises :

  • application/x-www-form-urlencoded, méthode par défaut, encodage similaire à la méthode get
  • multipart/form-data, méthode plus complexe qui permet d'inclure des fichiers
  • text/plain, défini par HTML5 réservé au débogage, à ne pas utiliser de manière générale

Pour le téléchargement de fichiers, il est nécessaire de définir :

  • le type d'extensions acceptées : accept
  • la taille maximale en octets du fichier que l'on peut transférer grâce à un champ de type de valeur hidden dont le nom est MAX_FILE_SIZE; ce champ doit être placé avant le champ dédié au fichier


Warning: Undefined variable $file_name in /home/jeanmichel.richer/public_html/ensl1i_devweb1_lib.php on line 32

Warning: Undefined variable $file_name in /home/jeanmichel.richer/public_html/ensl1i_devweb1_lib.php on line 32
Afficher le code
  1. <form name="upload_file" method="post" action=""
  2.    enctype="multipart/form-data">
  3.  
  4.     <label for="nom_fichier">Fichier </label>
  5.    
  6.     <!-- Limite 100Mo -->
  7.     <input type="hidden" name="MAX_FILE_SIZE" value="104857600" />
  8.  
  9.     <input type="file" name="nom_fichier"
  10.        accept=".png, .pdf, .doc"
  11.        data-max-size="1000000"/>
  12.     <br />
  13.  
  14. </form>

3.5.11. Caractères spéciaux

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 syntaxe suivante :

&lt; pour less than
et 
&gt; 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 :

φ Π π « » À Á Â &

 &phi; &Pi; &pi; &laquo; &raquo; &Agrave; &Aacute; &Acirc; &amp;

怀 态 怂

😀 🤪

♎ ✅ ✖ ❌

&#x6000; &#x6001; &#x6002; 
&#x1F600; &#x1F92A; 
&#x264E; &#x2705; &#x2716; &#x274C;

Vous pouvez utiliser ce site afin de rechercher des caractères.