Programmation Web

Programmation Web

Table des matières

Web

  1. Introduction au Web
    1. Les composants du Web
    2. Le fonctionnement du Web

HTML

  1. HTML
    1. Les versions du langage HTML
    2. Les éléments HTML
      1. Anatomie d’un élément HTML
      2. Imbriquer des éléments
      3. Les balises orphelines
      4. Les attributs
    3. Le document HTML
    4. Les balises principales
      1. Baliser le texte
        1. Les titres
        2. Les paragraphes
        3. Les listes
        4. Listes de descriptions
      2. Les images
      3. Les liens
      4. Les balises textes en ligne (inline)
        1. Mise en forme de texte
        2. Importance Logique
        3. Abréviation et Citation
        4. Insertion du code
      5. Les balises universelles
    5. Balises structurantes
      1. Structure d’une page Web d’un article
      2. Application
  1. Tableaux
    1. Les balises de Tableau
    2. Structure Tableau Avancée
    3. Remarques
  1. Formulaire
    1. Création d’un formulaire
    2. Éléments d’un formulaire
      1. Champ de texte simple
      2. Mot de passe
      3. Nombre
      4. Zone de texte
      5. Étiquette / label
      6. Case à cocher
      7. Groupe radio
      8. Bouton d’envoi
      9. Bouton de réinitialisation
      10. Liste à choix multiple
      11. Fichier
      12. Dates / Temps
      13. Couleur
      14. Zone de recherche
      15. Champ email
      16. Champ URL
      17. Champ Téléphone
    3. Les attributs du formulaire
      1. name
      2. type
      3. value
      4. autocomplete
      5. autofocus
      6. placeholder
      7. max, min, step
      8. maxlength, minlength
      9. checked, selected
      10. required
      11. pattern
      12. disabled, readonly
    4. Application
      1. Premier formulaire
      2. Deuxième formulaire
    5. Remarque
  1. Multimédia et Intégration
    1. Les Vidéos
    2. Les audios
    3. Les images vectorielles
    4. Intégration de contenu externe
      1. Intégration des pages Web
      2. Intégrer des autres ressources
    5. Remarque
  1. Complément HTML5
    1. Vérificateur lexico-graphique, syntaxique et sémantique

CSS

  1. Introduction CSS
    1. Les versions du langage CSS
    2. Principes de base
    3. Les sélecteurs CSS
      1. Sélecteurs de base
      2. Sélecteurs imbriqués
    4. Les unités CSS
      1. Unités relatives
      2. Les pixels
    5. Les couleurs CSS
      1. Par leur nom
      2. Code héxadécimal
      3. Rouge, Vert, Bleu
      4. RGBA
      5. Teinte, saturation, luminosité (HSL)
      6. HSLA
      7. Définir la couleur du texte
      8. Définir la couleur de fond
  1. Style de texte
    1. Taille de texte
    2. Polices
    3. Epaisseur du texte
    4. Style de l’écriture: de la fonte
    5. Alignement du texte
    6. Majuscule
    7. Décoration
    8. Indentation
    9. Espacement
  1. Style des boites "boxe"
    1. Le modèle de boîte
    2. Les types de boîte
    3. Bordure
    4. Couleur et image de fond
  1. Mise en forme des tableaux
    1. Bordure du tableau
    2. Couleur des cellules
    3. Mise en Forme de d’en-tête et du pied
    4. Les légendes “captions”
  1. Mise en forme des formulaires
    1. Mise en forme de fieldset
    2. Mise en page du formulaire
    3. Bouton d’envoi
    4. Validation de contenu
  1. CSS Avancé
    1. Effets Graphiques
    2. Effets de transition
    3. Effets d’animation

Référencement

  1. Référencement
    1. Terminologie
    2. Importance du référencement Web
    3. Les techniques de référencement naturelles
      1. Le contenu de la page Web
      2. Le titre de la page
      3. L’URL de la page
      4. Le corps de la page
      5. Les balises
        1. Les différents types de balises méta
        2. Exemples de balises méta name
        3. copyright
        4. description
        5. generator
        6. keywords
        7. robots
      6. Liens hypertextes
      7. L’Attribut alt de l’image
    4. Le fichier robots.txt
      1. Présentation de robots.txt
      2. Structure du fichier robots.txt
      3. sitemap.xml et robots.txt
    5. Les logiciels de mesure d’audience
      1. Google Analytics
      2. Matomo (Piwik)

Annexe

  1. Bibliographie
    1. Sites en ligne
    2. Livres
    3. Outils de développement
  1. À Propos

Web

Introduction au Web

Le Web est un système permettant d’accéder à un ensemble de documents hypertextes en utilisant principalement un navigateur. Le Web était développé par Tim Berners-Lee au CERN (Suisse) en 1990.

Internet : Un système de communication qui permet aux ordinateurs autour du monde de communiquer et de s’échanger des informations entre eux.

Le Web ou World Wide Web (toile d’araignée mondiale) ou le WWW : est un système hypertexte public fonctionnant sur Internet et qui permet de consulter, avec un navigateur, des pages mises en ligne dans des sites.

Hypertexte : Ensemble de textes et d’autres documents qui peuvent être consultés à partir d’un système d’envoi hiérarchisé.

Les composants du Web

Un document hypertexte est principalement un document texte écrit en HTML/CSS/JavaScript contenant des unités d’information liées entre elles par des hyperliens. Mais, le type du document peut être aussi texte, audio, image, vidéo ou binaire.

Les documents en Web sont regroupés en ensembles de sites Web identifiés par des noms de domaines. Pour accéder à un document dans un site Web, on saisit l’URL (Unified Ressource Link), le nom du domaine du site et le chemin du document dans la barre d’adresse du navigateur. Exemples de sites Web :

Pour l’échange de ces documents, le Web utilise le protocole HTTP (HyperText Transfer Protocol) qui permet la communication entre le client (navigateur) et le serveur. On peut nommer comme navigateurs principaux dans le marché :

L’évolution des navigateurs entre 1993 et 2016
L'évolution des navigateurs entre 1993 et 2016. Par cours-web.ch

Le fonctionnement du Web

Le Web fonctionne suivant l’architecture Client/Serveur où les ordinateurs connectés sont des clients et des serveurs.

De plus le Web se compose d’autres concepts réseaux qui se trouvent entre le client et le serveur pour assurer son fonctionnement :

HTML

HTML

Le HTML (HyperText Markup Language) n’est pas un langage de programmation, mais un langage de “marquage” (markup en anglais) ou bien de “balises” (tags en anglais). Il permet de structurer le contenu d’une page Web selon un format déterminé par le concepteur et réalisé par le programmeur Web.

Les versions du langage HTML

Durant ses années d’existence, le standard HTML a connu diverses évolutions. La première version proposée en 1991 comportait 18 éléments. Différentes versions du standard HTML sont publiées, jusqu’à la version HTML 4.01 en 1999.

S’en suit une période de stagnation, durant laquelle le groupe de travail HTML du W3C (World Wide Web Consortium) focalise ses efforts sur un nouveau langage, le XHTML, qui s’avère une impasse.

En 2004, un groupe de travail concurrent se forme, nommé WHATWG (Web Hypertext Application Technology Working Group), rassemblant des représentants de Apple, Mozilla et Opera. Ce groupe élaborait le standard HTML5 entre 2004-2007. En janvier 2008, la première spécification a été publiée. Cette spécification a été adoptée comme référence par le groupe de travail HTML du W3C. Ce n’est qu’en 2014 que le HTML5 est devenu une recommandation stable du W3C. En fin 2017, le W3C a rendu officielle la version HTML 5.2. La version suivante HTML 5.3 est en cours d’élaboration.

L’évolution des standards HTML et CSS entre 1995 et 2015
L'évolution des standards HTML et CSS entre 1995 et 2015. Par cours-web.ch

Les éléments HTML

Le vocabulaire du langage HTML se compose de plus qu’une centaine de balises qu’on assemble autour des différentes parties du contenu pour lui fournir un sens. Les balises qui entourent un mot ou le nom d’une image peuvent former un lien hypertexte, mettre le texte en italique, etc. Par exemple, avec la ligne de contenu suivante :

J'aime le Web

Si vous souhaitez indiquer que ce texte fait partie d’un paragraphe, on le placera dans un élément de paragraphe (<p>) :

<p>J'aime le Web</p>

Si on veut qu’il soit un titre, on le met dans la balise <h1>.

<h1>J'aime le Web</h1>

Anatomie d’un élément HTML

Regardons de plus près cet élément paragraphe <p> :

Anatomie d'un élément HTML
Anatomie d'un élément HTML. Par Mozilla Developer Network

Les composants principaux de notre élément sont :

Imbriquer des éléments

Vous pouvez placer des éléments au sein d’autres éléments, c’est ce qu’on appelle l’imbrication. Par exemple, si vous souhaitez montrer que vous aimez beaucoup le web, vous pouvez placer le mot « beaucoup » dans un élément <strong>, ce qui signifie que le mot sera mis en gras :

<p>J'aime <strong>beaucoup</strong> le Web</p>

Ce qui résulte en :

Toutefois il faut faire attention à ce que les éléments soient bien imbriqués les uns dans les autres. Dans l’exemple précédent, on ouvre l’élément <p>, puis l’élément <strong>. Plus loin, on ferme l’élément <strong> puis on ferme l’élément <p>. Si on utilise le code suivant, ce sera incorrect :

<p>J'aime <strong>beaucoup le Web</p></strong>

Même que les navigateurs implémentent différents algorithmes pour essayer de fixer ces erreurs dans les documents HTML avant d’afficher le résultat, il faut vérifier la structure du document parce que ces algorithmes ont des limites et peuvent donner des résultats différents et inutilisables.

Les balises orphelines

Ce sont des balises qui ont uniquement un indicateur de début. Comme la balise :

<img .../>

Les attributs

Les éléments peuvent avoir des “attributs”.

Les attributs d'une balise HTML
Les attributs d'une balise HTML

Les attributs contiennent des informations supplémentaires qui portent sur l’élément et qu’on ne souhaite pas afficher avec le contenu.

Exemples :

Les attributs seront très utiles dans les chapitres suivants par exemple pour définir le comportement de nos formulaires et pour les mises en forme de page Web.

Un attribut doit toujours avoir :

L’attribut a alors la syntaxe suivante : nom = "valeur"

Remarque : Les guillemets peuvent être omises dans HTML5.

Les attributs booléens ne nécessitent pas une valeur, un exemple d’un attribut booléen est l’attribut checked (coché) de l’élément case à cocher pour spécifier que la case est cochée, cet attribut ne nécessite pas une valeur car sa présence est interprétée comme la valeur vrai. Au contraire son absence est interprété comme la valeur faux.

Les commentaires dans HTML sont délimités par <!-- et -->. Par exemple :

<!-- Un texte dans un commentaire -->

Les commentaires peuvent exister dans n’importe quelle partie du code HTML mais pas dans une balise (entre les chevrons de la balise). Prenons l’exemple :

Un texte
<!-- Un commentaire 
multi-ligne -->
à
<!-- un autre commentaire -->afficher
<p>une autre
  <!-- commentaire -->texte</p>

Le résultat sera :

Le document HTML

Pour l’instant nous avons vu quelques éléments HTML de base. Pris séparément, ils ne sont pas très utiles. Regardons comment les combiner pour créer une page HTML complète. Nous allons repartir de l’exemple contenu dans le fichier index.html :

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>Ma première page Web</title>
  </head>
  <body>
    <p>J'aime <strong>beaucoup</strong> le Web.</p>
  </body>
</html>

Cet exemple contient :

<!DOCTYPE html>
le doctype. Au début de HTML, dans les années 1991-1992, les doctypes étaient utilisés pour faire référence à des ensembles de règles qu’on pouvait utiliser pour dire qu’un document était du HTML « valide » et détecter les erreurs de balisage. Cependant, ceux-ci ne sont plus utilisés aujourd’hui et sont juste présents pour s’assurer que la page puisse fonctionner y compris sur les anciens navigateurs.
<html></html>
l’élément <html>. Cet élément encadre tout le contenu de la page. Cet élément est parfois appelé l’élément racine.
<head></head>
l’élément <head>. Cet élément est utilisé comme un conteneur (container) pour toutes les choses qui font partie de la page HTML mais qui ne sont pas du contenu affiché. C’est dans cet élément qu’on mettra des mots-clés, une description de la page qui apparaîtra sur les moteurs de recherche, les liens vers les fichiers CSS à utiliser pour la mise en forme, les déclarations des jeux de caractères (character sets) à utiliser et ainsi de suite.
<body></body>
l’élément <body>. Cet élément est celui qui contient tout le contenu que vous souhaitez afficher pour qu’il soit vu par les visiteurs : cela peut être du texte, des images, des vidéos, des fichiers sons, etc.
<meta charset="utf-8" />
Cet élément définit le jeu de caractères qui devrait être utilisé pour le document et indique que c’est utf-8. utf-8 regroupe l’ensemble des caractères connus utilisés dans les différents langages humains. Généralement utf-8 permet de gérer n’importe quel texte que vous pourriez utiliser sur la page. C’est pour cette raison qu’on utilise ce jeu de caractères car il permet de couvrir l’extrême majorité des cas.
<title></title>
Cet élément définit le titre de votre page. C’est ce titre qui apparaîtra sur l’onglet lorsque la page sera chargée. C’est également ce titre qui sera utilisé pour décrire la page lorsque vous la placez dans vos marques-pages ou pour gérer l’accessibilité au niveau des navigateurs.

Les balises principales

Baliser le texte

Dans cette section, nous verrons quelques-uns des éléments de base de HTML pour baliser le texte.

Les titres

Les éléments de titre permettent de définir certains textes comme des titres ou sous-titres pour le contenu. D’une certaine façon, ceux-ci fonctionnent comme pour un livre : on a le titre du livre (le plus important) puis les titres des différents chapitres et parfois des sous-titres au sein de ces chapitres. HTML contient des éléments pour 6 niveaux de titres : <h1><h6>. La plupart du temps, 3-4 niveaux suffisent amplement :

<h1>Mon titre principal</h1>
<h2>Mon titre de section</h2>
<h3>Mon sous-titre</h3>
<h4>Mon sous-sous-titre</h4>

Vous pouvez ajouter un titre adapté à votre page avec un de ces éléments.

Les paragraphes

Comme expliqué auparavant, les éléments <p> sont utilisés pour contenir des paragraphes de texte. Vous les utiliserez fréquemment pour placer du texte sur une page :

<p>Voici un paragraphe</p>

Un élément <p> placé dans un autre élément de type <p> sera interprété comme définit au dehors et le paragraphe externe est terminée avant l’ouverture de la balise de l’élément <p> interne.

<p>un paragraphe
  <p>un autre paragraphe</p> un texte</p>

Un élément <p> élimine les espaces redondants et les retours à la ligne suivante. Pour maintenir des espaces voulus ou bien un retour à la ligne, vous pouvez utiliser la balise <pre> au lieu de <p>.

Exemple :

<p>Un     paragraphe
  multi-ligne avec    espaces</p>

<pre>Un     paragraphe
  multi-ligne avec    espaces</pre>

Les listes

Une grande partie du contenu sur le Web est présente sous forme de listes à puces ou bien listes numérotées. HTML a donc des éléments utilisés pour représenter ces listes. Le balisage des listes contient toujours au moins deux éléments. Le type de liste et les lignes de listes (les items). Les types de listes utilisés fréquemment sont les listes ordonnées et les listes non-ordonnées :

  1. Les listes non-ordonnées sont des listes pour lesquelles l’ordre des éléments n’a pas d’importance (correspondent aux listes à puces). La balise utilisée pour ces listes est l’élément <ul> (ul signifie unordered list qui signifie liste non-ordonnée en anglais)
  2. Les listes ordonnées sont des listes pour lesquelles l’ordre des éléments est important c’est à dire les listes numérotées. La balise utilisée pour ces listes est l’élément <ol> (ol signifie ordered list qui signifie liste ordonnée en anglais)

Chaque élément d’une liste est balisé avec un élément <li> (list item).

Par exemple, si on souhaite modifier un paragraphe en une liste :

<p>Mozilla est une communauté mondiale composée de technologues, penseurs,
constructeurs qui travaillent ensemble...</p>

On pourrait faire :

<p>Mozilla est une communauté mondiale composée de</p>

<ul>
  <li>technologues</li>
  <li>penseurs</li>
  <li>constructeurs</li>
</ul>

<p>qui travaillent ensemble...</p>

Une liste ordonnées est similaire :

<ol>
  <li>Étape 1</li>
  <li>Étape 2</li>
  <li>Étape 3</li>
</ol>

Une liste peut être interne dans une liste. On peut aussi mélanger les listes des différents types.

<ul>
  <li>
    Chapitre I
    <ol>
      <li>Section 1</li>
      <li>
        Section 2
        <ul>
          <li>Sous Section A</li>
          <li>Sous Section B</li>
        </ul>
      </li>
    </ol>
  </li>
  <li>Chapitre II</li>
</ul>

Listes de descriptions

La liste des descriptions permettent de décrire un terme. Elle est délimitée par la balise <dl> (description list). On utilise la balise <dt> (description term) pour spécifier le terme à définir suivi par une balise <dd> (description description) pour décrire le terme. On peut spécifier des multiple de termes par description ou multiple description par terme.

<dl>
  <dt>Un seul terme</dt>
  <dd>Une seule description</dd>

  <dt>Premier terme</dt>
  <dt>Deuxième terme</dt>
  <dd>Première description</dd>
  <dd>Deuxième description</dd>
</dl>

Le résultat sera :

Les images

Pour afficher un image, on utilise la balise <img>. Cet élément permet d’intégrer une image dans la page, à l’endroit où l’élément apparaît. La source de l’image utilisée est définie via l’attribut src (pour source) qui contient le chemin vers le fichier de l’image.

<img src="../assets/imgs/early-ibm-mainframe.jpg" alt="Un ancient mainframe IBM" />

Nous avons aussi utilisé l’attribut alt (pour alternatif) qui contient un texte qui permet de décrire l’image et qui peut être utilisé par les utilisateurs qui ne peuvent pas voir l’image en cas où ils sont malvoyants ou en cas où quelque chose qui s’est mal passée et que l’image n’a pas pu être affichée. Par exemple, cela peut se produire si le chemin vers l’image est incorrect ou bien le fichier de l’image est supprimé accidentellement.

L’image affichée dans le document HTML sera de même dimensions que les dimensions réelles du fichier image. Les attributs height et width permettent de modifier les dimensions d’affichage en dimensionnant l’image par rapport à la hauteur ou à la largeur spécifiées en pixels ou à la hauteur et la largeur spécifié ensemble.

Prenons l’exemple de spécification d’une seule dimension, l’autre dimension sera calculée relativement à la dimension spécifiée pour garder le format de l’image origine.

<img height="150" src="../assets/imgs/early-ibm-mainframe.jpg" />

Au contraire, si on spécifie les deux dimensions :

<img height="150" width="300" src="../assets/imgs/early-ibm-mainframe.jpg" />

Les navigateurs supportent de multiple formats d’images. Les principaux formats d’images les plus supportés sont :

Les liens

Les liens sont très importants, ce sont eux qui font que le Web est une toile sur laquelle on peut naviguer de page en page. Pour créer un lien, il suffit d’utiliser l’élément <a> (le a est un raccourci pour « ancre »). Pour transformer du texte en un lien, suivez ces étapes :

  1. Choisissez un texte (ici nous travaillerons avec le texte « Google Search ».
  2. Encadrez le texte dans un élément <a> :
    <a>Google Search</a>
    
  3. Fournissez un attribut href (href correspond à hypertext reference en anglais, ce qui signifie « référence hypertexte » en français) pour l’élément <a>, de cette façon :
    <a href="">Google Search</a>
    
  4. Dans cet attribut, ajoutez le lien du site vers lequel vous voulez faire diriger les utilisateurs :
    <a href="https://www.google.com/search/">Google Search</a>
    

Les références hypertexte sont de différents types :

<h1 id="titre">Mon titre</h1>
<a href="#titre">Allez au titre</a>

L’élément <a> n’est pas limité à référencer les ressources accessibles par le protocole HTTP (http:// et https://). D’autres protocoles sont supportés nativement ou à travers des plugins. Ces protocoles sont principalement :

L’élément <a> peut accepter l’attribut target pour spécifier où sera ouvrert le lien. La valeur _blank permet d’ouvrir le lien dans un nouvel onglet. La valeur par défaut _self permet d’ouvrir le lien dans le même onglet que la page Web courante.

Les balises textes en ligne (inline)

Ces balises sont utilisées pour définir la structure, le style et la sémantique du texte. Contrairement aux éléments de structure de texte précédents de type “bloc” (comme les éléments du paragraphe et de listes), ces éléments peuvent être contenus dans un paragraphe et ne causent pas la création d’un nouveau bloc.

Mise en forme de texte

Ces éléments sont initialement introduits dans les anciennes versions de HTML comme des éléments de mise en forme. Ils se sont évolués en HTML5 pour présenter des significations plus sémantiques et la mise en forme est délaissée pour le CSS. On va présenter les éléments principaux et leurs significations physique (de mise en forme) et sémantique.

L’élément <b> (boldface) met le texte en gras pour attirer l’attention de l’utilisateur sans aucune signification d’importance. Par exemple, il est utilisé pour mettre en gras le nom d’un produit ou des mots clés.

Le <b>HTML</b> était inventé en <b>CERN</b>.

L’élément <i> (italic) met en italique le texte. Il permet d’indiquer qu’une partie de texte est différente du reste du texte. Par exemple, il est utilisé pour mettre en italique un texte écrit en langage étrangère ou un terme technique.

PNG (<i>Portable Network Graphics</i>) est un format d'image

L’élément <u> (underline) met le texte en mode souligné. Il n’a pas de signification sémantique exacte comme les autres éléments mais il peut être utilisé pour indiquer par exemple un texte mal écrit.

Ce texte contient un <u>mal écrite contenu</u>

L’élément <s> (strikethrough) met le texte barré. Il permet d’indiquer que le texte n’est plus précis ou relié au contexte. Pour indiquer que le texte est supprimé par l’utilisateur, on utilise l’élément <del> (delete).

Ce produit <s>est</s> était très demandé

L’élément <small> met le texte à une taille plus petite. Il permet d’indiquer que le texte est un commentaire ou une note comme une note de droit d’auteur ou une note légale.

<small>Copyright © 2017-2018</small>

Importance Logique

Ces éléments indiquent la différence de niveau d’importance logique du texte dans son contexte. Ils peuvent causer des changements de la mise en forme du texte mais pas forcément.

L’élément <strong> indique que le texte est de haute importance. Par exemple, il est utilisé pour présenter un alerte ou un message très sérieux. Généralement, le texte sera mis en gras.

<strong>Attension!</strong> Ce produit est <strong>dangereux</strong>

L’élément <mark> met en évidence un texte pour indiquer son importance dans son contexte. Par exemple, il est utilisé pour indiquer le résultat d’une recherche ou pour indiquer que le texte est intéressant pour l’utilisateur. Généralement, le texte aura une couleur de fond différente.

Il est <mark>sensible à cet produit</mark>

L’élément <em> (emphasise) indique que le texte est de forte accent. Généralement, le texte sera mis en itallique. La combinaison de <em> et <strong> (l’un dans l’autre) augmente l’importance du texte.

<em>Arrête!</em>

Abréviation et Citation

L’élément <abbr> permet d’indiquer une abréviation avec son explication en utilisant l’attribut title qui sera affichée dans un tooltip quand la souris sera dessus du texte. La mise en forme du texte diffère entre les navigateurs.

L' <abbr title="World Wide Web Consortium">W3C</abbr> principale est l'organisation de standardisation de HTML.

L’élément <cite> permet de citer un objet ou un travail par nom ou URL. Par exemple, il est utilisé pour citer un livre, une recherche, un film, une musique, un jeu ou un site, etc. Généralement, le texte est mis en italique.

La spécification de JavaScript est définit dans le standard <cite>ECMA-262</cide>

L’élément <q> (quotation) permet de mettre un texte entre quôtes. L’attribut optionnel cite référence l’URL de source de l’information. Généralement, le texte sera délimité par deux quôtes. L’élément <blockquote> permet de quôter un bloc.

<q cite="http://www.w3.org/TR/2014/REC-html5-20141028/">
  Le standard HTML5 était publié comme recommandation en 2014
</q>

Insertion du code

L’élément <code> indique que le texte est un partie de code source d’un logiciel. Le texte sera affiché en fonte monospace.

La fonction <code>main()</code> est obligatoire dans les programmes développés en C

La combinaison de l’élément <code> avec l’élément <pre> permet d’insérer un bloc de code source en gardant les espaces et les retours à la ligne.

<code><pre>
int main() {
    return 0;
}
</pre></code>

HTML définit un ensemble d’autres éléments permettant de présenter des fragments de texte comme des variables en utilisant <var>, des textes saisis par l’utilisateur au programme ou un ensemble de commandes en utilisant <kbd>, le texte généré par un programme en utilisant <samp>.

Les balises universelles

Le HTML définit deux éléments universels qui sont généraux, qui n’ont aucune signification sémantique ou physique (aucune mise en forme prédéfinie). Ces deux éléments sont :

Un exemple de l’élément <span> :

<span>un texte</span>
<span>et un autre</span>

Un exemple de l’élément <div> :

<div>
  un bloc
</div>
<div>
  un autre bloc <span>avec un span</span>
</div>

Balises structurantes

HTML5 a ajouté un ensembles de balises dont un ensemble de balises structurantes qui permettent de construire un document HTML plus sémantique et qui sont préférées à l’utilisation de <div> quand c’est possible. Ces balises n’ont pas un effet visuel dans le document. C’est le rôle du CSS.

Les nouvelles balises structurantes du HTML5 :

header
Section d’introduction d’un article, d’une nouvelle section ou du document entier (en-tête de page).
article
Section de contenu indépendante, pouvant être extraite individuellement du document ou syndiquée (flux RSS ou équivalent), sans pénaliser sa compréhension.
nav
Section possédant des liens de navigation principaux (au sein du document ou vers d’autres pages).
aside
Section dont le contenu est un complément par rapport à ce qui l’entoure, qui n’est pas forcément en lien direct avec le contenu mais qui peut apporter des informations supplémentaires.
footer
Section de conclusion d’une section ou d’un article, voire du document entier (pied de page).
section
Section générique regroupant un même sujet, une même fonctionnalité, de préférence avec une en-tête. Il est recommandé de ne l’utiliser que s’il n’y a pas d’élément sémantique plus spécifique (parmis les éléments ci-dessus indiqués) pour représenter le contenu.

Structure d’une page Web d’un article

On va montrer la structure d’une page Web d’un article. Cette page contient :

Application

Structure sémentique d'une page Web contenant un article
Structure sémantique d'une page Web contenant un article. Par Beginning HTML5 and CSS3

Exemple: le code HTML suivant permet de rendre la page juste après.

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <title>Titre de l'article</title>
</head>

<body>

  <header>
    <h1>Nom du site</h1>
  </header>

  <nav>
    <ul>
      <li><a href="/index.html">Accueil</a></li>
      <li><a href="/top.html">Top Articles</a></li>
      <li><a href="/contact.html">Contact</a></li>
    </ul>
  </nav>

  <main>
    <article>
      <header>
        <h1>Titre de l'article</h1>
        <p>
          Posté en <time datetime="2017-10-05 09:42">10 Oct</time> par Sawssen Hariz
        </p>
      </header>
      <p>
        Contenu de l'article...
      </p>
      <footer>
        <!-- Données auxiliaires (non auteur, commentaires,...) -->
      </footer>
    </article>

    <aside>
      <h3>Articles similaires</h3>
      <ul>
        <li><a href="/article/3.html">Article 3</a></li>
      </ul>
    </aside>
  </main>

  <footer>
    <small>Copyright © 2018 Sawssen Hariz</small>
    <ul>
      <li><a href="/tos.html">Termes d'utilisation</a></li>
      <li><a href="/privacy.html">Confidence</a></li>
      <li><a href="/about.html">À propos</a></li>
    </ul>
  </footer>

</body>

</html>

Tableaux

Une tâche commune dans le développement Web est de structurer et de présenter des données sous forme de tableau. HTML contient un ensemble de balises pour construire des tableaux simples et des tableaux complexes et les mettre en formes avec le CSS. Dans ce chapitre, nous allons introduire ces balises HTML. Leur présentation par CSS, sera introduite dans le chapitre CSS.

Les balises de Tableau

Pour structurer un tableau, on utilise la balise <table> qui est utilisé comme un conteneur (container) de toutes les données du tableau et qui encadre les lignes et les colonnes. Pour présenter une ligne on utilise la balise <tr> (table row) qui elle même contient les balises <td> (tabular data) représentants les colonnes du tableau. Par exemple, le code suivant présente un tableau de personnes contenant deux lignes chacune présente une personne (son prénom dans la première colonne et son nom dans la deuxième colonne) :

<table>
  <tr>
    <td>Ali</td>
    <td>Masoud</td>
  </tr>
  <tr>
    <td>Salma</td>
    <td>Hchicha</td>
  </tr>
</table>

Le tableau résultant est :

On va maintenant ajouter le titre des différentes colonnes du tableau en utilisant la balise <th> (table header) dans une ligne qui simplifie l’exploitation du tableau visuellement.

<table>
  <tr>
    <th>Prénom</th>
    <th>Nom</th>
  </tr>
  <tr>
    <td>Ali</td>
    <td>Masoud</td>
  </tr>
  <tr>
    <td>Salma</td>
    <td>Hchicha</td>
  </tr>
</table>

Le tableau résultant est :

Pour le reste de ce chapitre, on va utiliser l’attribut border de la balise <table> qui ajoute une bordure entre les éléments du tableau pour les identifier plus facilement. Même que cet attribut est obsolète1 depuis HTML5 en faveur des propriétés de CSS, on va l’utiliser comme solution temporaire jusqu’à ce qu’on arrive au chapitre de CSS3. Donc, en remplaçant la première ligne du code précédent <table> par <table border="1">, le résultat sera :

Structure Tableau Avancée

Le HTML nous permet de fusionner horizontalement les colonnes et verticalement les lignes d’un tableau grâce aux attributs colspan et rowspan respectivement des balises <td> et <th> qui prennent comme valeur le nombre des cellules à fusionner. Prenons comme exemple un tableau d’un mini emploie du temps avec les séances de cours sont de durée de 2 heures tantdis que les séances de TP sont de durée d’une heure. Sans les attributs de fusions, le tableau sera le suivant :

<table border="1">
  <tr>
    <th>Journée</th>
    <th>08 - 09</th>
    <th>09 - 10</th>
    <th>10 - 11</th>
    <th>11 - 12</th>
  </tr>
  <tr>
    <td>Landi</td>
    <td>Cours Web</td>
    <td>Cours Web</td>
    <td>TP Java</td>
    <td>TP Linux</td>
  </tr>
  <tr>
    <td>Mardi</td>
    <td>TP Web</td>
    <td>Cours Linux</td>
    <td>Cours Linux</td>
    <td></td>
  </tr>
</table>

La solution est de fusionner les deux colonnes des séances de cours en utilisant l’attribut colspan.

<table border="1">
  <tr>
    <th>Journée</th>
    <th>08 - 09</th>
    <th>09 - 10</th>
    <th>10 - 11</th>
    <th>11 - 12</th>
  </tr>
  <tr>
    <td>Landi</td>
    <td colspan="2">Cours Web</td>
    <td>TP Java</td>
    <td>TP Linux</td>
  </tr>
  <tr>
    <td>Mardi</td>
    <td>TP Web</td>
    <td colspan="2">Cours Linux</td>
    <td></td>
  </tr>
</table>

Le tableau supporte le groupement des lignes en trois sections : l’en-tête en utilisant la balise <thead>, le corps en utilisant la balise <tbody> et le pied en utilisant la balise <tfooer> ce qui permet la séparation sémantique des lignes du tableau et facilite ses mises en forme. Si ces balises n’étaient pas utilisées, toutes les lignes du tableau sont délimitées implicitement par la balise <tbody>. Prenons l’exemple précédent avec le groupement des lignes :

<table border="1">
  <thead>
    <tr>
      <th>Prénom</th>
      <th>Nom</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Ali</td>
      <td>Masoud</td>
    </tr>
    <tr>
      <td>Salma</td>
      <td>Hchicha</td>
    </tr>
  </tbody>
  <tfoot>
    <tr>
      <th>Prénom</th>
      <th>Nom</th>
    </tr>
  </tfoot>
</table>

Le tableau résultant est :

Pour ajouter un titre (une légende) à un tableau, on utilise la balise <caption> après l’ouverture de la balise <table> ou avant sa fermeture :

<table border="1">
  <caption>Liste des personne</caption>
  <thead>
    <tr>
      <th>Prénom</th>
      <th>Nom</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Ali</td>
      <td>Masoud</td>
    </tr>
    <tr>
      <td>Salma</td>
      <td>Hchicha</td>
    </tr>
  </tbody>
</table>

Le tableau résultant est :

Remarques

Anciennement, la balise <table> était utilisée pour mettre en forme la page Web à cause des limites de CSS et son mal support par les navigateurs. Mais, depuis le HTML5, il est recommandé de ne plus utiliser les tableaux pour la mise en forme de pages Web mais plutôt, il vaut mieux utiliser le CSS3 parce que la balise <table> n’est pas sensible aux différents types d’écrans (c’est à dire n’est pas responsive design) et demande une structure HTML plus complexe.

La plupart des attributs des balises de tableaux (<table>, <th>, <tr>, <td>, …) sont devenus obsolètes1 depuis HTML5 en faveur des propriétés de CSS ou en faveur des autres balises en HTML.

  1. Cette fonctionnalité n’est plus officiellement supportée par le standard. Et les vendeurs des navigateurs vont supprimer son support dans le futur sans aucune notification préalable.  2

Formulaire

Le HTML fournit un ensemble de balises pour construire des formulaires qui sont les éléments de base pour développer des pages interactives où l’utilisateur peut saisir des données, cliquer des boutons et sélectionner un ensemble de choix. Ces données peuvent être envoyées au serveur Web ou interceptées et utilisées par la page Web en utilisant le langage de programmation Web JavaScript. La mise en forme des formulaires avec CSS et le traitements dynamiques des ces formulaires avec JavaScript seront présentés dans des sections ultérieures.

Création d’un formulaire

Les formulaires doivent être délimités par la balise <form> et </form>. Comme celui-ci :

<form action="https://example.com/page-traitement" method="post">
</form>

C’est un élément conteneur définissant un formulaire. Pour spécifier la manière dont il se comporte, on ajoute les attributs action et method :

On ajoute ensuite les balises du formulaire. HTML5 a enrichi la liste de ces balises pour supporter différents types de données à saisir et a amélioré l’intégration avec le système.

Éléments d’un formulaire

Le HTML5 contient un nombre riche d’éléments de formulaire supportant des multiples types de données à saisir et améliorant l’intégration avec le système.

Champ de texte simple

C’est l’élément le plus basique de saisie. Il permet la saisie d’une seule ligne de texte.

<input type="text" />

Mot de passe

Il permet la saisie d’une seule ligne de données sensible à la casse (mot de passe). Le texte saisi n’est pas affiché mais des astérisques ou des points seront affichés.

<input type="password" />

Nombre

Il permet la saisie d’un nombre. On peut spécifier le nombre minimal possible par l’attribut min et le maximal par max et le pas entre les nombres possibles step

<input type="number" placeholder="Temperature en °C" min="-50" max="150" step="0.2" />

Zone de texte

Il permet de saisir un texte de plusieurs lignes. On peut changer sa hauteur et sa largeur en nombre des caractères.

<textarea cols="30" rows="3"></textarea>

Étiquette / label

La balise <label> permet de décrire le champ à saisir. On utilise l’attribut for pour spécifier l’identificateur de l’élément correspondant.

<label for="nom">Donnez votre nom :</label>
<input type="text" id="nom" />

Case à cocher

Elle permet de sélectionner de multiple choix dans une liste proposée (soit zéro ou un ou multiple choix). Les choix doivent appartenir au même groupe en leur donnant le même nom (même valeur de l’attribut name) mais chaque choix doit avoir une valeur différente de l’attribut value.

<p>
  <label>
    <input type="checkbox" name="food" value="végétarian" />
    Végétarien
  </label>
</p>
<p>
  <label>
    <input type="checkbox" name="food" value="fruit-de-mer" />
    Fruit de mer
  </label>
</p>
<p>
  <label>
    <input type="checkbox" name="food" value="steak" />
    Steak
  </label>
</p>

Groupe radio

Il permet de sélectionner un seul choix dans une liste proposée. Les choix qui sont les boutons radios doivent appartenir au même groupe en leur donnant le même nom (même valeur de l’attribut name) mais chaque choix (chaque bouton radio de même groupe) doit avoir une valeur différente de l’attribut value.

<p>
  <label>
    <input type="radio" name="reponse" value="vrai" />
    Vrai
  </label>
</p>
<p>
  <label>
    <input type="radio" name="reponse" value="faux" />
    Faux
  </label>
</p>

Bouton d’envoi

Il permet l’envoi des données saisies à l’URL spécifié dans l’attribut action du formulaire en utilisant la méthode HTTP spécifiée dans l’attribut method du formulaire. La création du bouton d’envoi peut être à travers un élément <input> de type submit ou d’un élément <button> qui est par défaut de type submit.

<p>
  <input type="submit" value="Envoyé le formulaire" />
</p>
<p>
  <button>Envoyé le <mark>formulaire</mark></button>
</p>

Bouton de réinitialisation

Il permet la réinitialisation des champs du formulaire. La création du bouton de réinitialisation peut être à travers un élément <input> de type reset ou d’un élément <button> de type reset.

<form>
  <input type="text" />
  <input type="reset" value="Réinitialiser" />
  <button type="reset"><b>Réinitialiser</b></button>
</form>

Liste à choix multiple

Il permet de sélectionner un seul (ou plusieurs) choix dans une liste d’options déroulante. Les choix sont des balises <option> avec différentes valeurs de l’attribut value. Elles sont toutes regroupées dans une balise <select>. L’attribut multiple permet la sélection de multiples choix dans une liste non déroulante.

<p>
  <select>
    <option value="tn">Tunisie</option>
    <option value="fr">France</option>
    <option value="us">États-Unis</option>
  </select>
</p>
<p>
  <select multiple>
    <option value="m">Musique</option>
    <option value="v">Vidéo</option>
    <option value="p">Photo</option>
  </select>
</p>

Fichier

Il permet de sélectionner un fichier depuis l’appareil de l’utilisateur pour le télécharger (uploader) vers le serveur. L’attribut enctype du formulaire doit être égal à “multipart/form-data” pour que le formulaire peut uploader le fichier. L’attribut multiple permet la sélection de fichier multiples. L’attribut accept peut être utilisé pour définir les types de fichier que le contrôle permet de sélectionner sous la forme d’une liste d’extensions de fichier ou de types MIME séparés par des virgules.

<form enctype="multipart/form-data">
  <input type="file" accept="image/*" />
</form>

Dates / Temps

Cette classe de type permet de saisir une date, un horaire ou les deux en utilisant respectivement les types date, time, datetime-local sans fuseau horaire. En plus, il permet de saisir une semaine d’une année et un mois d’une année en utilisant le type week et month respectivement. Le navigateur utilisera une interface pour améliorer l’expérience utilisateur. On peut spécifier la valeur minimale et la valeur maximale et le pas pour ces champs en utilisant respectivement les attributs min, max et step.

<p>
  <label>Champ de Date :</label>
  <input type="date" />
</p>
<p>
  <label>Champ de temps :</label>
  <input type="time" min="13:00" max="18:30" />
</p>
<p>
  <label>Champ de date et temps local:</label>
  <input type="datetime-local" />
</p>
<p>
  <label>Champ de mois:</label>
  <input type="month" />
</p>
<p>
  <label>Champ de semaine:</label>
  <input type="week" />
</p>

Couleur

Il permet la sélection d’une couleur en utilisant un sélecteur des couleurs.

<input type="color" />

Zone de recherche

Permet de saisir une seul ligne du texte. La différence entre ce type et le type texte est qu’il peut avoir une mise en forme différente qui dépend du navigateur utilisé.

<input type="search" />

Champ email

Il permet la saisie d’une ou de plusieurs adresses électroniques (email) qui sera/seront validée(s) par le navigateur. Le clavier tactile du smartphone sera optimisé pour la saisie des email. L’attribut multiple permet le saisir de multiple emails séparés par des virgules.

<input type="email" />

Champ URL

Il permet la saisie d’un URL absolu qui sera validé par le navigateur. Le clavier tactile du smartphone sera optimisé pour la saisie des URL.

<input type="url" />

Champ Téléphone

Il permet la saisie d’un numéro de téléphone. Il ne sera pas validé par le navigateur par ce que leurs formats varient beaucoup entre les pays. Le clavier tactile du smartphone sera optimisé pour leur saisie.

<input type="tel" />

Les attributs du formulaire

name

Définir le nom de l’élément du formulaire qui sera utilisé lors de l’envoi des données saisies au serveur qui peut les manipuler correctement. Cet attribut est obligatoire à tous les champs de saisie dont les valeurs seront envoyées au serveur.

type

Cet attribut spécifie le type du champ de saisie pour les éléments <input> et le type du bouton pour l’élément <button>.

value

Spécifie la valeur par défaut du champ et sera modifiée en cas de saisie.

autocomplete

Indiquer que le champ peut avoir sa valeur par défaut complétée automatiquement par le navigateur en utilisant les valeurs anciennement saisies. L’attribut autocomplete supporte un ensemble de valeurs permettant de spécifier le type de données à compléter, par exemple, la valeur “country-name” indique que le navigateur peut compléter le champ par le nom du pays de l’utilisateur. La liste complète des valeurs possible est accessible dans Mozilla Developer Network.

autofocus

Un attribut booléen pour mettre l’élément en focus lorsque la page est chargée. Un seul élément peut avoir le focus.

placeholder

Spécifier le texte à afficher dans le champ en gris à moitié transparent quand le champ est vide pour donner plus d’allusion à l’utilisateur.

<input type="email" placeholder="Exemple: contact@exemple.com" />

max, min, step

Spécifier la valeur maximale, la valeur minimale et le pas entre les valeurs possible pour les champs numériques ou des dates et des temps.

<p>
  <label>Saisi un nombre entre 5 et 10</label>
  <input type="number" min="5" max="10" />
</p>
<p>
  <label>Saisi un nombre entre -Inf et 100</label>
  <input type="number" step="10" max="100" />
</p>
<p>
  <label>Saisi un horaire entre 13:00 et 18:30</label>
  <input type="time" min="13:00" max="18:30" />
</p>

maxlength, minlength

Spécifier la longueur maximale et la longueur minimale du texte saisi pour les champs textuels.

<p>
  <label>Text de longeur maximale 20 lettres</label>
  <input type="text" maxlength="20" />
</p>
<p>
  <label>Mot de passe de longeur entre 8 et 32 lettres</label>
  <input type="password" minlength="8" maxlength="32" required />
</p>

checked, selected

Deux attributs booléens:

<label>
  <input type="radio" name="genre" value="h" checked />
  Homme
</label>
<label>
  <input type="radio" name="genre" value="f" />
  Femme
</label>


<p>
  <label>
    <input type="checkbox" name="food" value="végétarian" checked />
    Végétarien
  </label>
</p>
<p>
  <label>
    <input type="checkbox" name="food" value="fruit-de-mer" />
    Fruit de mer
  </label>
</p>
<p>
  <label>
    <input type="checkbox" name="food" value="steak" checked />
    Steak
  </label>
</p>

<p>
  <select>
    <option value="fr">France</option>
    <option selected value="tn">Tunisie</option>
    <option value="us">États-Unis</option>
  </select>
</p>
<p>
  <select multiple>
    <option selected value="m">Musique</option>
    <option value="v">Vidéo</option>
    <option selected value="p">Photo</option>
  </select>
</p>

required

Indique que la saisie des données (avec validation si supportée) dans le champ est obligatoire avant l’envoi des données. Dans le cas des boutons radios ou d’une liste de choix, l’attribut booléen indique que, un des choix doit être coché/sélectionné. Dans le cas de cases à cocher, il indique que ce choix doit être coché. Dans un élément de type fichier, il indique qu’un fichier doit être sélectionné.

<form>
  <p>
    <input type="text" />
  </p>
  <p>
    <input type="text" required />
  </p>
  <p>
    <label>
      <input type="radio" name="quiz" value="c1" />
      Choix 1
    </label>
    <label>
      <input type="radio" name="quiz" value="c2" required />
      Choix 2
    </label>
  </p>
  <p>
    <label>
      <input type="checkbox" name="check" value="c1" />
      Case 1
    </label>
    <label>
      <input type="checkbox" name="check" value="c2" required />
      Case 2 (Obligatoire)
    </label>
  </p>
  <p>
    <select multiple required>
      <option value="m">Musique</option>
      <option value="v">Vidéo</option>
      <option value="p">Photo</option>
    </select>
  </p>
  <input type="submit" value="Valider et Envoyez" />
</form>

pattern

Spécifier l’expression régulière des valeurs valides à saisir dans les champs textuels. Dans le cas d’un champ d’email ou d’URL, l’attribut est appliqué seulement si l’email ou l’URL est déjà de format valide.

Dans le premier exemple, on va limiter le texte saisi seulement à des chiffres hexadécimaux. On va utiliser une expression régulière qui accepte seulement des chiffres décimaux (‘0’…‘9’) et les lettres ‘A’ à ‘F’ en minuscule et en majuscule.

<form>
  <p>
    <label>Solution 1</label>
    <input type="text" pattern="[a-fA-F0-9]*" required />
  </p>
  <p>
    <label>Solution 2</label>
    <input type="text" pattern="[a-fA-F\d]*" required />
  </p>
  <input type="submit" value="Valider" />
</form>

Dans le deuxième exemple, on veut limiter les emails saisis aux emails du Google Mail (gmail) seulement. On a besoin donc d’une expression régulière qui soit valide si le nom du domaine de l’email est “gmail.com”, nous n’avons pas besoin de valider le format d’email (le contenu saisi avant ‘@’) car le format est validé avant la validation avec le pattern.

<form action="#">
  <input type="email" pattern=".+@gmail.com" required />
  <button>Vérifier</button>
</form>

disabled, readonly

Attributs booléens dont disabled spécifie que l’élément ne doit pas réagir à toutes les intéractions d’utilisateur (clic, sélection, …) et ne doit pas être envoyé au serveur. Tantdis que readonly spécifie que la valeur de l’élément ne doit pas être modifiée par l’utilisateur mais son contenu doit être envoyé au serveur.

<p>
  <input type="text" value="Je suis disabled" disabled />
</p>
<p>
  <input type="text" value="Je suis readonly" readonly />
</p>

Application

Premier formulaire

On va créer un formulaire simple de contact qui permet de saisir le nom et le prénom, l’email, le téléphone et le message. Il ne contient que quatre champs de texte, chacun ayant un libellé. Le premier est un champ texte pour la saisie du nom et prénom, le deuxième est un champ texte qui n’accepte qu’une adresse email valide, le troisième est un champ texte pour la saisie d’un numéro de téléphone et finalement un champ de type texte de plusieurs lignes pour la saisie du message de contact.

<form action="/contact.php" method="post">
  <p>
    <label for="nom">Nom et Prénom :</label>
    <input type="text" id="nom" name="nom" />
  </p>
  <p>
    <label for="email">Email :</label>
    <input type="email" id="email" name="mail" />
  </p>
  <p>
    <label for="phone">Téléphone :</label>
    <input type="tel" id="phone" name="phone" />
  </p>
  <p>
    <label for="message">Message :</label>
    <textarea id="message" rows="4" cols="30" name="msg"></textarea>
  </p>
  <p>
    <input type="submit" value="Envoyez" />
    <input type="reset" value="Réinitialiser" />
  </p>
</form>

L’utilisation de la balise <p> ici est juste pour structurer notre code et séparer visuellement les différents champs sans besoin de CSS. Chaque champ est accompagné d’une étiquette (veuillez noter la balise <label>). Pour faire la relation logique entre le champ et son étiquette, on utilise l’attribut for de l’étiquette pour référencer l’identificateur du champ (l’attribut id). Un des avantages de lier l’étiquette à son élément correspondant est de permettre à l’utilisateur de cliquer sur l’étiquette pour activer le champ correspondant.

Les trois premiers champs sont des éléments <input> dont on a utilisé l’attribut type pour spécifier le type de données à saisir. Le HTML5 supporte de différents types :

Les boutons sont des éléments <input>. Le premier bouton avec le type submit pour spécifier que ce bouton doit envoyer les données saisies à notre serveur. Le deuxième bouton est un autre élément de type reset pour spécifier que ce bouton doit réinitialiser les champs de notre formulaire. Pour changer le contenu de ces boutons, on utilise l’attribut value.

Deuxième formulaire

Donc, on va créer un nouveau formulaire utile et fonctionnel qui permettra de chercher un terme dans le moteur de recherche Google. Le moteur de recherche Google attend de passer le terme à rechercher avec le nom q (query) à https://www.google.com/search en utilisant la méthode “get”.

<form action="https://www.google.com/search" method="get" target="_blank">
  <input type="search" name="q" placeholder="Entrez votre terme..." required />
  <button>Recherche en <i>Google</i></button>
</form>

Pour le champ texte de saisie du terme, on a utilisé un élément <input> de type search. C’est un élément équivalent au champ de type text mais qui peut avoir une différente mise en forme qui dépend du navigateur utilisé. On a nommé ce champ q en utilisant l’attribut name puisque le moteur de recherche Google attend le terme à chercher passé avec le nom q. Deux nouveaux attributs utilisés dans cet élément sont placeholder qui permet de définir le texte à afficher en gris à moitié transparent dans le champ s’il est vide et qui peut être utilisé au lieu ou avec l’étiquette. L’autre attribut est required qui indique que ce champ est obligatoire à saisir avant l’envoi des données au serveur.

On a aussi utilisé l’élément <button> au lieu du <input type="submit" />. Ils ont presque le même rôle. En effet, l’élément <button> est plus flexible et supporte la mise en forme de son contenu tandis que <input type="submit" /> ne peut accepter qu’un texte simple dans l’attribut value sans des balises de mise en forme.

Remarque

Pendant la conception de votre formulaire, il est important de garder la quantité de données à saisir par l’utilisateur le minimum possible, parce que par expérience, plus que vous demandez de données, plus vous risquez que l’utilisateur s’en aille. De plus, de point de vue de la sécurité et de la confidentialité, plus que vous stockez des données à propos de vos utilisateurs dans vos serveurs plus que vous augmentez le dommage en cas d’une faille de sécurité et fuite des données personnelles de vos utilisateurs.

Multimédia et Intégration

Avant le HTML5, pour l’ajout du contenu multimédia ou des animations dans une page Web, les développeurs ont utilisé des plugins embarqués dans la page du Web comme des plugins de lecteurs vidéos/audio (VLC, RealPlayer, QuickTime, Windows Media Player, …) ou des plateformes propriétaires comme Adobe Flash (anciennement Macromedia Flash) et Microsoft Silverlight. Ces solutions ont des limites comme le manque d’intégration avec le HTML/CSS, des problèmes de sécurité, de stabilité et de manque d’accessibilité.

HTML5 a ajouté un support native des contenus multimédia et des animations en utilisant une combinaison de HTML5, CSS3 et JavaScript. Dans cette section, on va démontrer seulement les fonctionnalités fondamentales du HTML5 sans CSS3 et JavaScript.

Les Vidéos

La balise <video> permet d’intégrer une vidéo dans la page Web. Un exemple d’un élément vidéo :

<video src="mon-video.mp4" controls></video>

Les attributs principaux d’élément vidéo sont :

Les navigateurs supportent de multiples formats de vidéo. Ce support diffère entre les navigateurs. Les deux formats principaux sont :

Pour fournir plus d’un format de vidéo, on peut utiliser la balise <source> qui accepte L’URL de la vidéo dans l’attribut src et le format MIME de vidéo dans l’attribut type.

<video controls>
  <source src="mon-video.webm" type="video/webm" />
  <source src="mon-video.mp4" type="video/mp4" />
</video>

Les audios

L’élément audio de HTML5 fonctionne de même façon que l’élément vidéo mais il est limité aux formats audio.

<audio controls>
  <source src="mon-audio.mp3" type="audio/mp3" />
  <source src="mon-audio.ogg" type="audio/ogg" />
  <source src="mon-audio.webm" type="audio/webm" />
</audio>

Les formats principaux d’audio sont :

Les images vectorielles

Les images sont divisées en deux types principaux :

La format SVG (Scalable Vector Graphics) est un format d’image vectoriel basé sur le langage XML développé par W3C depuis 1999. Ce format est supportée par la majorité des éditeurs des images vectorielles. Il est utilisé dans le Web pour structurer des images complexes que le HTML/CSS peut structurer. SVG est désigné pour s’intégrer bien avec les technologies du Web comme le HTML et CSS. Il supporte les animations aussi. La version courante est SVG 1.1. La version SVG 2.0 est en cours de développement.

Pour afficher un fichier SVG, on utilise la balise <img>.

<img src="mon-image.svg" />

On peut aussi intégrer le code SVG directement dans notre code HTML en utilisant la balise SVG.

<p>Un démo page Web avec image SVG</p>
<svg width="300px" height="200px">
    <rect width="100%" height="100%" fill="red" />
    <circle cx="150" cy="100" r="80" fill="green" />
    <text x="150" y="125" font-size="60" text-anchor="middle" fill="white">SVG</text>
</svg>

Intégration de contenu externe

À côté de l’intégration des vidéos et audio dans la page Web, le HTML permet l’intégration d’autres types de ressources (p.ex: PDF, Flash, sous pages Web, …) dans un document Web. Cette fonctionnalité était très importante surtout avant la standardisation des éléments <video> et <audio>. Pendant les années 90s et le début de 2000s, les développeurs Web ont utilisé l’élément <object> ou l’élément <embed> qui permettent d’intégrer différents types de ressources à travers des plugins (comme Adobe PDF Reader, VLC, RealPlayer, QuickTime, Windows Media Player, …) ou des plateformes propriétaires comme Adobe Flash (anciennement Macromedia Flash), Java Applets et Microsoft Silverlight. Aussi, l’élément <iframe>, et ses précédents absolues <frame> et <frameset>, permettent l’intégration des sous page Web dans le document HTML.

Intégration des pages Web

On va discuter seulement l’élément <iframe> parceque les éléments <frame> et <frameset> sont obsolètes depuis HTML 5.0 . Cet élément permet d’intégrer des pages Web dans le document HTML courant ce qui permet d’intégrer des contenus d’autres sites Web ou de réutiliser des contenus sans besoin de l’implémenter dans chaque page Web. Par exemple, on peut intégrer une vidéo ou un audio hébergé dans un fournisseur de services vidéos ou audio (YouTube, Vimeo, SoundCloud, …), ou un système de commentaires (Disqus, …), ou des cartes géographiques (Google Maps, Here, …), ou des banners d’avertissement (Google Adsense, …).

<iframe> accepte de multiples attributs dont les principaux sont :

Prenons les deux exemples suivants d’intégration de vidéo YouTube et d’une carte géographique Google Maps dans le document.

<iframe src="https://www.youtube.com/embed/mzPxo7Y6JyA" frameborder="no" allowfullscreen width="560" height="315"></iframe>

<iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3277.9357736381517!2d10.769966314953201!3d34.757210680419966!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x1301d2c1f3c2991f%3A0xab7f8817c80e9617!2sHigher+Institute+of+Technological+Studies+of+Sfax!5e0!3m2!1sen!2stn!4v1528826537239"
  width="100%" height="400px;" frameborder="0" allowfullscreen></iframe>

Intégrer des autres ressources

Contrairement à l’élément <iframe>, <object> et <embed> permettent d’intégrer d’autres types de contenu dans le document HTML grâce à des plugins propriétaires. Par exemple, on peut intégrer des PDFs, des Flash, des Applets Java, des vidéos, des images ou d’autres types. On va démontrer seulement l’élément <object> parce que l’élément <embed> est rarement utilisé et <object> est son successeur.

Les attributs principaux de <object> :

Prenons l’exemple d’intégration d’un fichier PDF.

<object data="rapport.pdf" type="application/pdf"></object>

Notons que l’utilisation de l’élément <object> et <embed> est rare à causes des multiples raisons :

Remarque

Ils y a un grand nombre de vendeurs des services vidéos en ligne (YouTube, Vimeo, Dailymotion, …) et des services d’audio en ligne (Soundcloud, …) qui sont gratuits et payants. Ces services permettent d’héberger les vidéos/audio dans leurs serveurs sans limites de tailles ou de bandwidths. Ces services permettent d’intégrer leurs lecteurs vidéos/audio dans vos pages Web facilement avec un énorme nombre de fonctionnalités. Ils sont la solution la plus préférée pour ajouter des contenus multimédias aux sites Web.

Le code d’intégration est fourni par ces services. Par exemple, YouTube fournit le code d’intégration dans le dialogue du partage de vidéo. Le code suivant est le code d’intégration d’un vidéo YouTube :

<iframe src="https://www.youtube.com/embed/mzPxo7Y6JyA" frameborder="no" allowfullscreen width="560" height="315"></iframe>

Complément HTML5

Vérificateur lexico-graphique, syntaxique et sémantique

Il existe en ligne des outils (linter) qui permettent de vérifier lexiquement, syntaxiquement et sémantiquement un document HTML/CSS tels que W3C Markup Validation Service, Validator.nu, Tidy, etc.

CSS

Introduction CSS

Le langage CSS (Feuille de style en cascade, Cascading Style Sheets en anglais) est un langage de feuille de style qui sert à appliquer des styles sur différents éléments dans un document HTML. Il est un langage complémentaire à HTML qui permet de séparer la présentation d’un élément (CSS) de son contenu (HTML).

Les versions du langage CSS

CSS1, apparu en 1996, définit essentiellement les propriétés de rendu typographique du texte. La spécification CSS 2, publiée en 1998, étend considérablement les possibilités théoriques de CSS, avec environ 70 propriétés supplémentaires. Suivie par une version révisée, CSS 2.1.

Dés la spécification CSS 3, le langage CSS a été développé sous la forme de modules indépendants, dans le but que des modules “prêts” puissent être implémentés rapidement par les navigateurs. Cet objectif a été atteint, et de nombreux modules sont actuellement bien supportés par les navigateurs et utilisés au quotidien (p.ex. WebFonts, Media Queries, Flexbox, Backgrounds & Borders), alors que d’autres sont encore en développement. En plus au lieu des versions du standard, il y aura des documents des modules stables dans chaque 3 ans (2015, 2018, …).

Évolultion du CSS et ses modules
Évolultion du CSS et ses modules. Par Mozilla Developer Network

L’année 2010, qui marque une large adoption du standard HTML5, représente une avancée importante pour le CSS 3. C’est en 2010 que le terme “Responsive Web Design” faisant son apparition, sous la plume d’Ethan Marcotte.

Principes de base

Le langage CSS permet de définir des règles, qui sont exprimées sous forme de couples propriété: valeur.

Les propriétés sont libellées à l’aide de mots-outils anglais tels que width (largeur), font-size (taille de la police de caractères) ou background-color (couleur de fond). Ces propriétés sont spécifiées dans le standard CSS.

Les valeurs sont exprimées à l’aide d’unités (pixels, pourcents…), ou de mots-clés propres au CSS. Par exemple, une couleur peut être exprimée à l’aide des mots clés (“black”, “blue”, etc), de valeurs hexadécimales (p.ex. #FF0000) ou des fonctions (p.ex. rgb(255, 255, 255)).

Les couples propriété-valeur constituent le “bloc de déclaration” d’une règle CSS. S’il y en a plusieurs, on les sépare avec des points-virgule. Ces déclarations seront appliquées à des parties du document identifiées par un sélecteur.

Chaque règle CSS comporte un sélecteur, et un bloc de déclaration.

Exemple de règle CSS :

h1 {
    color: red;
    text-transform: uppercase;
}

Dans cet exemple, nous avons :

Résultat : dans cette règle, on applique un style à tous les éléments h1 du document : la couleur du texte sera rouge (red), et tous les caractères seront affichés en majuscules (uppercase).

Pour tester notre exemple CSS, on va utiliser la balise <style> qui permet de définir notre feuille de styles directement dans notre document HTML. On va placer cette balise dans l’en-tête de notre document. Le code complet de notre exemple sera :

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8" />
  <title>Démo CSS</title>
  <style>
    h1 {
        color: red;
        text-transform: uppercase;
    }
  </style>
</head>

<body>
  <h1>Titre n°1</h1>
  <h2>Titre n°2</h2>
  <p>Un paragraphe....</p>
</body>

</html>

On peut aussi séparer notre code CSS de notre code HTML pour permettre la réutilisation du code CSS entre de multiples pages Web, faciliter la maintenance du code et améliorer la lisibilité. Le code CSS sera écrit dans un fichier séparé nommé avec une extension .css. Pour appliquer le CSS de ce fichier aux éléments de notre document HTML, on déclare un élément <link> à l’intérieur de l’élément <head> comme suit :

<link href="ma-feuille.css" rel="stylesheet" type="text/css" />

Les attributs utilisés de la balise <link> sont :

En appliquant les changements nécessaires pour séparer notre code CSS de notre document HTML de l’exemple précédent, le résultat sera :

h1 {
    color: red;
    text-transform: uppercase;
}
<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8" />
  <title>Démo CSS</title>
  <link href="css/demo1.css" rel="stylesheet" type="text/css" />
</head>

<body>
  <h1>Titre n°1</h1>
  <h2>Titre n°2</h2>
  <p>Un paragraphe....</p>
</body>

</html>

Autre solution mais pas recommandée est d’écrire la mise en page des éléments directement dans l’attribut style de l’élément. Cette méthode ne permet pas la réutilisation des mises en page entre les éléments du même document HTML ce qui en résulte est beaucoup de duplication du code, difficulté de maintenance et un code peu lisible. C’est pourquoi cette méthode est à éviter. Le code de l’exemple précédent sera :

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8" />
  <title>Démo CSS</title>
</head>

<body>
  <h1 style="color: red; text-transform: uppercase">Titre n°1</h1>
  <h2>Titre n°2</h2>
  <p>Un paragraphe....</p>
</body>

</html>

Pour commenter en CSS on utilise des commentaires de style de langage C /* */. Prenons par exemple le code précédent.

/* Un commentaire simple*/

/* Un commentaire
 * multi-ligne
 */

h1 {
    /* un commentaire dans le bloc */
    color: red;
    /* text-transform: lowercase; */
    text-transform: uppercase;
}

Pour améliorer la lisibilité du code, on utilise l’indentation qui peut être d’une seule tabulation ou de deux ou quatre espaces. Une fois une indentation choisie, il faut suivre la même indentation pour le reste du code. Une autre règle à suivre est de retourner à la ligne après chaque déclaration.

Les sélecteurs CSS

Le sélecteur définit à quel élément de la page un style CSS sera appliqué. Par exemple :

h1 { color: Tomato }

La couleur Tomato sera appliquée à tous les éléments h1 de la page.

Il est possible de grouper plusieurs sélecteurs, en les séparant par des virgules. Exemple :

h1 { color: Tomato }
h2 { color: Tomato }
h3 { color: Tomato }

Ces trois règles peuvent être groupées comme ceci :

h1, h2, h3 { color: Tomato }

Sélecteurs de base

E
sélectionner tout élément de type E. Pour sélectionner tous les éléments de type paragraphe.
p {
    color: blue;
}
.c
Séléctionner tout élément ayant la classe “c”. L’utilisation des classes permet la réutilisation des styles entre multiples élements. Un élément peut avoir plus q’une seule classe. Pour séléctionner l’élement de classe “note” du code HTML suivant :
<p class="note">Faire attention!</p>
.note {
    color: yellow;
}
#myid
Sélectionner tout élément avec un ID égal à l’identificateur “myid”. Contrairement à la classe, l’identificateur est unique à un seul élément dans le document HTML.

Sélecteurs imbriqués

E.warning
Sélectionner tout élément E ayant la classe “warning”.
E#myid
Sélectionner tout élément E avec un ID égal à “myid”.
E F
Sélectionner tout un élément F qui est contenu dans tout élément E.
*
Sélectionner tous les éléments du document
E > F
Sélectionner tout élément de type F qui est le fils de tout élément de type E.
E + F
Sélectionner tout élément de type F qui est l’élément suivant direct de tout élément de type E.

Remarque : Il existe d’autres sélécteurs en CSS3 que vous pouvez consulter dont le site MDN web docs

Les unités CSS

Il existe diverses unités de mesure disponibles en CSS. Elles peuvent être classées en trois catégories :

Les unités absolues correspondent à ce que l’on connaît de la mise en page “papier”. Elles sont à éviter sur le Web, sauf pour les styles d’impression (p.ex. pour spécifier les marges des pages). Comme l’indiquent les inventeurs du CSS, Håkon Wium Lie et Bert Bos (dans Cascading Style Sheets : Designing for the Web) :

Unités relatives

Les pixels

Les couleurs CSS

Dans le langage CSS, les couleurs peuvent être exprimées en différentes notations :

color: yellow;
color: #FFFF00;
color: #FF0;
color: rgb(255, 255, 0); /*Red, Green, Blue*/
color: hsl(60, 100%, 50%); /*Hue, Saturation, Luminosity*/

La couleur jaune peut être définie indifféremment par les cinq variantes ci-dessus. Le résultat sera strictement identique.

Par leur nom

Il existe quelques 140 couleurs qui sont définies par des mots-clés : on y trouve des couleurs fondamentales comme black, blue, red, mais aussi des teintes plus originales comme aquamarine, hotpink, tomato, olive

La liste complète peut être consultée :

Code héxadécimal

Le code hexadécimal (ou triplet hexadécimal) est une manière d’exprimer les couleurs du modèle RVB (en anglais: RGB). En RVB, la valeur du rouge (R), vert (V) et bleu (B) sont définis sur un intervalle allant de zéro à 255, ou de 00 à FF en notation hexadécimale.

Le nombre total de couleurs possibles est de 256 * 256 * 256, càd quelques 16’777’216 teintes.

Si les caractères sont dédoublés, la triplette peut être raccourcie à trois chiffres :

Rouge, Vert, Bleu

Le CSS autorise également la définition d’une couleur en notation RVB (en anglais: RGB). Pour chacune des trois valeurs, on peut utiliser un nombre entier allant de 0 à 255, ou un pourcentage allant de 0% à 100%.

Exemple de deux couleurs identiques :

p { color: rgb(255,0,0) }
p { color: rgb(100%,0%,0%) }

La première valeur étant au maximum, cette couleur correspond au rouge le plus intense.

RGBA

RVB avec transparence (alpha), définie sur un intervalle allant de 0.0 à 1.0.

Exemple :

p { color: rgba(255,0,0,0.5) }

La dernière valeur (l’opacité) étant de 0.5, il en résulte un rouge semi-transparent.

Teinte, saturation, luminosité (HSL)

Une nouvelle manière de représenter les couleurs a été introduite avec le CSS3: c’est le modèle HSL (Hue-saturation-lightness), basé sur un cercle chromatique

Modèle HSL
Modèle HSL. Par cours-web.ch

La saturation et la luminosité sont exprimés en pourcentage.

Quelques exemples :

p { color: hsl(0, 100%, 50%) }rouge
p { color: hsl(120, 100%, 25%) }vert foncé
p { color: hsl(120, 100%, 50%) }vert standard
p { color: hsl(120, 100%, 75%) }vert clair
p { color: hsl(120, 100%, 90%) }vert très clair
p { color: hsl(120, 50%, 75%) }vert désaturé

HSLA

Avec une quatrième valeur définissant l’opacité :

p { color: hsla(240, 100%, 50%, 0.5) } /* semi-transparent solid blue */
p { color: hsla(30, 100%, 50%, 0.1) }  /* very transparent solid orange */

Définir la couleur du texte

Pour donner une couleur au texte en CSS, utiliser la propriété color :

p { color: #333; }

Définir la couleur de fond

Pour donner une couleur de fond à un élément, utiliser la propriété background-color :

p { background-color: #C0C0C0; }

Style de texte

Taille de texte

Pour changer la taille d’un texte, on utiliser la propriété font-size. Les valeurs acceptés par cette propriété peuvent être :

p {
    font-size: 14px;
}
h1 {
    font-size: 24px;
}
h2 {
    font-size: 160%
}
h3 {
    font-size: 140%;
}
h1 {
    font-size: xx-large;
}
dt {
    font-size: 1.2em;
}

Polices

font-family définit en effet une liste de polices dans lesquelles votre texte peut apparaître. La valeur de cette propriété est une liste de polices séparées par des virgules. Si le navigateur ne peut pas trouver la première police de la liste, il passe alors à la suivante et l’applique au texte concerné. Si aucune police de la liste ne fonctionne, alors le navigateur utilise sa propre police par défaut. Ce peut-être serif, sans-serif ou monospace.

p {
    font-family: Helvetica, Arial, sans-serif;
}

h1 {
    font-family: "Times New Roman", Times, serif;
}

Epaisseur du texte

La propriété font-weight définit l’épaisseur des caractères, généralement à l’aide des valeurs normal ou bold. Voici un exemple :

strong {
    font-weight: bold;
}

Les valeurs peuvent être des nombres de 100, 200 jusqu’à 900 dont 400 est un font d’épaisseur normal, 200 est la plus fine et 900 est la plus épaisse. Ou des mots clés absolues (“normal” pour 400, “bold” pour 700). Ou des mots clés relatifs à l’élément parent (“lighter” pour plus fine, “bolder” pour plus épaisse). Quelques fontes ne supportent que les épaisseurs “normal” et “bold”.

Style de l’écriture: de la fonte

La propriété font-style détermine si le texte doit être affiché normalement, en italique ou en oblique (penché) respectivement grâce à “normal”, “italic”, et “oblique” :

i {
    font-style: italic;
}

Alignement du texte

La propriété text-align contrôle l’alignement du texte, en définissant l’alignement à gauche, à droite, ou centré ou justifié (“left”, “right”, “center”, ou “justify”) :

h1 {
    text-align: center;
}
.signature {
    text-align: right;
}

Majuscule

La propriété text-transform modifie la casse du texte (autrement dit, elle permet d’afficher du texte en MAJUSCULES, minuscules ou en Capitales), comme le montre cet exemple :

h1 {
    text-transform: uppercase;
}

Les valeurs possibles sont “capitalize”, “uppercase”, “lowercase” ou “none”.

Décoration

La propriété text-decoration permet de faire apparaitre une ligne en dessous (“underline”), au dessus (“overline”), ou à travers (“line-through”) de votre texte. La valeur par défaut “none” supprime tout formatage. Voici, par exemple, comment barrer un texte en CSS :

del {
    text-decoration: line-through;
}
a {
    text-decoration: underline solid blue;
}

Cette propriété accepte optionnellement le style et la couleur de la ligne. Les valeurs du style de la ligne sont le même que les valeurs du style de bordure.

Indentation

La propriété text-indent permet de gérer l’indentation du texte. Elle accepte des valeurs absolues (en px) et des valeurs relative (en % ou em). Une valeur négative permet de décaler le texte vers le gauche.

p {
    text-indent: 6em;
}

Espacement

La propriété line-height permet de gérer la distance entre les lignes. Elle accepte des valeurs absolues (en px) ou relatives (sans unité).

La propriété letter-spacing permet de gérer l’espace entre les lettres tantdis que la propriété word-spacing permet de gérer l’espace entre les mots dans un texte.

Style des boites “boxe”

Le modèle de boîte

Le modèle de mise en page du HTML / CSS repose sur un principe de “boîtes” (en anglais: box-model). Le calcul de la taille, des propriétés (couleur, arrière-plan, forme du cadre) et de la position des boîtes est le rôle du moteur de rendu. En CSS, chacune de ces boîtes est décrite à partir d’un modèle standard qui permet de décrire le contenu de l’espace occupé par un élément.

Chaque élément d’un document est matérialisé par une boîte qui peut être ajustée grâce à des propriétés CSS spécifiques. Ces propriétés peuvent être représentées ainsi :

Modèle de boite en CSS
Modèle de boite en CSS. Par Mozilla Developer Network
La boîte de contenu (content)
La boîte de contenu à l’endroit où le contenu de l’élément est affiché. Ce contenu est le texte de l’élément ou les autres boîtes des éléments fils. La taille de la boîte de contenu est définie avec les propriétés CSS width (pour la largeur) et height (pour la hauteur).
La boîte de remplissage (padding)
La boîte de remplissage représente la marge intérieur d’une boîte. Elle correspond à la distance entre la boîte de contenu et la bordure. Cette distance est définie grâce à la propriété padding. Cette propriété est en fait une propriété « raccourcie » pour désigner quatre valeurs : padding-top, padding-right, padding-bottom et padding-left (dans cet ordre).
La bordure (border)
La bordure d’une boîte est une zone, visible ou non, qui représente la limite de la boîte. Par défaut, la taille de la bordure vaut 0, ce qui la rend invisible. La bordure est définie grâce à la propriété CSS border. Cette propriété est aussi une propriété raccourcie composée de border-width (l’épaisseur de la bordure), border-style (le style à appliquer pour la ligne de la bordure, généralement solid) et border-color (la couleur). Il est également possible de définir chaque côté séparément et il existe donc un ensemble de propriétés border-* pour chacun des côtés (top pour le haut, right pour la droite, bottom pour le bas et left pour la gauche).
La marge extérieure (margin)
La marge (extérieure) représente la distance qui doit séparer deux boîtes. La marge similaire au remplissage mais se situe à l’extérieur de la bordure. La propriété raccourcie est margin et les propriétés individuelles sont margin-top, margin-right, margin-bottom et margin-left.

Prenons un exemple pour illustrer ces différentes quantités :

<p>Une paragraphe</p>
<p>Une autre paragraphe</p>
/* Pour tous les paragraphes */

p {
    /* Ils auront exactement une largeur de 100px */
    width: 100px;
    /* Leur hauteur est définie automatiquement
       en fonction de la taille du contenu */
    height: auto;
    /* La distance entre le contenu et la bordure
       est 20px à droite et à gauche et est
       10px en haut et en bas */
    padding: 10px 20px 10px 20px;
    /* On définit une bordure noire, large de 5px */
    border: 5px solid black;
    /* La distance minimale entre un paragraphe
       et une autre boîte au-dessus ou en-dessous
       sera de 20px */
    margin: 20px 0 20px 0;
}

Les types de boîte

Tout ce que nous avons vu jusqu’à présent s’applique aux boîtes qui sont des blocs. Cependant, il existe d’autres types de boîte en CSS qui se comportent différemment. Le type de boîte qui s’applique pour un élément est déterminé par la propriété display. CSS fournit de nombreuses valeurs pour cette propriété. Dans cet article, nous nous concentrerons avant tout sur les trois valeurs basiques que sont block, inline, et inline-block

Une boîte block (ou bloc)
est définie comme une boîte qui va s’empiler sur d’autres boîtes (autrement dit, on crée une cassure de la ligne visuelle avant et après la boîte). Le modèle de boîte vu juste avant s’applique.
Une boîte inline (ou en ligne)
est l’opposée d’une boîte bloc : elle flotte dans le texte du document (autrement dit, elle ne crée pas de cassure de ligne visuelle avant et après la boîte et le contenu de cette boîte passera à la ligne selon le contenu qui l’entoure). Les propriétés du modèle de boîte s’appliquent mais n’impactent pas les boîtes environnantes.
Une boîte inline-block (en bloc et en ligne)
est quelque chose d’intermédiaire : le contenu flotte dans le document sans créer de cassure de ligne avant et après. Le contenu reste à l’intérieur de la boîte et la boîte ne suit pas les règles de saut à la ligne dicté par le contenu en dehors de la boîte. Enfin les propriétés du modèle de boîte s’appliquent à ces boîtes et cela impacte les boîtes environnantes.

Pour cacher un élément, on utilise la valeur “none” de la propriété display.

Prenons l’exemple suivant :

<!DOCTYPE html>
<html>

<head>
  <link href="css/display-types.css" rel="stylesheet" type="text/css" />
</head>

<body>
  <p>
    Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    <span class="inline">Mauris tempus turpis id ante mollis dignissim.</span> Nam sed dolor non tortor lacinia lobortis id dapibus nunc.
  </p>

  <p>
    Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    <span class="block">Mauris tempus turpis id ante mollis dignissim.</span> Nam sed dolor non tortor lacinia lobortis id dapibus nunc.
  </p>

  <p>
    Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    <span class="inline-block">Mauris tempus turpis id ante mollis dignissim.</span> Nam sed dolor non tortor lacinia lobortis id dapibus nunc.
  </p>
</body>

</html>

Le fichier display-types.css contient :

p {
    padding: 1em;
    border: 1px solid black;
}

span {
    padding: 0.5em;
    border: 1px solid green;
    /* On rend la boîte visible, quel que soit son type */
    background-color: yellow;
}

.inline {
    display: inline;
}

.block {
    display: block;
}

.inline-block {
    display: inline-block;
}

Le rendu du programme HTML est le suivant :

Bordure

La bordure supporte de multiples styles à travers la propriété border-style ou comme deuxième argument dans la propriété alias border.

La propriété border-radius permet de créer des bordures arrondies. Elle accepte une valeur en pixels qui va correspondre à la valeur du rayon de la bordure de tout ou de chaque coin.

Les bordures arrondis
Les bordures arrondis. Par Mozilla Developer Network

Prenons l’exemple suivant :

<!DOCTYPE html>
<html>

<head>
  <link href="css/border-radius.css" rel="stylesheet" type="text/css" />
</head>

<body>
  <p class="first">Une text avec bordure et un radius</p>
  <p class="second">Une text avec bordure et un radius</p>
  <p class="third">Une text avec bordure et un radius</p>
</body>

</html>
p {
    padding: 10px;
}

.first {
    border: 10px solid black;
    /* top-left | top-right | bottom-right | bottom-left */
    border-radius: 10px 40px 40px 10px;
}

.second {
    border: dashed;
    border-width: 2px 4px;
    /* tous les coins */
    border-radius: 40px;
}

.third {
    border: dotted;
    border-width: 10px 4px;
    /* top-left-and-bottom-right | top-right-and-bottom-left */
    border-radius: 10px 40px;
}

Couleur et image de fond

Le fond d’un élément HTML est géré à travers les propriétés backgroud-* ou leurs propriété alias backgroud :

Prenons l’exemple suivant :

<!DOCTYPE html>
<html>

<head>
  <link href="css/background-image.css" rel="stylesheet" type="text/css" />
</head>

<body>
  <p>Paragraphe</p>
  <p>Paragraphe</p>
  <p>Paragraphe</p>
  <p>Paragraphe</p>
  <p>Paragraphe</p>
  <p>Paragraphe</p>
</body>
</body>
body {
    background-color: yellow;
    background-image: url("../../assets/imgs/web101.png");
    background-repeat: repeat-x;
    background-size: auto 50%;
    background-attachment: fixed;
}

Mise en forme des tableaux

Bordure du tableau

Dans le chapitre précédent, on a discuté la construction des tableaux en HTML. On a utilisé l’attribut HTML border pour spécifier la largeur des bordures. Cette solution est obsolète depuis HTML5 en faveur de la solution CSS.

On va remplacer l’utilisation de l’attribut border par la propriété border du CSS.

<!DOCTYPE html>
<html>

<head>
  <link href="css/tableau-border-simple.css" rel="stylesheet" type="text/css" />
</head>

<body>
  <table>
    <thead>
      <tr>
        <th>Nom</th>
        <th>Prénom</th>
        <th>Age</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>Salhi</td>
        <td>Ali</td>
        <td>24</td>
      </tr>
      <tr>
        <td>Rkik</td>
        <td>Nouha</td>
        <td>23</td>
      </tr>
      <tr>
        <td>Chaaben</td>
        <td>Ahmed</td>
        <td>25</td>
      </tr>
    </tbody>
  </table>
</body>

</html>

Le contenu du fichier tableau-border-simple.css est :

td,
th {
    border: 1px solid black;
}

On remarque que les bordures sont autour de chacune des cellules. On peut modifier l’espacement entre les cellules et les bordures en utilisant la propriété border-spacing qui accepte une ou deux valeurs en pixel pour spécifier l’espacement horizontalement et verticalement.

table {
    border-spacing: 20px 5px;
}

td,
th {
    border: 1px solid black;
}

On peut coller ces bordures entre elles afin d’obtenir le même rendu du chapitre précédent en appliquant la propriété border-collapse à l’élément <table>.

La propriété border-collapse accepte comme valeur deux valeurs : “collapse” pour coller les bordures en une seule et “separate” pour afficher les bordures distinctement qui est la valeur par défaut.

table {
    border-collapse: collapse;
}

td,
th {
    border: 1px solid black;
}

Couleur des cellules

On peut changer les couleurs des cellules du tableau.

On va changer les couleurs et les marges ‘margin’ internes des lignes impaires du tableau précèdent (1, 2, …) en utilisant le sélecteur pseudo :nth-child(an+b). L’argument de ce sélecteur est une formule pour spécifier l’ensemble des éléments à sélectionner. Pour sélectionner les éléments impaires, la formule doit être 2n-1 ou bien le mot clé alias odd. Pour sélectionner les éléments paires, la formule doit être 2n ou le mot clé alias even.

Les cellules du tableau comme le reste des autres éléments supporte le pseudo classe :hover qui sera appliqué quand la souris est au dessus de l’élément.

table {
    border-collapse: collapse;
}

td,
th {
    border: 1px solid black;
    padding: 10px;
}

tbody tr:nth-child(odd) {
    background-color: #bbb;
}

td:hover {
    background: rgba(200, 200, 0, 0.4);
}

Supposons que l’age de Nouha et Ahmed ne sont pas saisis. La bordure et le fond de ces deux cellules seront rendus. On peut contrôler cette fonctionnalité en utilisant la propriété empty-cells. Elle accepte comme valeur deux mots clés: “show” pour rendre les bordures et le fond des cellules vide ou “hide” pour ne pas les rendre. Cette propriété ne fonctionne pas si les bordures sont collées avec la propriété border-collapse.

table {
    /* border-collapse: collapse; */
    empty-cells: hide;
}

td,
th {
    border: 1px solid black;
    padding: 10px;
}

tbody tr:nth-child(odd) {
    background-color: #bbb;
}

td:hover {
    background: rgba(200, 200, 0, 0.4);
}

Mise en Forme de d’en-tête et du pied

L’en-tête et le pied du tableau ont des mises en forme prédéfinies mais qui peuvent se différencier selon les navigateurs. On va définir notre propre mise en forme pour le tableau de l’exemple précédent qui sera le même entre tous les navigateurs.

table {
    border-collapse: collapse;
}

td,
th {
    border: 1px solid black;
    padding: 10px;
}

tbody tr:nth-child(odd) {
    background-color: #bbb;
}

td:hover {
    background: rgba(200, 200, 0, 0.4);
}

thead {
    background-color: tomato;
    color: white;
    text-transform: uppercase;
    font-family: monospace;
    font-size: 16px;
    font-weight: bold;
    text-align: center;
}

Les légendes “captions”

La propriété caption-side permet de gérer la position de la légende du tableau. Elle prend deux valeurs :

Les autres valeurs (comme “left”, “right”, …) ont étés absolètes depuis CSS2 en faveur de la propriété text-align.

Prenons comme exemple la structure HTML suivante, la légende même définie à l’ouverture de l’élément <table>, elle sera positionnée en bas en utilisant la propriété caption-side :

<!DOCTYPE html>
<html>

<head>
  <link href="css/tableau-caption-side.css" rel="stylesheet" type="text/css" />
</head>

<body>
  <table>
    <caption>Liste des étudiants</caption>
    <thead>
      <tr>
        <th>Nom</th>
        <th>Prénom</th>
        <th>Age</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>Salhi</td>
        <td>Ali</td>
        <td>24</td>
      </tr>
      <tr>
        <td>Rkik</td>
        <td>Nouha</td>
        <td>23</td>
      </tr>
      <tr>
        <td>Chaaben</td>
        <td>Ahmed</td>
        <td>25</td>
      </tr>
    </tbody>
  </table>
</body>

</html>
table {
    border-collapse: collapse;
}

td,
th {
    border: 1px solid black;
    padding: 10px;
}

thead {
    background-color: tomato;
}

table caption {
    caption-side: bottom;
    font-weight: bold;
    font-size: 18px;
    line-height: 1.8em;
}

Mise en forme des formulaires

La formulaire est un élément important de l’interaction avec l’utilisateur. Une mise en forme claire et attractive est trés nécessaire pour assurer une meilleure expérience utilisateur. Dans ce cours, on va étudier un scénario d’un formulaire simple et les possibilité de l’améliorer.

Au cours de cet paragraphe, on supposera que le formulaire suivant est pour la saisie de l’identité de l’utilisateur et quelques informations d’un produit.

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8" />
  <title>Rapport</title>
</head>

<body>
  <form>
    <fieldset id="sec-identite">
      <legend>Identité</legend>
      <div>
        <label for="nom">Nom :</label>
        <input type="text" id="nom" required />
      </div>
      <div>
        <label for="email">Email :</label>
        <input type="email" id="email" placeholder="me@exemple.com" required />
      </div>
    </fieldset>
    <fieldset id="sec-produit">
      <legend>Information Produit</legend>
      <div>
        <label>Genre :</label>
        <ul>
          <li>
            <label>
              <input type="radio" name="genre" value="metal" />
              Métal
            </label>
          </li>
          <li>
            <label>
              <input type="radio" name="genre" value="bois" />
              Bois
            </label>
          </li>
          <li>
            <label>
              <input type="radio" name="genre" value="plastique" />
              Plastique
            </label>
          </li>
        </ul>
        <div>
          <label for="description">Description :</label>
          <textarea id="textareac"></textarea>
        </div>
    </fieldset>
    <button>Envoyez</button>
  </form>
</body>

</html>

Mise en forme de fieldset

On commencera par la mise en forme de <fieldset> et la légende.

legend {
    font-size: large;
    font-weight: bold;
    color: tomato;
}

fieldset {
    border: 1px dashed gray;
    padding: 10px;
    margin: 10px 0;
    border-radius: 15px;
}

Mise en page du formulaire

Ensuite, on va mettre en page notre formulaire :

legend {
    font-size: large;
    font-weight: bold;
    color: tomato;
}

fieldset {
    border: 1px dashed gray;
    padding: 10px;
    margin: 10px 0;
    border-radius: 15px;
}

fieldset>div {
    width: 100%;
    padding: 5px;
}

div>label {
    width: 30%;
    display: inline-block;
    text-align: right;
    font-weight: bold;
    font-size: small;
}

label+input,
label+textarea {
    display: inline-block;
    width: 60%;
}

ul {
    display: inline-block;
    width: 60%;
    vertical-align: top;
    list-style: none;
    margin: 0;
    padding: 0;
}

textarea {
    vertical-align: baseline;
    resize: none;
    height: 5rem;
}

Bouton d’envoi

Comme bonus, on va changer la mise en forme du bouton d’envoi.

Le bouton sera aligné à droite en utilisant la propriété float. L’apparence du bouton sera changée en utilisant les propriétés du fond, de la bordure et du texte.

On va utiliser le pseudo classe :hover pour changer le couleur du fond progressivement en utilisant la propriété transition.

Pour ajouter une ombre autour du bouton, on utilise la propriété box-shadow qui accepte une liste de définitions d’ombres séparées par des virgules, chacune contient les coordonnées de décalage de l’ombre en axe x et axe y, le rayon de flou (optionnel), le rayon d’étalement (optionnel) et finalement la couleur (optionnelle).

legend {
    font-size: large;
    font-weight: bold;
    color: tomato;
}

fieldset {
    border: 1px dashed gray;
    padding: 10px;
    margin: 10px 0;
    border-radius: 15px;
}

fieldset>div {
    width: 100%;
    padding: 5px;
}

div>label {
    width: 30%;
    display: inline-block;
    text-align: right;
    font-weight: bold;
    font-size: small;
}

label+input,
label+textarea {
    display: inline-block;
    width: 60%;
}

ul {
    display: inline-block;
    width: 60%;
    vertical-align: top;
    list-style: none;
    margin: 0;
    padding: 0;
}

textarea {
    vertical-align: baseline;
    resize: none;
    height: 5rem;
}

button {
    float: right;
    background-color: #008CBA;
    border: none;
    color: white;
    padding: 10px 20px;
    font-size: 16px;
    box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.2);
    transition: 1s;
}

button:hover {
    background-color: #007095;
}

Validation de contenu

CSS3 fournit des ensembles de pseudo classes reliées aux états de validation des éléments du formulaire.

legend {
    font-size: large;
    font-weight: bold;
    color: tomato;
}

fieldset {
    border: 1px dashed gray;
    padding: 10px;
    margin: 10px 0;
    border-radius: 15px;
}

fieldset>div {
    width: 100%;
    padding: 5px;
}

div>label {
    width: 30%;
    display: inline-block;
    text-align: right;
    font-weight: bold;
    font-size: small;
}

label+input,
label+textarea {
    display: inline-block;
    width: 60%;
    /*
    border: 1px solid #DDD;
    line-height: 1.8em;
    */
}

ul {
    display: inline-block;
    width: 60%;
    vertical-align: top;
    list-style: none;
    margin: 0;
    padding: 0;
}

textarea {
    vertical-align: baseline;
    resize: none;
    height: 5rem;
}

button {
    float: right;
    background-color: #008CBA;
    border: none;
    color: white;
    padding: 10px 20px;
    font-size: 16px;
    box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.2);
    transition: 1s;
}

button:hover {
    background-color: #007095;
}

input[type=email],
input[type=text],
textarea {
    border: 1px solid #333;
    font-size: 90%;
}

/* This is our style for the invalid fields */

input:invalid {
    border-color: #900;
    background-color: #FDD;
}

input:focus:invalid {
    outline: none;
}

CSS Avancé

Effets Graphiques

Le CSS3 permet de modifier l’apparence d’une image à l’aide des fonctions de filtrage de la propriété filter. Cette propriété admet un ensemble de fonctions dont les principales sont :

Effets de transition

Effets d’animation

Référencement

Référencement

Le référencement est l’ensemble des techniques qui permettent d’inscrire un site dans les moteurs de recherche ou dans les annuaires. Le référencement est souvent associé avec le positionnement.

Il existe deux types de référencements :

Terminologie

L’annuaire
il fonctionne telle une encyclopédie : les sites y sont classés par thème et par ordre alphabétique.
Le moteur de recherche
c’est un système automatique qui parcourt l’Internet et ajoute les sites et les pages qu’il rencontre à sa base.
Le positionnement
c’est le fait qu’un site donné soit en haut des résultats de recherche. Tout site peut être référencé (dans la base des outils de recherche) mais mal positionné (n’est pas présent dans les premiers résultats d’une recherche sur un mot spécifique)

Importance du référencement Web

Le nombre des utilisateurs du Web est des milliards d’utilisateurs dont la plupart se basent sur les moteurs de recherche pour trouver et accéder à l’information.

Donc, le référencement Web est une étape incontournable pour augmenter le nombre de visiteur. Il permet de faire apparaître un site Web suite à des requêtes ce qui assure qu’un site donné soit mieux placé que ses concurrents.

Un site Internet sans référencement dans les moteurs de recherche c’est l’équivalent d’un véhicule sans roue. En effet, un site internet n’est qu’un support de communication comme les autres, s’il n’est pas mis en avant (dans les dix premiers), il restera introuvable et donc sans lecteur. Il faut aussi savoir qu’un référencement ne se fait pas en une seule fois. Il faut surveiller la position de son site régulièrement.

Les techniques de référencement naturelles

Il existe quelques techniques de conception de site permettant de donner plus d’efficacité au référencement des pages d’un site :

Le contenu de la page Web

Les moteurs de recherche et les annuaires cherchent avant tout à fournir un service de qualité à leurs utilisateurs en leur donnant les résultats les plus pertinents en fonction de leur recherche ainsi il est indispensable de s’attacher à créer un contenu consistant et original.

Un contenu original ne signifie pas un contenu qui n’est proposé par aucun autre site, cela serait une mission impossible. En revanche, il est possible de traiter un sujet et de lui ajouter une valeur et ceci en approfondissant certains points, en l’organisant d’une manière originale et/ou en mettant en relation différentes informations.

D’autre part, toujours dans l’objectif de fournir le meilleur contenu aux visiteurs, les moteurs de recherche et les annuaires accordent de l’importance à la mise à jour des informations. Le fait de mettre à jour les pages du site permet donc d’augmenter l’indice accordé par le moteur au site.

Le titre de la page

Il faut veiller à ce que les titres des pages Web soient pertinents et contiennent des mots intéressants pour le référencement et qu’ils soient différents sur chaque page. Les titres des pages Web sont utilisés par les moteurs de recherche pour deux raisons :

– L’indexation des pages – L’affichage de votre page dans les résultats du moteur de recherche

L’insertion d’un titre se fait comme suit :

<tilte>le titre de la page</title>

Le titre doit décrire le plus précisément possible le contenu de la page Web et sa longueur totale recommandée ne doit pas dépasser 60 de caractères soit 6 ou 7 mots au maximum. Le titre est d’autant plus important qu’il s’agit de l’information qui s’affichera dans les favoris de l’internaute, ainsi que dans son historique.

L’URL de la page

Certains moteurs de recherche accordent une importance capitale aux mots-clés présents dans l’URL, notamment les mots-clés présents dans le nom de domaine. Il est donc conseillé de mettre un nom de fichier adapté, contenant un ou deux mots-clés, pour chacun des fichiers du site plutôt que des noms du genre “page1.html”, “page2.html”, etc.

Le corps de la page

Afin de valoriser au maximum le contenu de chaque page il est nécessaire que celui-ci soit transparent (par opposition aux contenus d’un site développé par exemple avec flash), c’est-à-dire qu’il comporte un maximum de texte indexable par les moteurs.

Les cadres (frames) sont fortement déconseillés car ils empêchent parfois l’indexation du site dans de bonnes conditions.

L’utilisation des titres et des sous titres sont très important pour le référencement. Il est intéressant aussi d’utiliser une barre de maillage ou bien un menu qui permet de naviguer entre toutes les rubriques principales du site : l’internaute peut ainsi naviguer facilement et savoir dans quel page il se trouve et cela augmente aussi le maillage des pages du site ce qui est très apprécié par les moteurs de recherche.

Les balises <meta>

Les méta données sont des informations situées au sein d’un document afin de le décrire. Les métadonnées sont ainsi utilisées par les moteurs de recherche lors du référencement de la page Web. Grâce à ces balises non affichées, il est ainsi possible de renseigner des informations relatives à la page où au site afin de mieux en décrire le contenu, en particulier des informations sur le ou les auteur(s) du document, sa limite de validité, la langue utilisée, etc.

On appelle ainsi «méta tags» (en français «méta-balises») des balises spéciales situées dans l’en-tête du document HTML (c’est-à-dire la balise <head>, située avant la balise <body>), afin de fournir des informations permettant aux moteurs de recherche d’indexer la page Web.

Exemple :

<!DOCTYPE html>
<html>
  <head>
    <title>ISET Sfax</title>
    <meta name="keywords" content="ISET Sfax, INSTITUT SUPERIEUR ETUDES
                TECHNOLOGIQUES, TUNISIE, Sfax, STUDIES, TUNISIA">
    <meta name="description" content="Le site Web de l'institut superieur des
                                      etudes technologiques de Sfax">
  </head>
  <body>
    <!-- ... -->
  </body>
</html>

Les différents types de balises méta

On distingue cinq types de méta tags :

<meta name="nom du tag" content="attribut" />
<meta charset="utf-8" />
<meta http-equiv="nom du tag" content="attribut" />
<meta itemprop="nom du propriété" content="valeur" />
<meta property="nom du propriété" content="valeur" />

Exemple :

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <meta name="description" content="Un démo des meta données en HTML" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  </head>
  <body>
  </body>
</html>

Il est possible de renseigner plusieurs métas les uns après les autres dans l’en-tête de la page.

Exemples de balises méta name

author

Elle permet de présenter des informations sur l’auteur de la page

<meta name="author" content="Sawssen Hariz Abid">

Elle permet de référencer des informations de droits d’auteur

<meta name="copyright" content="Sawssen Hariz Abid 2017-2018, All Rights Reserved." />

description

Elle permet de décrire le contenu d’une page Web par un court texte son contenu apparait dans les pages de résultats de certains outils de recherche. Voici quelques conseils pour créer la balise méta description :

<meta name="description" content="Le site Web de l'institut superieur des
                                      etudes technologiques de Sfax">

generator

Elle permet de décrire le nom de logiciel utilisé pour générer la page Web si la création de la page était automatisée.

keywords

Elle permet de décrire le contenu d’une page Web par une liste de mots clés. Voici quelques conseils pour créer la balise meta keywords :

<meta name="keywords" content="ISET Sfax, INSTITUT SUPERIEUR ETUDES
    TECHNOLOGIQUES, TUNISIE, Sfax, STUDIES, TUNISIA">

robots

Elle permet de spécifier le comportement du moteur de recherche à la rencontre de la page (indexation, suivi de liens…). Voici un tableau présentant les différentes valeurs de l’attribut content du robots :

IndexLe “robots” indexera la page.
NoindexLe “robots” n’indexera pas la page.
FollowLes liens seront indexés et suivis.
NofollowLes liens ne seront pas indexés, ni suivis.
AllLes liens ne seront pas indexés, ni suivis.
NoneLe “robots” passe mais n’indexe pas la page ni les liens
<meta name="robots" content="index, follow">

Liens hypertextes

Afin de donner le maximum de visibilité à chacune des pages d’un site, il est conseillé d’établir des liens internes entre ces pages pour permettre aux robots indexeurs (appelés crawlers) de parcourir la totalité de l’arborescence du site. Ainsi, il peut être intéressant de créer une page présentant l’architecture du site et contenant des pointeurs vers chacune des pages qui le constitue.

D’autre part, il est important d’avoir des liens externes pointant vers le site Web car cela augmente d’une part le trafic et d’autre part la visibilité de ce site. Certains moteurs de recherches prennent en compte le nombre et la qualité des liens pointant vers un site pour caractériser son niveau de pertinence (c’est le cas de Google avec son indice appelé PageRank).

L’Attribut alt de l’image

Les images du site sont opaques pour les moteurs de recherche, c’est-à-dire qu’ils ne sont pas capables d’en indexer le contenu, il est donc conseillé de mettre un attribut alt sur chacune des images, permettant d’en décrire le contenu.

Voici un exemple de balise <img> avec l’attribut alt :

<img src="images/logo.png" alt="logo de l'ISET Sfax">

Le fichier robots.txt

Le mot robot ou encore spider désigne un programme circulant sur le Web dédié au traitement de documents Web en vue de leur indexation et intégration dans le moteur de recherche. Chaque moteur de recherche est caractérisé par un robot.

Présentation de robots.txt

Sur un site Web, on essaie de faire en sorte que ces pages soient indexées au mieux par les robots des moteurs de recherche. Mais il peut également arriver que certaines de ces pages soient confidentielles, (ou en travaux) ou en tout cas ils ne doivent pas être diffusés largement sur les moteurs de recherche. Il faut alors empêcher les robots de les prendre en compte.

Cela peut se faire à l’aide d’un fichier texte, appelé robots.txt, présent sur la racine du site. Ce fichier va donner des indications au spider du moteur qui va vouloir explorer le site : ce qu’il peut faire ou ne doit pas faire sur le site.

Dès que le spider d’un moteur arrive sur un site (par exemple http://monsite.com/), il va rechercher le document présent à l’adresse http://monsite.com/robots.txt, avant d’effectuer la moindre indexation du document. Si ce fichier existe, il le lit et suit les indications inscrites. S’il ne le trouve pas, il commence son travail de lecture et d’enregistrement de la page qu’il est venu visiter ainsi que de celles qui peuvent y être liées, considérant que rien ne lui est interdit.

Structure du fichier robots.txt

Il ne doit exister qu’un seul fichier robots.txt sur un site, et il doit se trouver au niveau de la racine du site. Le nom du fichier (robots.txt) doit toujours être créé en minuscules. Voici un exemple de structure d’un fichier robots.txt :

User-agent: *
Disallow: /cgi-bin/
Disallow: /settings/
Disallow: /profile/edit.html
Disallow: /reset-password.html

Dans cet exemple :

Voici quelques commandes très classiques et importantes du fichier robots.txt :

User-agent: googlebot
Disallow:
User-agent: *
Disallow: /
# Permet au spider de google de tout aspirer, mais refuse les autres robots.

sitemap.xml et robots.txt

Afin d’aider les moteurs de recherche (Google, Yahoo,…) à indexer le site Web, on précise dans le fichier robots.txt l’arborescente du site décrite dans un fichier sitemap.xml. Le fichier sitemap.xml est un document XML permettant notamment de déclarer les URL d’un site Web dans l’objectif d’une indexation par les robots des moteurs de recherche.

On peut ajouter par exemple dans le fichier robots.txt l’instruction suivante :

sitemap: http://monsite.com/sitemap.xml

Les logiciels de mesure d’audience

Les logiciels de mesure d’audience peuvent fournir des informations précieuses pour analyser et suivre les effets d’un référencement (nombre de visites, profil des visiteurs, mots-clés …). En voici quelques uns :

Google Analytics

Google Analytics n’est pas un logiciel mais un service Internet qui permet de suivre avec précisions l’évolution du trafic d’un site Web. Son principal avantage réside dans le fait qu’il ne nécessite aucune installation coté serveur. Il suffit seulement d’insérer un petit code sur chacune des pages de son site.

Les statistiques proposés sont facilement exploitables et certaines vous permettent de mesurer l’impact de votre référencement : analyse des sites affluents (sites, moteurs de recherche), identification des mots-clés,…

Matomo (Piwik)

Logiciel très répandu chez les hébergeurs de sites Web qui permet de visualiser et de mesurer la fréquentation de son site Web. On trouve aussi des statistiques (sous formes d’histogrammes et de tableaux) concernant les référents et moteurs de recherche qui ont permis d’atteindre un site donné.

Remarque :

Il existe plusieurs exemples de logiciel d’aide au référencement tels que : Submitic, The SkyFox Promotion, Yooda seeUrank, GenerMTag, GSA Auto SoftSubmit, AdaUrl,…

Mais, il est déconseillé d’utiliser ce type de logiciels car certains moteurs de recherche rejetteront les sites qui sont référencés à l’aide des logiciels de référencement automatique

Annexe

Bibliographie

Sites en ligne

Livres

Outils de développement

À Propos

Ce cours est écrit par Sawssen Hariz pour être une référence pour les étudiants.

Il est inspiré d’un grand nombre de cours et de guides en lignes. Je cite principalement :

La mise en page de notre site est basée sur la mise en page du site de cours Game Programming.