Note : ce cours se veut une introduction à XHTML et CSS pour des étudiants de première année universitaire qui possèdent une base d'algorithmique et de programmation en langage Pascal.
Merci à André Rossi pour la relecture du cours permettant ainsi son amélioration et la correction de nombreuses petites fautes.
Le cours est organisé en trois parties :
Le World Wide Web (WWW), littéralement la « toile (d’araignée) mondiale », communément appelé le web, le Web, et parfois la toile, est un système hypertexte public fonctionnant sur internet qui permet de consulter, avec un navigateur, des pages accessibles sur des sites. L’image de la toile d'araignée vient des hyperliens qui lient les pages web entre elles.
source : Wikipédia
Les sites Web sont aujourd'hui devenus un moyen incontournable et essentiel pour la diffusion, le traitement et la recherche de l'information (Wikipédia, Yahoo, Google, Bing), la communication (Intel, Apple, AMD, Oracle, gouv.fr, elysee.fr, boursedeparis.fr, France Télécom, SFR, Free) et le commerce (SNCF, cdiscount, Amazon, ...).
La façon dont est conçue un site est importante et peut soit séduire l'utilisateur, soit le rebuter.
La façon dont vous concevez votre site peut également révéler certains aspects de votre personnalité.
Le fonctionnement du web repose en grande partie sur un modèle client - serveur :
Dans le cas du développement web, le serveur héberge les pages web des utilisateurs. Le serveur doit être puissant car il doit traiter des centaines, voire des milliers de requêtes par seconde.
Le client accède aux pages web en spécifiant une URL (Uniform Resource Locator). Comme dans l'exemple suivant :
http://www.info.univ-angers.fr/pub/richer/index.html
on distingue :
En retour le serveur enverra le contenu du fichier qui sera affiché dans le navigateur, ou s'il ne trouve pas le fichier, génèrera une erreur dite 404 (Not Found).
Pour mettre à disposition ses propres pages web, on peut :
Par exemple, sous Linux Ubuntu, le serveur Apache permet de publier ses pages web dans le répertoire /var/www
Par défaut le serveur crée une page index.html dans le répertoire /var/www et on peut y accèder en saisissant l'URL http://localhost dans un navigateur sur sa machine.
Généralement, on crée un sous-répertoire pub et on utilise des liens symboliques vers le répertoire public_html des utilisateurs :
ls -al /var/www/pub
lrwxrwxrwx 1 root root 25 mai 18 2012 richer -> /home/richer/public_html/
Dès lors, je peux accèder à mes propres pages par : http://localhost/pub/richer et stocker mes fichiers dans /home/richer/public_html/
Il existe des solutions simples à installer pour mettre en place un serveur web sur sa machine :
Ces solutions contiennent :
XHTML ou eXtensible HyperText Markup Language est un langage à balises issu de XML, qui dérive lui-même des concepts du SGML (Standard Generalized Markup Language) conçu à partir de 1969 par Charles Goldfarb travaillant à l'époque chez IBM. SGML est employé dans les industries de la documentation et de l'édition.
La compréhension du langage repose sur au moins deux points :
L'idée fondamentale du XHTML est l'utilisation de balises pour ajouter un contenu sémantique à un texte. Par exemple :
On retrouve la phrase initiale agrémentée d'informations complémentaires :
Le langage XHTML est l'application de ce principe à la description de pages web.
XHTML 1.0 (2001) est une évolution de HTML version 4.01 basée sur XML. La version XHTML 2.0 qui a été développée pendant près de 8 ans a été abandonnée en 2009 à la faveur de XHTML 5 (2012). XHTML 2.0 n'était pas rétro-compatible avec HTML 4.
Aujourd'hui on parle de manière équivalente de HTML 5 ou XHTML 5. XHTML est simplement plus restrictif dans sa syntaxe. On parle alors de (X)HTML.
Parmi les principaux éléments liés à XHTML 5, on note :
Les conventions sont les suivantes :
Les fichier (X)HTML prennent l'extension .html ou (parfois .htm), il existe d'autres extensions notamment lorsque l'on utilise des langages de script pour dynamiser les pages web :
La structure d'une page web est la suivante :
En fonction de la version HTML / XHTML, on utilisera un préambule différent :
On voit rapidement qu'il est plus facile d'utiliser XHTML 5.
Voici un exemple de page :
Tous les éléments possèdent des règles définissant dans quel autre élément (parent) ils peuvent être placés, et quels autres éléments (enfants) ils peuvent contenir.
En outre certaines balises sont unitaires on dit également auto-fermantes, c'est-à-dire des éléments vides et ne doivent rien contenir du tout excepté des attributs. C'est le cas de <img /> ou <br /> :
<img src="..." alt="..." />
<br />
On ne peut pas avoir :
<img src="..." alt="..." >
....
</img >
Voyons à présent les balises liées à la structuration du texte.
Ce sont les balises <h1> à <h6> qui permettent de structurer le texte (titre, section, sous-section, ...) >>.
Les paragraphes sont introduits par la balise <p>.
A l'intérieur d'un paragraphe on peut utiliser des balises de mise en forme par défaut :
On distingue trois types de listes :
voir un exemple.
Les liens hypertextes sont introduits par la balise <a> qui entoure généralement du texte ou une image et qui contient l'attribut suivant :
Page appelante :
suivre ce <a href="http://www.info.univ-angers.fr/pub/richer/index.php">lien</a>
ou avec une ancre :
suivre ce <a href="http://www.info.univ-angers.fr/pub/richer#COURS">lien</a>
Page appelée avec élément doté d'un identifiant :
<h1 id="COURS">Cours <h1>
Par le passé (HTML 4) on utilisait l'attribut name avec la balise a pour réaliser une ancre.
<a name="COURS">Cours </a>
Les images sont introduites par la balise <img /> qui est une balise unitaire et les attributs :
<img src="frenchflag.gif" alt="drapeau français"
title="Mon pays" width="300" height="200" />
Les tableaux sont introduits grâce à la balise <table> ... </table> :
En XHTML 5, le format a été étendu avec des balises thead, tfoot, tbody, caption : >>
Les formulaires sont introduits grâce à la balise <form> ... </form>. Ils permettent de saisir différents types de champs qui seront envoyés au serveur.
Le formulaire possède trois attributs :
voir un exemple.
Différents types de champs peuvent être utilisés :
On peut également organiser les éléments du formulaire en les regroupant dans une balise <fieldset> ... </fieldset>
La balise <label for="..." > texte </label> permet d'introduire le texte lié à un champ.
Utilisez l'attribut for afin qu'un clic sur le label "Entrez un texte" amène la souris dans la zone de saisie.
<label for="txt">Entrez un texte : </label>
<input type="text" value="Hello world" id="txt" />
On utilise la balise unitaire <input ... /> et on définit les attributs suivants :
On notera qu'un champ hidden n'apparaît pas, il sert à contenir de l'information qui sera traitée par la suite.
On utilise la balise <textarea> value </textarea> et on définit les attributs suivants :
La valeur du champ est placée à l'intérieur des balises.
Pour empêcher le redimensionnement d'un textarea on peut utiliser l'attribut style="resize: none;" :
On utilise la balise <select> ... </select> et on définit les attributs suivants :
Les possibilités de choix sont décrites par des balises <option value="1"> texte </option>. On peut utiliser l'attribut selected qui permet de choisir l'option qui sera affichée par défaut.
On peut en outre faire de choix multiples (attribut multiple) ou grouper les options (balise <optgroup> ... </optgroup>).
On utilise, comme pour le texte, la balise unitaire <input ... /> et on définit les attributs suivants :
On utilise, comme pour le texte, la balise unitaire <input ... /> et on définit les attributs suivants :
Il existe deux manières de les introduire :
<input type="submit" value="Envoyer" />
<input type="reset" value="RAZ" />
<button type="submit"> Envoyer </button>
On peut empêcher la modification d'un champ de deux manières différentes :
Elle permet de structurer la page en différentes zones (éventuellement imbriquées) auxquelles on va appliquer un style (CSS) :
Il faut commencer à réfléchir au contenu du site et au public visé : recettes de cuisine, constructeur automobile, informations, ....
On élabore ensuite la structure de la page : Free CSS Templates
Les CSS ou Cascading Style Sheets permettent de mettre en forme le contenu XHTML.
Un aperçu des possibilités du CSS nous est donné par le site CSS Zen Garden.
Les CSS permettent notamment de modifier :
La version actuelle des CSS est la version 3, liée à (X)HTML 5.
Chaque élément de la page est défini par :
Voir w3schools.boxmodel
On a vu que certaines balises (X)HTML peuvent contenir d'autres balises. En CSS cette notion est liée à l'affichage qui peut être de type block ou inline :
- Les éléments de rendu CSS block se placent l'un en dessous de l'autre par défaut (comme un retour chariot). Par exemple: une suite de paragraphes (balise <p>). Par ailleurs, un élément "bloc" occupe automatiquement, par défaut, toute la largeur disponible dans son conteneur et peut être dimensionné à l'aide des propriétés telles que width, height, min-width, ou min-height,...
- Les éléments de rendu inline se placent toujours l'un à côté de l'autre afin de rester dans le texte (par exemple la balise <strong>). Par défaut, il n'est pas prévu qu'ils puissent se positionner sur la page (même si cela est possible), ni de leur donner des dimensions (hauteur, largeur, profondeur) : leur taille va être déterminée par le texte ou l'élément qu'ils contiennent. Certaines propriétés de marges peuvent être appliquées aux éléments, comme les marges latérales.
Source : alsacreations
On peut modifier le positionnement en utilisant la propriété display avec les valeurs block ou inline.
Les grandeurs sont définies en fonction de l'unité qui les suivent : w3schools.units
Il existe quatre possibilités :
<link rel="stylesheet" type="text/css" href=".../style.css" />
<style type="text/css">
h1 {
color: red;
}
</style>
<h1 style="color:red;">
on changera uniquement le style à l'endroit modifié
<h1 class="rouge">
on changera uniquement le style à l'endroit modifié et il faut que rouge soit définit
dans un fichier de style ou dans la partie head de la page XHTML
Le format d'une règle CSS est très simple :
selecteur {
propriete1 : valeur1;
propriete2 : valeur2;
...
}
Les propriétés CSS d'une balise sont héritées par ses descendants (d''où le terme Cascading = en cascade).
sélecteur | description |
h1 | balise (X)HTML |
h1, h2 | les balises h1 et h2 |
p em | balise em à l'intérieur d'un paragraphe |
.rouge | définition d'une classe (ex <p class="rouge"> ... <p>) |
#menu | définition du style d'un identifiant (ex. <div id="menu">..<div>) |
#menu > p | tout paragraphe descendant direct de menu |
a:link | pseudo classe |
p:first-child | premier paragraphe |
h1+p+p | second paragraphe dans un enchaînement h1 suivi de deux paragraphes |
input[type=text] | champ de formulaire de type text |
Par exemple div.menu p em:first-letter signifie la première lettre de la balise em à l'intérieur d'un paragraphe contenu dans un div de classe menu.
Voici un autre exemple : ici, toute balise em qui découle directement de #ce_paragraphe apparaitra en rouge et en majuscule.
#ce_paragraphe > em {
color:red;
text-transform:uppercase;
}
<p id="ce_paragraphe">Voici de <em>l'italique</em>. Puis une balise span est ouverte, <span>on remet de <em>l'italique</em>, et on referme la balise span</span>. Enfin, on remet de <em>l'italique</em>.</p>
Le résultat obtenu est que le premier et le troisième <em> apparaissent en rouge et en majuscule, alors que ce n'est pas le cas pour le second qui est à l'intérieur d'un span :
Voici de l'italique. Puis une balise span est ouverte, on remet de l'italique, et on referme la balise span. Enfin, on remet de l'italique.
On utilise color pour la couleur de la police par exemple et background-color pour la couleur du fond.
A noter : background permet également de définir une image de fond.
Les éléments apparaissent dans l'ordre de la page, cependant on peut les positionner de différentes façons :
div#menu {
position: fixed;
top : 100px;
right: 10px;
width : 150px;
height; 200px;
}
div#menu {
position: relative;
top : 10px;
left: -20px;
}
div#menu {
position: absolute;
top : 100px;
left: 100px;
}
On peut également utiliser la propriété float avec l'une des valeurs suivantes : none, left, right ou inherit (hérité du parent) pour modifier le positionnement des éléments de type box.
Pour mettre fin à la propriété float on utilise :
<div style="clear: both;"></div>
La possibilité est offerte de pouvoir tester si votre page est conforme aux standards en vigueur :