Support de cours - Lita
Support de cours - Lita
Support de cours - Lita
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
L1 Isfates sg-log<br />
Introduction au développement web<br />
Html 5 et Css 2.1 +<br />
Vincent Demange<br />
2011 – 2012 (S2)<br />
Table <strong>de</strong>s matières<br />
1 Introduction 3<br />
2 Html 5<br />
1 Principes <strong>de</strong> base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6<br />
1.1 Les balises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6<br />
1.2 Les attributs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6<br />
1.3 L’imbrication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7<br />
1.4 Cas particuliers . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7<br />
1.5 Distinction co<strong>de</strong> et rendu . . . . . . . . . . . . . . . . . . . . . . . 8<br />
2 Un peu <strong>de</strong> technique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8<br />
2.1 Type du document . . . . . . . . . . . . . . . . . . . . . . . . . . 8<br />
2.2 Balises html . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8<br />
2.3 Balises head et body . . . . . . . . . . . . . . . . . . . . . . . . . 9<br />
2.4 Balises head . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9<br />
2.5 Les URL : adresses d’internet . . . . . . . . . . . . . . . . . . . . 10<br />
3 Passons à la pratique ! . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11<br />
3.1 Les listes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11<br />
3.2 Les tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13<br />
3.3 Les liens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15<br />
3.4 Sélection <strong>de</strong> balises usuelles . . . . . . . . . . . . . . . . . . . . . 16<br />
3 Css D&Co 19<br />
1 Principes <strong>de</strong> base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20<br />
1.1 Structure d’une règle Css . . . . . . . . . . . . . . . . . . . . . . 20<br />
1.2 Associer Html et Css . . . . . . . . . . . . . . . . . . . . . . . . 20<br />
1.3 Quelques sélecteurs . . . . . . . . . . . . . . . . . . . . . . . . . . 21<br />
1.4 Casca<strong>de</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23<br />
1.5 Regroupement <strong>de</strong> propriétés . . . . . . . . . . . . . . . . . . . . . 24<br />
2 Éléments <strong>de</strong> pratique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24<br />
2.1 Les couleurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.2 Les longueurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25<br />
2.3 Les polices <strong>de</strong> caractères . . . . . . . . . . . . . . . . . . . . . . . 26<br />
3 Toujours plus, encore plus . . . . . . . . . . . . . . . . . . . . . . . . . . 27<br />
3.1 Sélecteurs <strong>de</strong> pseudo-classes . . . . . . . . . . . . . . . . . . . . . 27<br />
3.2 Combinaison . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28<br />
4 Css mise en boîte 29<br />
1 Flux normal : en-ligne ou bloc . . . . . . . . . . . . . . . . . . . . . . . . 29<br />
2 Modèle <strong>de</strong> boîte (box mo<strong>de</strong>l) . . . . . . . . . . . . . . . . . . . . . . . . . 30<br />
2.1 Application : centrage horizontal . . . . . . . . . . . . . . . . . . 31<br />
3 Les types <strong>de</strong> positionnement . . . . . . . . . . . . . . . . . . . . . . . . . 31<br />
4 Éléments génériques div et span . . . . . . . . . . . . . . . . . . . . . . . 36<br />
5 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37<br />
5 Bonus 38<br />
1 Lettrine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38<br />
2 Notes <strong>de</strong> marge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38<br />
3 Mise en page complète . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40<br />
2
1 Introduction<br />
L’objectif <strong>de</strong> ce <strong>cours</strong> est d’introduire une méthodologie et une rigueur propres au<br />
développement informatique ; à savoir la séparation du fond et <strong>de</strong> la forme, et le respect<br />
<strong>de</strong> règles strictes et imposées. En effet, en bon bureaucrate, un ordinateur a besoin d’un<br />
langage clair et sans ambiguïté afin d’être guidé dans les tâches qu’on lui soumet. C’est<br />
l’objectif <strong>de</strong>s langages qui seront utilisés.<br />
Nous allons nous concentrer sur <strong>de</strong>ux « langages » en particulier : Html et Css.<br />
Le premier servira à la <strong>de</strong>scription du contenu d’un document, tandis que le second<br />
est consacré à sa mise en forme, en général à son apparence visuelle. Cette séparation<br />
fond/forme est très utile lorsque les projets sont importants, et <strong>de</strong>vient indispensable si<br />
plusieurs personnes spécialisées y interviennent.<br />
En tant qu’une introduction au domaine, nous laisserons notre intuition et nos préjugés<br />
nous gui<strong>de</strong>r dans l’acceptation <strong>de</strong> certaines règles bien trop formelles pour être<br />
étudiées. Il faut cependant se rappeler qu’elles existent, et que sous l’aspect parfois<br />
chaotique d’une mise en page ratée se cache en fait <strong>de</strong>s procédures bien définies, et<br />
parfaitement déterminées (sans aléa). D’ailleurs, cet aspect rébarbatif et mystérieux est<br />
bien souvent aussi une caractéristique <strong>de</strong> la communication avec un ordinateur...<br />
C’est cool internet !<br />
Pour bon nombre <strong>de</strong> personnes, « aller sur internet » signifie ouvrir un navigateur et<br />
taper une adresse au clavier (p. ex. http://www.lita.sciences.univ-metz.fr/~<strong>de</strong>mange)<br />
dans un endroit prévu. On s’attend alors à recevoir les informations désirées, le tout mis<br />
en forme <strong>de</strong> façon visuelle. On peut y sélectionner du texte, copier <strong>de</strong>s images, regar<strong>de</strong>r<br />
<strong>de</strong>s vidéos, remplir <strong>de</strong>s formulaires, etc. Qu’avons-nous reçu ? Et que s’est-il passé ?<br />
En fait, le navigateur s’est chargé <strong>de</strong> tout un tas <strong>de</strong> petits traitements :<br />
1. Il a envoyé une requête suivant un protocole <strong>de</strong> communication à travers le<br />
réseau.<br />
2. La requête est reçue par le <strong>de</strong>stinataire (le serveur du site internet en question),<br />
qui l’analyse et retourne une réponse (cf. exemple ci-<strong>de</strong>ssous) à l’envoyeur (ici le<br />
navigateur).<br />
3. Le navigateur lit la réponse, l’analyse, et l’interprète pour finalement la traduire<br />
en ce que l’on aperçoit à l’écran.<br />
Au besoin lors <strong>de</strong> son analyse, le navigateur se permet d’envoyer <strong>de</strong>s requêtes supplémentaires<br />
afin <strong>de</strong> récupérer d’autres éléments nécessaires à la mise en forme (p. ex. les<br />
images).<br />
En général la réponse est constituée <strong>de</strong> texte. Ce texte est lisible par un humain, et<br />
contient les informations nécessaires à l’affichage par le navigateur.<br />
3
Voici un court exemple <strong>de</strong> ce qu’est susceptible <strong>de</strong> recevoir le navigateur :<br />
HTTP/1.1 200 OK<br />
Date: Wed, 18 Jan 2011 15:59:14 GMT<br />
Server: Apache/2<br />
Last-Modified: Mon, 01 May 2006 16:03:22 GMT<br />
ETag: "1389e3-180-412bc31976680"<br />
Accept-Ranges: bytes<br />
Content-Length: 384<br />
Vary: Accept-Encoding,User-Agent<br />
Content-Type: text/html; charset=utf-8<br />
<br />
<br />
<br />
Document minimal HTML 5<br />
<br />
<br />
Voici un document <br />
<br />
<br />
HTML 5 minimal.<br />
Dans la section 2 suivante, nous nous concentrons sur la partie qui commence à partir<br />
du texte
2 Html<br />
Nous allons apprendre les rudiments du langage Html (hypertext markup langage)<br />
dans sa version 5. Html est un langage <strong>de</strong> structuration <strong>de</strong> texte. En d’autres termes,<br />
il s’agit <strong>de</strong> définir les parties du texte que l’on écrit ; ici nous avons un titre, ici un<br />
paragraphe, là une énumération, et là une image etc. Ceci est effectué en délimitant<br />
<strong>de</strong>s zones <strong>de</strong> texte par <strong>de</strong>s balises (markup) : p. ex. . Il est <strong>de</strong> plus possible <strong>de</strong> lier<br />
plusieurs documents entre eux par <strong>de</strong>s liens : c’est <strong>de</strong> l’hypertexte.<br />
Lorsque le navigateur interprète le co<strong>de</strong> Html qu’il reçoit, il applique généralement<br />
<strong>de</strong>s distinctions visuelles diverses aux différents éléments (gras pour un titre, soulignement<br />
pour un lien, etc.). Ce comportement par défaut peut être modifié (cf. sec. 3).<br />
Dans cette section, nous nous concentrons sur la définition <strong>de</strong>s éléments<br />
qui composent notre document : leur sémantique.<br />
Commençons par un exemple <strong>de</strong> co<strong>de</strong> source qui <strong>de</strong>viendra compréhensible au fil<br />
<strong>de</strong> cette section.<br />
<br />
<br />
<br />
<br />
<br />
Teaching<br />
<br />
<br />
<br />
<br />
Navigation<br />
<br />
News<br />
Presentation<br />
Teaching<br />
<br />
<br />
<br />
Teaching<br />
<br />
2009-2010:<br />
<br />
S1, M1I: algorithm and complexity<br />
<br />
<br />
2008-2009:<br />
<br />
S2, L1ME: structured<br />
programming<br />
5
S2, L1 Isfates SG-LOG-INFO:<br />
databases<br />
S2, L1 Isfates SG-LOG: web <strong>de</strong>velopment<br />
<br />
<br />
<br />
<br />
<br />
<br />
admin<br />
<br />
<br />
Remarque Un co<strong>de</strong> lisible est un co<strong>de</strong> soigneusement organisé, notamment en ajoutant<br />
<strong>de</strong>s in<strong>de</strong>ntations afin <strong>de</strong> refléter une structure hiérarchique (voir imbrication<br />
ci-<strong>de</strong>ssous).<br />
1 Principes <strong>de</strong> base<br />
Nous allons introduire les grands principes du langage Html, accompagnés <strong>de</strong> définitions<br />
et vocabulaire.<br />
1.1 Les balises<br />
La caractéristique essentielle du langage Html est la balise. Une balise commence<br />
par < et termine par >. Il y a <strong>de</strong>ux types <strong>de</strong> balise ; les balises ouvrantes (p. ex. ) et<br />
les balises fermantes (p. ex. ). Le nom <strong>de</strong> la balise (p. ex. p) doit être en lettres<br />
minuscules. Par exemple :<br />
Ceci est un paragraphe.<br />
La balise délimite un paragraphe ; le texte « Ceci est un paragraphe. » est donc<br />
un paragraphe.<br />
Sur le même principe, il existe une balise permettant <strong>de</strong> délimiter une citation courte<br />
(quote) :<br />
C’est avec la logique que nous prouvons et<br />
avec l’intuition que nous trouvons.<br />
Une liste <strong>de</strong>s balises usuelles se trouve à la fin <strong>de</strong> cette section.<br />
1.2 Les attributs<br />
Il est possible d’ajouter <strong>de</strong>s attributs aux balises. Le nom <strong>de</strong> l’attribut est en<br />
minuscule. Les attributs sont écrits dans la balise ouvrante uniquement, séparés<br />
par <strong>de</strong>s espaces et leur valeur est donnée entre guillemets anglaises (les ") collé au<br />
signe d’égalité (=). L’ordre à l’intérieur <strong>de</strong> la balise ouvrante n’a pas d’importance. Un<br />
attribut a toujours une valeur.<br />
6
Par exemple pour une citation (balise ), il est possible d’indiquer l’auteur en<br />
utilisant l’attribut title :<br />
<br />
<br />
C’est avec la logique que nous prouvons<br />
et avec l’intuition que nous trouvons.<br />
Une balise peut possé<strong>de</strong>r plusieurs attributs. Sur l’exemple précé<strong>de</strong>nt, on désire indiquer<br />
en plus l’adresse du site qui nous a fournit la citation. L’attribut cite <strong>de</strong> la balise<br />
p permet cela :<br />
<br />
<br />
C’est avec la logique que nous prouvons<br />
et avec l’intuition que nous trouvons.<br />
Bien sûr à chaque balise correspond une liste d’attributs possibles.<br />
Une liste <strong>de</strong>s attributs usuels se trouve à la fin <strong>de</strong> cette section.<br />
1.3 L’imbrication<br />
Nous désirons écrire une citation à l’intérieur d’un paragraphe. Il suffit d’imbriquer<br />
(emboîter) les balises afin <strong>de</strong> correctement délimiter le texte selon la règle simple « <strong>de</strong>rnière<br />
ouverte, première fermée ».<br />
L’intuition agit comme moteur car elle fournit une piste prometteuse au<br />
mathématicien qui, impatient, va s’empresser <strong>de</strong> la vérifier, comme le<br />
suggère Poincaré:<br />
<br />
C’est avec la logique que nous prouvons<br />
et avec l’intuition que nous trouvons.<br />
<br />
<br />
En général, bien in<strong>de</strong>nter son co<strong>de</strong> permet d’éviter les mauvaises surprises. Le contreexemple<br />
suivant montre à quel point il est facile <strong>de</strong> se tromper :<br />
[...] une citation qui commence dans un paragraphe, mais qui<br />
termine après la fin du paragraphe ? Cela n’a aucun sens !<br />
✓<br />
✗<br />
1.4 Cas particuliers<br />
Certaines balises peuvent ne pas possé<strong>de</strong>r <strong>de</strong> balise fermante associée si leur objectif<br />
n’est pas <strong>de</strong> délimiter <strong>de</strong>s morceaux <strong>de</strong> texte : p. ex. indiquer l’emplacement d’une image.<br />
Dans ce cas elles ne possè<strong>de</strong>nt qu’une balise ouvrante <strong>de</strong> la forme . L’espace<br />
avant le / est important. En général, ces balises possé<strong>de</strong>nt au moins un attribut pour<br />
être utile (... sauf , voir ci-après).<br />
<br />
7
1.5 Distinction co<strong>de</strong> et rendu<br />
Il faut bien distinguer le co<strong>de</strong> que l’utilisateur saisi, du rendu généré par le navigateur.<br />
En effet, placer un saut <strong>de</strong> ligne dans le co<strong>de</strong> ne signifie pas obtenir un saut <strong>de</strong> ligne sur<br />
l’affichage dans le navigateur. Il en est <strong>de</strong> même en ce qui concerne l’in<strong>de</strong>ntation. Cela<br />
permet, entre autre, <strong>de</strong> concevoir un co<strong>de</strong> agréable à lire sans influer sur l’apparence du<br />
contenu qu’il décrit.<br />
C’est pourquoi il existe une balise permettant d’indiquer un passage à la ligne :<br />
(break line).<br />
Remarque Le passage à la ligne à un sens dans la <strong>de</strong>scription d’un document. Cela<br />
marque un temps <strong>de</strong> pause et une découpe logique du contenu (p. ex. à l’intérieur<br />
d’un paragraphe). En revanche, essayer <strong>de</strong> positionner un élément en effectuant<br />
plusieurs passages à la ligne n’a pas <strong>de</strong> sens et doit être évité.<br />
2 Un peu <strong>de</strong> technique<br />
Nous allons présenter la composition d’un document Html <strong>de</strong> base. Sans trop entrer<br />
dans les détails et à titre informatif, quelques notions techniques sont aussi développées.<br />
La structure minimale nécessaire pour un document Html vali<strong>de</strong> est la suivante.<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Tout document Html doit contenir au moins cette structure.<br />
Expliquons-en les parties.<br />
2.1 Type du document<br />
<br />
Cette ligne définit les règles auxquelles doit se conformer le document : son type (document<br />
type). Ces règles sont écrites dans un langage spécialisé. On peut alors vérifier<br />
mécaniquement si un document donné se conforme bien à ces règles, en particulier le<br />
nom <strong>de</strong>s balises, les attributs associés, etc.<br />
2.2 Balises html<br />
<br />
...<br />
<br />
8
Ces balises délimitent un document Html entier : un tel document est composé d’un<br />
en-tête (hea<strong>de</strong>r) et d’un corps (body).<br />
L’attribut lang définit la langue utilisée dans le document (ici le français). Il peut<br />
être omis, placé et redéfinit dans n’importe quelle balise : p. ex. pour un<br />
paragraphe en anglais.<br />
Sa valeur peut être utilisée par un moteur <strong>de</strong> recherche pour in<strong>de</strong>xer le contenu en<br />
fonction <strong>de</strong> la langue, par le navigateur pour adapter la typographie à la langue utilisée,<br />
ou encore dans l’objectif d’appliquer un style visuel différent en fonction <strong>de</strong> la langue<br />
(voir prochaine section).<br />
En pratique, il est souvent placé en début <strong>de</strong> document dans la balise html, et déclare<br />
ainsi la langue pour tout le document.<br />
2.3 Balises head et body<br />
À l’intérieur <strong>de</strong>s balises html, on distingue <strong>de</strong>ux parties : l’en-tête (hea<strong>de</strong>r), et le<br />
corps du document (body).<br />
L’en-tête contient <strong>de</strong>s informations à propos <strong>de</strong> la page : son titre, quelques métadonnées<br />
(auteur, <strong>de</strong>scription, mots-clés, etc.), ainsi que <strong>de</strong>s pointeurs vers d’autres<br />
documents (p. ex. les feuilles <strong>de</strong> style, cf. sec. 3, p. 19).<br />
Le corps contient la <strong>de</strong>scription du texte en question (p. ex. <strong>de</strong>s paragraphes, <strong>de</strong>s<br />
titres, etc.).<br />
2.4 Balises head<br />
Dans l’en-tête on place <strong>de</strong>s informations à propos du document lui-même. Le titre<br />
du document est toujours fournit grâce aux balises title.<br />
...<br />
<br />
<br />
...<br />
Titre <strong>de</strong> la page<br />
Ce titre ne fait pas partie du corps du document (n’est pas situé entre les balises body),<br />
et donc ne sera pas affiché. Souvent les navigateurs s’en servent pour nommer une page<br />
afin <strong>de</strong> l’enregistrer dans un système <strong>de</strong> favoris.<br />
D’autres méta-données comme l’auteur du document, une courte <strong>de</strong>scription, etc.<br />
peuvent être lues et utilisées par les moteurs <strong>de</strong> recherche et les annuaires pour répertorier<br />
et classifier les documents sur internet.<br />
...<br />
<br />
<br />
...<br />
Super site trop bien<br />
<br />
<br />
Enfin, dans cette partie du document, il est possible d’indiquer <strong>de</strong>s informations<br />
techniques sur la façon <strong>de</strong> transmettre les données, le codage <strong>de</strong>s caractères, etc. On<br />
veillera à écrire la ligne suivante.<br />
9
...<br />
<br />
...<br />
<br />
...<br />
<br />
...<br />
Explications Pour un ordinateur, un fichier ou la réponse à une requête n’est qu’une<br />
suite <strong>de</strong> 0 et <strong>de</strong> 1 (très grossièrement). En particulier, il lui faut interpréter cette suite.<br />
Cela s’effectue selon différents codages, différentes représentations. Par exemple, on<br />
peut regrouper les bits (les 0 et 1) par paquets <strong>de</strong> 8 (un octet), et définir pour chaque<br />
combinaison possible une lettre d’un alphabet : p. ex. 00000001 pourra représenter la<br />
lettre A, 00000010 représentera la lettre B, etc. Une façon <strong>de</strong> co<strong>de</strong>r <strong>de</strong>s caractères s’appelle<br />
un jeu <strong>de</strong> caractères (charset). Ainsi un fichier texte s’interprète selon un codage<br />
<strong>de</strong>s caractères bien déterminé.<br />
En général les codages sont optimisés pour certaines langues : latin1 (ou ISO-8859-1)<br />
pour les langues d’Europe <strong>de</strong> l’ouest (dont français et allemand), ISO-8859-4 pour l’Europe<br />
du nord, etc.<br />
Nous utiliserons le codage utf-8 qui permet <strong>de</strong> représenter les caractères et<br />
symboles <strong>de</strong> très nombreuses langues.<br />
2.5 Les URL : adresses d’internet<br />
Adresses absolues Les documents sur internet sont accessibles à partir d’adresses<br />
particulières : les URL (uniform ressource locator). Par ex. http://www.wikipedia.org<br />
indique l’utilisation du protocole HTTP (hypertext transfer protocol), ainsi que l’i<strong>de</strong>ntification<br />
<strong>de</strong> la ressource pour ce protocole : www.wikipedia.org.<br />
Voici quelques autres exemples <strong>de</strong> telles adresses absolues :<br />
mailto:dieu@enfer.org URL d’une adresse <strong>de</strong> messagerie ;<br />
ftp://ftp.freebsd.org URL d’un site FTP (file transfer protocol) ;<br />
news:fr.sci.maths URL d’un forum <strong>de</strong> discussion ;<br />
...<br />
Adresses relatives En Html, on utilisera souvent <strong>de</strong>s adresses relatives (au document<br />
actuel) : l’emplacement <strong>de</strong> la ressource à accé<strong>de</strong>r est définit par rapport au<br />
document courant.<br />
Le principe est le suivant : pour accé<strong>de</strong>r à la ressource, il suffit <strong>de</strong> noter le nom <strong>de</strong>s<br />
dossiers traversés <strong>de</strong>puis le document actuel jusqu’à la ressource, en les séparant par le<br />
caractère /. Aussi, .. indique le dossier parent.<br />
Soit par exemple l’organisation <strong>de</strong> fichiers suivante :<br />
Depuis le fichier main.html, on accè<strong>de</strong> au fichier :<br />
gallery<br />
– photo.png sans traverser aucun dossier, donc le chemin d’accès<br />
est simplement photo.png ;<br />
main.html<br />
photo.png<br />
– in<strong>de</strong>x.html en remontant d’un dossier, donc le chemin d’accès<br />
est ../in<strong>de</strong>x.html ;<br />
in<strong>de</strong>x.html<br />
images<br />
– bg.png en remontant d’un dossier, puis en <strong>de</strong>scendant dans<br />
bg.png<br />
le dossier images, ce qui donne ../images/bg.png.<br />
10
Ainsi dans le document main.html on pourrait trouver le co<strong>de</strong> suivant :<br />
...<br />
<br />
...<br />
Retour à l’accueil<br />
...<br />
<br />
3 Passons à la pratique !<br />
Nous savons comment se construit un document Html <strong>de</strong> base, et nous savons<br />
décrire une page en lui ajoutant <strong>de</strong>s méta-données. Il ne reste plus qu’à apprendre à<br />
décrire le contenu d’un document Html.<br />
Nous allons introduire quelques éléments un peu plus évolués que les balises p et<br />
q déjà exposées, sans oublier <strong>de</strong> respecter les règles évoquées (ouverture/fermeture,<br />
imbrication, syntaxe <strong>de</strong>s attributs).<br />
3.1 Les listes<br />
Il est possible <strong>de</strong> distinguer trois types <strong>de</strong> listes : les listes ordonnées (p. ex. numérotées),<br />
les listes non-ordonnées (p. ex. énumération) et les listes <strong>de</strong> définition (p. ex. un<br />
dictionnaire).<br />
Listes ordonnées La liste est délimitée par les balises ol (or<strong>de</strong>red list), et les éléments<br />
<strong>de</strong> la liste sont eux-même délimités par les balises li (list item).<br />
Être un gentil étudiant s’apprend:<br />
<br />
<br />
Se mettre en rang par <strong>de</strong>ux en se donnant la main.<br />
Mettre le doigt sur la bouche et faire silence.<br />
Rentrer dans la salle lorsque l’enseignant l’ordonne.<br />
Ce qui pourrait donner le résultat suivant.<br />
Être un gentil étudiant s’apprend :<br />
1. Se mettre en rang par <strong>de</strong>ux en se donnant la main.<br />
2. Mettre le doigt sur la bouche et faire silence.<br />
3. Rentrer dans la salle lorsque l’enseignant l’ordonne.<br />
Listes non ordonnées La liste est délimitée par les balises ul (unor<strong>de</strong>red list), et les<br />
éléments <strong>de</strong> la liste sont eux-même délimités par les balises li (list item).<br />
Être un gentil étudiant s’apprend:<br />
<br />
Se mettre en rang par <strong>de</strong>ux en se donnant la main.<br />
Mettre le doigt sur la bouche et faire silence.<br />
Rentrer dans la salle lorsque l’enseignant l’ordonne.<br />
11
Ce qui pourrait donner le résultat suivant.<br />
Être un gentil étudiant s’apprend :<br />
– Se mettre en rang par <strong>de</strong>ux en se donnant la main.<br />
– Mettre le doigt sur la bouche et faire silence.<br />
– Rentrer dans la salle lorsque l’enseignant l’ordonne.<br />
Listes <strong>de</strong> définitions Les listes <strong>de</strong> définitions sont légèrement différentes, puisqu’il<br />
faut donner le terme à définir avec dt (<strong>de</strong>finition term) ainsi que sa (ses) <strong>de</strong>scription(s)<br />
avec dd (<strong>de</strong>finition <strong>de</strong>scription).<br />
<br />
Procrastination<br />
Penchant à différer, tendance à remettre à plus tard.<br />
Paresse<br />
Fainéantise<br />
Tendance à éviter toute activité, à refuser tout effort.<br />
<br />
Avocat<br />
Auxiliaire <strong>de</strong> justice qui conseille et représente<br />
ses clients en justice.<br />
Fruit comestible <strong>de</strong> l’avocatier, en forme <strong>de</strong> poire.<br />
Ce qui pourrait donner le résultat suivant :<br />
Procrastination<br />
Penchant à différer, tendance à remettre au len<strong>de</strong>main ou à plus tard.<br />
Paresse, Fainéantise<br />
Tendance à éviter toute activité, à refuser tout effort.<br />
Avocat<br />
Auxiliaire <strong>de</strong> justice qui conseille et représente ses clients en justice.<br />
Fruit comestible <strong>de</strong> l’avocatier, en forme <strong>de</strong> poire.<br />
Imbrication <strong>de</strong> listes Bien sûr, on peut placer une liste dans une liste : un élément<br />
<strong>de</strong> la liste (entre li) contient alors lui-même une liste (p. ex. ul).<br />
<br />
Préchauffer le four à 180 ◦ C.<br />
Faire les préparations en parallèle:<br />
<br />
Dans une casserole, faire fondre le beurre et le chocolat à<br />
feu très doux.<br />
Dans un bol, battre les jaunes d’oeufs avec le sucre jusqu’à<br />
ce que le mélange blanchisse.<br />
Battre les blancs en neige avec une pincée <strong>de</strong> sel.<br />
12
<br />
<br />
Jeter tout, c’est raté !<br />
Ce qui pourrait donner le résultat suivant.<br />
1. Préchauffer le four à 180˚C.<br />
2. Faire les préparations en parallèle :<br />
– Dans une casserole, faire fondre le beurre et le chocolat à feu très doux.<br />
– Dans un bol, battre les jaunes d’oeufs avec le sucre jusqu’à ce que le mélange<br />
blanchisse.<br />
– Battre les blancs en neige avec une pincée <strong>de</strong> sel.<br />
3. Jeter tout, c’est raté !<br />
3.2 Les tableaux<br />
Les tableaux permettent <strong>de</strong> représenter <strong>de</strong>s données ainsi que <strong>de</strong>s relations entre<br />
elles. Un tableau est délimité par les balises table. Puis il est divisé en lignes par les<br />
balises tr (table row), et ces lignes sont elles-mêmes divisées en cellules par les balises<br />
td (table data cell) qui contiennent les données. Une cellule peut contenir du texte, mais<br />
aussi n’importe quel élément (paragraphe, listes, tableau).<br />
Tableaux simples Par exemple le tableau suivant, <strong>de</strong> 7 lignes et 2 colonnes peut être<br />
représenté par le co<strong>de</strong> ci-<strong>de</strong>ssous.<br />
Impératif présent marre-toi / marrons-nous / marrez-vous<br />
Participe présent se marrant<br />
Participe passé marré / marrée / marrés / marrées<br />
Infinitif présent se marrer<br />
Infinitif passé s’être marré<br />
Gérondif présent en se marrant<br />
Gérondif passé en s’étant marré<br />
Conjugaison du verbe ’se marrer’<br />
<br />
Conjugaison du verbe ’se marrer’<br />
Impératif présent<br />
marre-toi / marrons-nous / marrez-vous<br />
<br />
Participe présent<br />
se marrant<br />
<br />
Participe passé<br />
marré / marrée / marrés / marrées<br />
<br />
Infinitif présent<br />
se marrer<br />
13
Infinitif passé<br />
<br />
s’être marré<br />
Gérondif présent<br />
<br />
en se marrant<br />
Gérondif passé<br />
<br />
<br />
en s’étant marré<br />
Remarquons la légen<strong>de</strong> délimitée par les balises caption à l’intérieur <strong>de</strong>s balises table.<br />
Un tableau est toujours associé à une légen<strong>de</strong>.<br />
Cellules d’en-tête Il est possible d’indiquer <strong>de</strong>s cellules d’en-tête par les balises th<br />
(table hea<strong>de</strong>r cell) à la place <strong>de</strong>s balises td.<br />
<br />
Table <strong>de</strong>s scores.<br />
nom âge score<br />
Ché, Hector 43 153<br />
Zoreilles, Vincent 26 2106<br />
Table <strong>de</strong>s scores.<br />
nom<br />
<br />
âge<br />
score<br />
Ché, Hector<br />
<br />
45<br />
153<br />
Zoreilles, Vincent<br />
<br />
<br />
26<br />
2106<br />
Fusion <strong>de</strong> cellules Une cellule peut s’étaler sur plusieurs lignes et/ou colonnes. Les<br />
attributs colspan et rowspan <strong>de</strong> la balise td permettent <strong>de</strong> spécifier le nombre <strong>de</strong> colonnes<br />
et <strong>de</strong> lignes (respectivement) sur lesquelles s’étale la cellule. Évi<strong>de</strong>mment, les cellules sur<br />
lesquelles elle s’étale ne doivent plus être déclarées (elles seraient vi<strong>de</strong>s sinon). Voyons<br />
cela sur <strong>de</strong>ux exemples simples :<br />
Sur <strong>de</strong>ux<br />
colonnes.<br />
1<br />
3 4<br />
14<br />
Sur <strong>de</strong>ux<br />
lignes.<br />
2<br />
1<br />
4
Sur <strong>de</strong>ux colonne<br />
<br />
1 <br />
<br />
<br />
3 <br />
4 <br />
<br />
<br />
<br />
Sur <strong>de</strong>ux lignes<br />
<br />
1 <br />
2 <br />
<br />
<br />
4 <br />
<br />
<br />
Remarque Jadis les tableaux étaient beaucoup utilisés pour positionner <strong>de</strong>s éléments<br />
sur la page. Heureusement les pratique ont évoluées et les mises en pages aussi : on<br />
utilise dorénavant le Css qui produit un co<strong>de</strong> bien plus facile à gérer. Pour ce <strong>cours</strong>, il<br />
est donc interdit d’utiliser un tableau pour positionner <strong>de</strong>s éléments.<br />
3.3 Les liens<br />
Un document Html est plus qu’un simple texte linéaire, en particulier il contient<br />
<strong>de</strong>s liens vers d’autres documents (Html ou non).<br />
Liens usuels Tout élément Html (texte, image, paragraphe, etc.) peut agir comme<br />
un lien. L’élément doit simplement être entouré <strong>de</strong>s balises a, tandis que l’objet pointé<br />
est donné par son adresse dans l’attribut href.<br />
Le site Wikipédia est un point<br />
<strong>de</strong> départ pour découvrir un sujet.<br />
Vous pouvez me contacter pour plus<br />
d’informations.<br />
Les photos suivantes sont disponibles en gran<strong>de</strong> taille.<br />
<br />
Liens internes Il est aussi possible d’établir <strong>de</strong>s liens vers <strong>de</strong>s éléments à l’intérieur<br />
d’une page. Pour cela, il suffit <strong>de</strong> :<br />
15
...<br />
<br />
<br />
...<br />
– donner un i<strong>de</strong>ntifiant (attribut id) à l’élément cible du lien ;<br />
– définir le lien par une adresse (relative ou absolue) à laquelle on ajoute le caractère<br />
# suivi <strong>de</strong> l’i<strong>de</strong>ntifiant <strong>de</strong> l’élément cible.<br />
Première partie<br />
Deuxième partie<br />
...<br />
Première partie<br />
...<br />
Deuxième partie<br />
...<br />
De même, on peut référencer un élément précis d’un document extérieur.<br />
Le 20 juin est<br />
associé à <strong>de</strong> grands noms et <strong>de</strong> grands évènements.<br />
3.4 Sélection <strong>de</strong> balises usuelles<br />
On termine par une sélection <strong>de</strong> balises utiles, ainsi que <strong>de</strong>s attributs qui leur sont<br />
associés.<br />
a délimite un lien (anchor) :<br />
href adresse <strong>de</strong> l’élément pointé (hyperlink reference) ;<br />
type type du document pointé (p. ex. application/pdf).<br />
abbr délimite une abréviation (p. ex. ONU) :<br />
title pour indiquer la signification <strong>de</strong> l’abréviation (p. ex. organisation <strong>de</strong>s nations<br />
unies).<br />
blockquote délimite une citation longue (p. ex. un ou plusieurs paragraphes) :<br />
cite référence la source d’origine <strong>de</strong> la citation ;<br />
title information additionnelle (p. ex. l’auteur).<br />
br indique un retour à la ligne (break), ne possè<strong>de</strong> pas <strong>de</strong> balise fermante.<br />
cite délimite la référence à une source externe (auteur, site internet, etc.).<br />
co<strong>de</strong> délimite un co<strong>de</strong> source informatique, et reproduit les retours à la ligne et espaces<br />
du co<strong>de</strong> source.<br />
<strong>de</strong>l délimite les éléments supprimées (<strong>de</strong>leted) d’un document (suite à <strong>de</strong>s modifications) :<br />
cite pointe une référence expliquant pourquoi l’élément a changé ;<br />
datetime indique la date et l’heure du changement (format YYYY-MM-DDThh:mm:ss).<br />
dfn délimite un terme qui est défini (<strong>de</strong>fined) par ailleurs.<br />
dl délimite une liste <strong>de</strong> définition (définition list), et s’utilise en combinaison avec dt et<br />
dd comme vu précé<strong>de</strong>mment.<br />
em délimite un texte à mettre en évi<strong>de</strong>nce (emphasis).<br />
16
h1 h2 ... h6 délimitent un titre (heading). Il y a six niveaux : le premier (h1) délimite le<br />
titre d’une section, le second une sous-section, le troisième une sous-sous-section,<br />
etc. Dans une page on doit toujours commencer par utiliser le premier<br />
niveau, puis le second, etc.<br />
hr indique une règle horizontale (horizontal rule) ; ai<strong>de</strong> à distinguer plus fortement différentes<br />
parties (p. ex. <strong>de</strong>s notes <strong>de</strong> bas <strong>de</strong> page).<br />
img indique l’emplacement d’une image :<br />
src adresse <strong>de</strong> l’image, son origine (source) ;<br />
width largeur <strong>de</strong> l’image ;<br />
height hauteur <strong>de</strong> l’image (si un seul <strong>de</strong>s <strong>de</strong>ux attributs précé<strong>de</strong>nts est spécifié,<br />
l’autre est calculé par le navigateur) ;<br />
alt un texte alternatif pour les images non purement décoratives (p. ex. « Graphique<br />
: montre l’évolution <strong>de</strong> la violence <strong>de</strong>s meurtres pour le 20 e siècle. »),<br />
les images uniquement décoratives doivent avoir une valeur vi<strong>de</strong><br />
pour cet attribut (i.e. alt="").<br />
ins délimite les éléments ajoutés (inserted) d’un document (suite à <strong>de</strong>s modifications) :<br />
cite pointe une référence expliquant la raison du changement ;<br />
datetime indique la date et l’heure du changement (format YYYY-MM-DDThh:mm:ss).<br />
ol délimite une liste ordonnée (or<strong>de</strong>red list), et s’utilise en combinaison avec li comme<br />
vu précé<strong>de</strong>mment.<br />
p délimite un paragraphe.<br />
q délimite une citation courte (p. ex. à l’intérieur d’un paragraphe) :<br />
cite référence la source d’origine <strong>de</strong> la citation ;<br />
title information additionnelle (p. ex. l’auteur).<br />
strong délimite un texte à mettre fortement en évi<strong>de</strong>nce (strong emphasis).<br />
sub délimite un texte à placer en indice (subscript) ; p. ex. x n .<br />
sup délimite un texte à placer en exposant (superscript) ; p. ex. x n .<br />
table délimite un tableau, et s’utilise avec caption, tr, th, td comme vu précé<strong>de</strong>mment.<br />
ul délimite une liste non-ordonnée (unor<strong>de</strong>red list), et s’utilise en combinaison avec li<br />
comme vu précé<strong>de</strong>mment.<br />
17
3 Css D&Co<br />
Dans l’introduction, nous avons noté que le navigateur peut avoir besoin <strong>de</strong> <strong>de</strong>man<strong>de</strong>r<br />
d’autres éléments que la page Html. C’est le cas <strong>de</strong>s images, mais aussi <strong>de</strong>s feuilles <strong>de</strong><br />
style Css (cascading stylesheets).<br />
Il s’agit aussi <strong>de</strong> documents textuels mais obéissant à <strong>de</strong>s règles syntaxiques différentes<br />
<strong>de</strong> celles <strong>de</strong> Html. Les documents Css permettent <strong>de</strong> décrire (entre autres)<br />
l’apparence visuelle d’un document. Voyons un exemple concret d’un tel document Css :<br />
body {<br />
}<br />
position: absolute;<br />
left: 250px;<br />
background: #ADFF2F;<br />
padding-bottom: 30px;<br />
#menu {<br />
position: fixed;<br />
top: 0px;<br />
left: 0px;<br />
bottom: 0px;<br />
width: 190px;<br />
padding: 10px;<br />
background: #556B2F;<br />
bor<strong>de</strong>r: 2px solid maroon;<br />
color: #ADFF2F;<br />
}<br />
a.tobot, a.tobot:visited {<br />
}<br />
color: #ADFF2F;<br />
position: absolute;<br />
bottom: 20px;<br />
L’idée est <strong>de</strong> définir <strong>de</strong>s propriétés (p. ex. visuelles) s’appliquant aux éléments Html.<br />
Il est mieux <strong>de</strong> placer le co<strong>de</strong> Html et le co<strong>de</strong> Css dans <strong>de</strong>s fichiers distincts.<br />
Cela autorise l’application d’une même apparence à plusieurs pages Html. De plus,<br />
la maintenance du site est simplifiée, et les différentes parties (fond et forme) sont<br />
facilement réutilisables.<br />
19
1 Principes <strong>de</strong> base<br />
1.1 Structure d’une règle Css<br />
Un document Css est une succession <strong>de</strong> règles. Détaillons une <strong>de</strong>s règles <strong>de</strong> l’exemple<br />
précé<strong>de</strong>nt :<br />
body {<br />
}<br />
position: absolute;<br />
left: 250px;<br />
background: #ADFF2F;<br />
padding-bottom: 30px;<br />
Il y a <strong>de</strong>ux parties ; le sélecteur et le bloc <strong>de</strong> déclarations. Pour cet exemple, le<br />
sélecteur est body, tandis que le bloc <strong>de</strong> déclarations est entouré <strong>de</strong>s accola<strong>de</strong>s { et }.<br />
Le bloc <strong>de</strong> déclarations contient <strong>de</strong>s déclarations <strong>de</strong> la forme propriété: valeur ;.<br />
Une déclaration est toujours terminée par un point-virgule, et le nom <strong>de</strong> la propriété<br />
est toujours séparé <strong>de</strong> sa valeur par les « <strong>de</strong>ux points ». Sur cet exemple, les valeurs <strong>de</strong><br />
quatre propriétés (position, left, background, padding-bottom) sont définies.<br />
Il existe plusieurs façons <strong>de</strong> faire référence à un ou plusieurs éléments Html (plusieurs<br />
types <strong>de</strong> sélecteurs), <strong>de</strong> nombreuses propriétés qu’il est possible <strong>de</strong> modifier, ainsi<br />
que <strong>de</strong> nombreuses façons d’en indiquer la valeur.<br />
1.2 Associer Html et Css<br />
Pour que le navigateur sache quel style appliquer au document Html qu’il interprète,<br />
il est nécessaire d’associer un document Css (un fichier) à un document Html. La<br />
balise link permet d’indiquer un fichier Css à utiliser dans l’en-tête (head)<br />
du document Html .<br />
L’exemple suivant associe le document Html courant avec le fichier Css style.css :<br />
...<br />
<br />
Blog <strong>de</strong> Dieu en BD<br />
...<br />
<br />
...<br />
<br />
rel définit la relation que la liaison représente : ici une feuille <strong>de</strong> style (stylesheet) ;<br />
href indique l’URL (cf. ssec. 2.5, p. 10) vers le fichier représentant la feuille <strong>de</strong> style : ici<br />
style.css ;<br />
media définit le média pour lequel cette feuille <strong>de</strong> style sera utilisée 1 : ici affichage sur<br />
un écran (screen).<br />
1. En effet, il existe d’autres types <strong>de</strong> médias, comme par exemple : print pour l’impression,<br />
projection pour les diaporamas, etc. et all pour tous les types possibles.<br />
20
1.3 Quelques sélecteurs<br />
On l’a vu, afin <strong>de</strong> changer les propriétés <strong>de</strong>s éléments d’un document Html, il est<br />
nécessaire d’indiquer les éléments Html concernés. C’est le rôle <strong>de</strong>s sélecteurs.<br />
Sélecteurs simples La façon la plus simple d’indiquer un élément Html du document<br />
sur lequel appliquer <strong>de</strong>s règles Css est d’indiquer le nom <strong>de</strong> la balise délimitant<br />
cet élément. Par exemple pour appliquer un style aux titres délimités par h1 dans le<br />
document Html, il suffit d’écrire dans le document Css :<br />
h1 {<br />
}<br />
font-weight: bold;<br />
font-variant: small-caps;<br />
font-family: sans-serif;<br />
Ici les titres h1 seront en gras (bold), en petite capitales (small-caps) et dans une famille<br />
<strong>de</strong> caractères sans empattements (sans-serif).<br />
Suite <strong>de</strong> sélecteurs Il est possible d’appliquer un ensemble <strong>de</strong> déclarations à plusieurs<br />
éléments en séparant les noms par <strong>de</strong>s virgules. Par exemple, si l’on souhaite que tous<br />
les titres <strong>de</strong> h1 à h3 soient concernés par l’ensemble <strong>de</strong>s déclarations précé<strong>de</strong>ntes, il suffit<br />
d’écrire :<br />
h1, h2, h3 {<br />
}<br />
font-weight: bold;<br />
font-variant: small-caps;<br />
font-family: sans-serif;<br />
Cela évite <strong>de</strong> dupliquer inutilement du co<strong>de</strong>, et facilite la modification simultanée <strong>de</strong>s<br />
éléments concernés.<br />
Sélecteur universel Il existe un sélecteur spécial permettant <strong>de</strong> sélectionner tous les<br />
éléments d’un document Html : * . Par exemple, si l’on souhaite que le texte <strong>de</strong> tous<br />
les éléments Html soit en rouge sur fond noir :<br />
* {<br />
}<br />
background-color: black;<br />
color: red;<br />
En pratique ce sélecteur est peu utilisé tel quel, mais en combinaison avec d’autres<br />
sélecteurs (p. ex. <strong>de</strong> classe).<br />
Sélecteurs <strong>de</strong> classe Nous souhaitons définir <strong>de</strong>s propriétés pour certains éléments<br />
importants. Mais nous ne disposons pas a priori <strong>de</strong> marquage en Html le permettant<br />
puisqu’il peut s’agir <strong>de</strong> certains paragraphes, <strong>de</strong> quelques titres, etc. : il n’existe en effet<br />
pas <strong>de</strong> balise en Html.<br />
Cependant, chaque balise Html peut se voir associer un attribut class avec une<br />
valeur libre définissant une classe à laquelle appartient l’élément :<br />
21
...<br />
Ceci est un paragraphe <strong>de</strong> la plus haute importance<br />
...<br />
Parfois, à l’intérieur même d’un paragraphe,<br />
certaines parties seulement du texte sont<br />
importantes.<br />
...<br />
Css permet <strong>de</strong> sélectionner ces éléments à l’ai<strong>de</strong> du sélecteur <strong>de</strong> classe : il commence<br />
par un point suivit du nom <strong>de</strong> classe qu’on a définit. Par exemple :<br />
.important {<br />
}<br />
color: red;<br />
Ici tous les éléments possédant un attribut class dont la valeur vaut important seront<br />
affectés et seront donc en rouge.<br />
Restriction du sélecteur <strong>de</strong> classe On déci<strong>de</strong> qu’à l’intérieur d’un paragraphe<br />
un texte important doit être en gras pour bien le distinguer. Il est alors possible <strong>de</strong><br />
restreindre le sélecteur <strong>de</strong> classe aux éléments em par le sélecteur em.important. Par<br />
exemple :<br />
.important {<br />
}<br />
color: red;<br />
em.important {<br />
}<br />
font-weight: bold;<br />
Ainsi les éléments em avec la valeur important à l’attribut class seront en rouge par la<br />
première règle, et en plus en gras par la secon<strong>de</strong>. Par contre, un paragraphe (p) n’étant<br />
pas un élément em, il sera simplement mis en rouge par la première règle, la secon<strong>de</strong> ne<br />
s’y appliquant pas.<br />
Remarque Intuitivement, définir la valeur <strong>de</strong> l’attribut class pour <strong>de</strong>s éléments<br />
Html n’a <strong>de</strong> sens que si plusieurs éléments sont susceptibles d’appartenir à cette classe.<br />
En d’autres termes, une classe représente potentiellement un ensemble d’éléments.<br />
Sélecteurs d’i<strong>de</strong>ntifiant Parfois, il est nécessaire <strong>de</strong> distinguer un élément particulier<br />
et <strong>de</strong> façon unique dans une page : on donne une valeur libre à l’attribut id <strong>de</strong> l’élément<br />
Html correspondant dans le co<strong>de</strong> Html (voir sec. 3.3, p. 15).<br />
Par exemple le sommaire d’un site n’apparaît qu’une seule fois par page. En général, il<br />
s’agit d’une liste non ordonnée : il faut donc la distinguer <strong>de</strong>s autres listes non ordonnées.<br />
Par exemple, on lui donne l’i<strong>de</strong>ntifiant unique menu :<br />
...<br />
<br />
Sauter en parachute<br />
Avec un parachute<br />
22
...<br />
Sans parachute<br />
Il faut vérifier ces aspects:<br />
<br />
<br />
...<br />
le sac-harnais;<br />
la voilure;<br />
...<br />
Ainsi distingué, le sélecteur d’i<strong>de</strong>ntifiant (# suivit du nom d’i<strong>de</strong>ntifiant) permet d’affecter<br />
un style à cet unique élément dont l’attribut id vaut menu :<br />
#menu {<br />
}<br />
background-color: silver;<br />
Remarque Cet i<strong>de</strong>ntifiant sert aussi aux liens internes dans un document (cf. sssec<br />
3.3, p. 15). Évi<strong>de</strong>mment, il ne doit pas exister <strong>de</strong>ux éléments ayant le même<br />
i<strong>de</strong>ntifiant dans une page Html .<br />
1.4 Casca<strong>de</strong><br />
Par défaut, le navigateur applique un style au document : p. ex. titres h1 en gras,<br />
éléments em en italique, etc. Ainsi, chaque fois qu’on définit une propriété (p. ex. la<br />
couleur) pour un élément, en fait on la redéfinit. De plus, il est possible <strong>de</strong> définir <strong>de</strong>s<br />
règles apparemment contradictoires comme :<br />
h1 {<br />
}<br />
color: black;<br />
h1.important {<br />
}<br />
...<br />
color: red;<br />
En effet, avec le document Html suivant :<br />
Titre important<br />
...<br />
il est difficile <strong>de</strong> dire a priori quelle couleur aura le titre h1 : rouge ou noire ?<br />
En fait, le navigateur déci<strong>de</strong> du style final selon une procédure complexe, mais qui<br />
peut en général se résumer par on applique au final le style associé au sélecteur<br />
le plus précis.<br />
Ici, « être un élément h1 » est moins précis que « être un élément h1 et <strong>de</strong> classe<br />
important ». Donc le titre du co<strong>de</strong> Html précé<strong>de</strong>nt sera <strong>de</strong> couleur rouge.<br />
23
Héritage Pour certaines propriétés (comme la couleur), les éléments contenus sont<br />
aussi affectés : c’est l’héritage. Prenons par exemple le co<strong>de</strong> Html suivant :<br />
...<br />
Un paragraphe avec un élément mis en valeur.<br />
...<br />
Si <strong>de</strong> plus on a le co<strong>de</strong> Css associé suivant :<br />
p {<br />
}<br />
color: red;<br />
alors le texte délimité par em sera aussi en rouge : il hérite <strong>de</strong> la propriété <strong>de</strong> p. En<br />
revanche, si l’on ajoute la règle suivante au co<strong>de</strong> Css :<br />
em {<br />
}<br />
color: green;<br />
alors le texte du paragraphe est en rouge sauf le texte <strong>de</strong> em qui est en vert. On peut<br />
ainsi redéfinir la valeur <strong>de</strong>s propriétés héritées.<br />
1.5 Regroupement <strong>de</strong> propriétés<br />
Il existe certaines propriétés qui ont une liste <strong>de</strong> valeurs : il s’agit en fait d’un<br />
regroupement <strong>de</strong> plusieurs propriétés. Par exemple, plutôt que d’écrire :<br />
h1, .important, #menu {<br />
}<br />
bor<strong>de</strong>r-bottom-width: thick;<br />
bor<strong>de</strong>r-bottom-style: solid;<br />
bor<strong>de</strong>r-bottom-color: red;<br />
il est possible <strong>de</strong> con<strong>de</strong>nser en :<br />
h1, .important, #menu {<br />
}<br />
bor<strong>de</strong>r-bottom: thick solid red;<br />
L’ordre <strong>de</strong>s valeurs peut être important, auquel cas il est définit précisément dans la<br />
norme.<br />
2 Éléments <strong>de</strong> pratique<br />
2.1 Les couleurs<br />
De nombreuses propriétés définissent la couleur d’un élément ; background-color,<br />
bor<strong>de</strong>r-color, color etc. Les valeurs <strong>de</strong> ces propriétés peuvent être prédéfinies ou non.<br />
Couleurs prédéfinies On peut tout d’abord les choisir parmi <strong>de</strong>s couleurs prédéfinies<br />
qui sont au nombre <strong>de</strong> 17 : aqua, black, blue, fuschia, gray, green, lime, maroon,<br />
navy, olive, orange, purple, red, silver, teal, white et yellow. Par exemple :<br />
24
h1, .important, #menu {<br />
}<br />
bor<strong>de</strong>r-color: teal;<br />
Définies par le concepteur Il est possible <strong>de</strong> définir une couleur comme un mélange<br />
<strong>de</strong> rouge, <strong>de</strong> vert et <strong>de</strong> bleu (red, green, blue) dans cet ordre. Pour cela on<br />
utilise <strong>de</strong>s nombres entiers compris entre 0 et 255 : 0 correspond à l’absence <strong>de</strong> couleur,<br />
et 255 au maximum. Par exemple rgb(255,0,0) correspond au rouge, tandis que<br />
rgb(255,100,100) donne un rouge pâle.<br />
De même, on peut à la place d’entiers entre 0 et 255, utiliser <strong>de</strong>s pourcentages : par<br />
exemple rgb(100%,40%,40%) pour le rouge pâle précé<strong>de</strong>nt.<br />
Il existe encore une autre notation : la notation hexadécimale. Cette fois-ci, on écrit<br />
simplement #FF6464.<br />
Des outils permettent d’obtenir ces valeurs <strong>de</strong> façon visuelle :<br />
En Css, on peut écrire ce co<strong>de</strong> :<br />
h1, .important, #menu {<br />
bor<strong>de</strong>r-color: rgb(255,0,0);<br />
background-color: rgb(77%,20%,80%);<br />
color: #903BC0;<br />
}<br />
2.2 Les longueurs<br />
Certaines propriétés admettent <strong>de</strong>s longueurs comme valeur ; width, top, margin,<br />
etc. Une unité doit être associée à ces longueurs. Il en existe <strong>de</strong>ux types : les unités <strong>de</strong><br />
longueur absolues, et les unités <strong>de</strong> longueur relatives.<br />
25
Unités absolues Les unités absolues sont plutôt à réserver pour les médias d’impression<br />
(media="print") : cm, mm (ou encore in, pt, pc). On ne les utilisera donc pas<br />
ici.<br />
Unités relatives Pour l’affichage à l’écran, <strong>de</strong>s unités relatives sont préférées. L’unité<br />
relative couramment utilisée est le pixel (picture element), notée px. Il s’agit en fait d’un<br />
point <strong>de</strong> l’écran. La taille <strong>de</strong>s images est souvent donnée en pixels. Cette unité permet<br />
<strong>de</strong> placer suffisamment précisément <strong>de</strong>s éléments sur une page Html, notamment <strong>de</strong>s<br />
images les unes par rapport aux autres.<br />
Par exemple pour une galerie photo, les miniatures ont toute la même hauteur :<br />
img.mini {<br />
}<br />
height: 120px;<br />
Remarque : Cette longueur est relative car la dimension réelle d’un pixel (p. ex. en<br />
pouces) dépend <strong>de</strong> l’écran : certains affichent 72 pixels par pouce, d’autres 96, etc.<br />
L’unité em fait référence à la taille du texte. Par exemple si le texte est <strong>de</strong> taille 12px,<br />
alors 1em vaut 12px, 2em vaut 24px, etc.<br />
Par exemple, on veut que les éléments d’une liste soient décalés d’environ quatre<br />
caractères :<br />
li {<br />
}<br />
margin-left: 4em;<br />
Pour terminer il existe aussi <strong>de</strong>s valeurs pour les longueurs qui sont en fait fonction<br />
d’une valeur courante. Par exemple, on veut agrandir certains paragraphes importants :<br />
p.important {<br />
}<br />
font-size: larger;<br />
Les valeurs et unités possibles pour une propriété <strong>de</strong> longueur dépen<strong>de</strong>nt <strong>de</strong> ce<br />
qu’accepte la propriété elle-même. Il faut pour cela bien consulter les définitions <strong>de</strong>s<br />
propriétés Css que l’on souhaite utiliser.<br />
2.3 Les polices <strong>de</strong> caractères<br />
Citons quelques propriétés usuelles <strong>de</strong>s polices <strong>de</strong> caractères (fonts).<br />
font-family définit la police à utiliser. Comme valeur, il existe <strong>de</strong>s familles prédéfinies<br />
serif, sans-serif, monospace, ou bien le nom d’une police présente sur l’ordinateur<br />
(à placer entre guillemets anglaises).<br />
Il est possible <strong>de</strong> spécifier un ordre <strong>de</strong> préférence : si la première police n’est pas<br />
trouvée, alors c’est la suivante qui est essayée. Il suffit <strong>de</strong> séparer les valeurs par<br />
<strong>de</strong>s virgules. Par exemple :<br />
26
h1, h2, h3 {<br />
}<br />
font-family: "Helvetica", "DejaVu Sans", sans-serif;<br />
font-weight définit la graisse <strong>de</strong> la police ; valeurs prédéfinies normal et bold ainsi que<br />
<strong>de</strong>s valeurs relatives au texte courant bol<strong>de</strong>r et lighter.<br />
font-size définit la taille <strong>de</strong> la police ; valeurs prédéfinies xx-small, x-small, small,<br />
medium, large, x-large et xx-large ; valeurs relatives au texte courant smaller et<br />
larger ou <strong>de</strong>s pourcentages ; ainsi que <strong>de</strong>s unités <strong>de</strong> longueurs (en particulier px).<br />
font-style définit la forme <strong>de</strong> la police ; valeurs prédéfinies italic, oblique, normal.<br />
3 Toujours plus, encore plus<br />
3.1 Sélecteurs <strong>de</strong> pseudo-classes<br />
En plus <strong>de</strong>s sélecteurs précé<strong>de</strong>nts, il existe <strong>de</strong>s sélecteurs <strong>de</strong> pseudo-classes. Ces<br />
sélecteurs particuliers sont prédéfinis et distinguent certains objets particuliers que le<br />
navigateur peut repérer facilement. Par exemple dans un paragraphe, la première lettre<br />
ou la première ligne peuvent être repérées par le navigateur, qui peut alors leur appliquer<br />
<strong>de</strong>s propriétés spécifiques (il s’agit respectivement <strong>de</strong>s pseudo-classes :first-letter et<br />
:first-line). Par exemple :<br />
p:first-letter {<br />
}<br />
font-size: 150%;<br />
p:first-line {<br />
}<br />
font-style: italic;<br />
De même, il existe <strong>de</strong>s pseudo-classes pour définir l’apparence <strong>de</strong>s liens selon qu’ils<br />
sont non visités, que la souris se trouve au-<strong>de</strong>ssus, qu’ils ont été visités ou qu’ils sont<br />
en train d’être activé (p .ex. par un clic) : il s’agit respectivement <strong>de</strong> :link, :visited,<br />
:hover et :active. Par exemple :<br />
a:link, a:visited, a:active {<br />
}<br />
text-<strong>de</strong>coration: un<strong>de</strong>rline;<br />
a:hover {<br />
text-<strong>de</strong>coration: none;<br />
color: white;<br />
background-color: black;<br />
}<br />
27
3.2 Combinaison<br />
Tous ces sélecteurs peuvent être combinés et regroupés afin <strong>de</strong> former <strong>de</strong>s sélecteurs<br />
complexes et précis :<br />
a.important:link, h1 {<br />
}<br />
bor<strong>de</strong>r-top: 1px;<br />
bor<strong>de</strong>r-bottom: 1px;<br />
avec par exemple le co<strong>de</strong> Html suivant :<br />
...<br />
L’Y<br />
est une commune <strong>de</strong> la Somme.<br />
...<br />
indique l’apparence <strong>de</strong>s liens <strong>de</strong> la classe important lorsqu’ils sont non visités : <strong>de</strong>ux<br />
bordures en haut et en bas sont affichées.<br />
28
4 Css mise en boîte<br />
Jusqu’à présent, nous avons défini un document Html, modifié son apparence par<br />
défaut (couleur, taille du texte, etc.), mais nous n’avons pas touché à sa mise en page<br />
par défaut (i.e. la position <strong>de</strong> ses éléments).<br />
Initialement, les éléments sont positionnés selon le flux normal. Des propriétés Css<br />
<strong>de</strong> positionnement permettent <strong>de</strong> changer la position initiale <strong>de</strong>s éléments : ou bien<br />
relativement au flux normal, ou bien en faisant sortir l’élément du flux normal.<br />
1 Flux normal : en-ligne ou bloc<br />
Lorsque le navigateur cherche à mettre en forme un document Html, il positionne<br />
les éléments du document les uns par rapport aux autres dans l’ordre <strong>de</strong> lecture du co<strong>de</strong>.<br />
Prenons l’exemple du co<strong>de</strong> suivant et <strong>de</strong> son affichage dans le navigateur.<br />
...<br />
<br />
Gottlob Frege<br />
<br />
Friedrich Ludwig Gottlob Frege (8/11/1848 à Wismar,<br />
26/07/1925 à Bad Kleinen), était un mathématicien, logicien et un philosophe<br />
allemand.<br />
<br />
Frege est certainement un <strong>de</strong>s plus grands logiciens <strong>de</strong>puis Aristote,<br />
...<br />
<br />
<br />
...<br />
Éléments <strong>de</strong> type bloc ou en-ligne Lorsque le navigateur rencontre le titre (h1),<br />
il le positionne sans aucun autre élément à ses côtés ; il est seul sur la ligne et occupe<br />
29
toute la largeur <strong>de</strong> la ligne. De même lorsqu’il rencontre un paragraphe. On dit que ce<br />
sont <strong>de</strong>s éléments <strong>de</strong> type bloc (block).<br />
Mais à l’intérieur du premier paragraphe, l’élément strong se trouve lui, côte à côte<br />
avec le reste du texte. Il en est <strong>de</strong> même pour l’élément img 2 . On dit que ce sont <strong>de</strong>s<br />
éléments <strong>de</strong> type en-ligne (inline).<br />
Flux normal Le flux normal consiste à positionner les éléments dans leur ordre d’apparition<br />
dans le co<strong>de</strong> Html <strong>de</strong> la façon suivante :<br />
– si l’élément est <strong>de</strong> type bloc, alors on l’affiche sur une nouvelle ligne qu’il occupe<br />
seul ;<br />
– s’il est <strong>de</strong> type en-ligne, on l’affiche sur la ligne en <strong>cours</strong> s’il reste <strong>de</strong> la place, sinon<br />
on en commence une nouvelle sur laquelle on le place au début.<br />
Modification du type d’un élément Il est possible en Css <strong>de</strong> modifier la façon<br />
dont doit être traité un élément, c’est-à-dire d’indiquer qu’un élément est <strong>de</strong> type bloc<br />
alors qu’il est par défaut <strong>de</strong> type en-ligne et vice versa.<br />
Par exemple pour une image, il est fréquent <strong>de</strong> la redéfinir <strong>de</strong> type bloc :<br />
img {<br />
}<br />
display: block;<br />
2 Modèle <strong>de</strong> boîte (box mo<strong>de</strong>l)<br />
Conservons l’exemple précé<strong>de</strong>nt, et rendons visible la bordure <strong>de</strong> tous les éléments :<br />
* {<br />
bor<strong>de</strong>r: 5px solid red;<br />
}<br />
Chaque élément possè<strong>de</strong> une bordure, et on constate bien que le titre occupe toute la<br />
largeur <strong>de</strong> sa ligne. Il y a donc un espacement entre la <strong>de</strong>rnière lettre du titre et le bout<br />
<strong>de</strong> la ligne. Par contre pour les éléments en-ligne, cet espacement semble nul.<br />
2. Qui d’ailleurs impose sa hauteur à la ligne sur laquelle il se trouve.<br />
30
En fait, chaque élément est contenu dans une boîte qui possè<strong>de</strong> différents espacements,<br />
internes (padding) et externes (margin), ainsi qu’une bordure (bor<strong>de</strong>r).<br />
Il est possible <strong>de</strong> changer la valeur <strong>de</strong>s ces espacements par les propriétés Css suivantes,<br />
qui acceptent les unités <strong>de</strong> longueur vues précé<strong>de</strong>mment (ssec 2.2, p. 25) :<br />
width, height,<br />
padding-top, padding-right, padding-bottom, padding-left,<br />
margin-top, margin-right, margin-bottom, margin-left,<br />
bor<strong>de</strong>r-top, bor<strong>de</strong>r-right, bor<strong>de</strong>r-bottom, bor<strong>de</strong>r-left.<br />
Par exemple :<br />
strong {<br />
}<br />
margin-left: 10px;<br />
padding-right: 20px;<br />
Remarque Les unités <strong>de</strong> longueur relatives (%, em) le sont par rapport au bloc conteneur<br />
<strong>de</strong> l’élément auxquelles elles sont appliquées (voir ci-après, par. 3, p. 33).<br />
2.1 Application : centrage horizontal<br />
Une valeur intéressante <strong>de</strong>s marges est la valeur auto. Cette valeur indique au navigateur<br />
<strong>de</strong> répartir l’espace restant disponible si l’élément est <strong>de</strong> type bloc 3 .<br />
Ainsi, pour centrer horizontalement un élément par rapport à son bloc conteneur<br />
(p. ex. une image dans un paragraphe), il suffit d’indiquer la valeur auto à ses marges<br />
gauche et droite :<br />
img {<br />
}<br />
display: block;<br />
margin-left: auto;<br />
margin-right: auto;<br />
3 Les types <strong>de</strong> positionnement<br />
Il est possible en Css <strong>de</strong> faire sortir les éléments du flux normal. On peut alors<br />
contrôler précisément l’emplacement <strong>de</strong>s éléments dans une page.<br />
3. Si l’élément est <strong>de</strong> type en ligne, <strong>de</strong>s marges auto sont nulles (0).<br />
31
Statique (static) Le positionnement statique est le positionnement par défaut. Il<br />
s’obtient en fixant la valeur static à la propriété position <strong>de</strong> l’élément ciblé par la<br />
règle Css. Par exemple pour les paragraphes :<br />
p {<br />
}<br />
position: static;<br />
Cette valeur <strong>de</strong> la propriété position est utile afin <strong>de</strong> revenir au comportement par<br />
défaut (flux normal). Elle est très peu utilisée.<br />
Relatif (relative) Le positionnement relatif permet <strong>de</strong> placer un élément par rapport<br />
à l’emplacement qu’il aurait eu dans le flux normal, en introduisant un décalage par<br />
rapport aux côtés <strong>de</strong> sa boîte par défaut (top, right, bottom, left). La place qu’il<br />
aurait occupé dans le flux normal est conservée. Par exemple sur le document Html<br />
précé<strong>de</strong>nt :<br />
strong {<br />
}<br />
position: relative;<br />
top: 20px;<br />
left: 30px;<br />
Attention : l’élément ainsi « décalé » peut chevaucher d’autres éléments, et les masquer<br />
en partie.<br />
Remarque Le positionnement relatif est souvent utilisé avec <strong>de</strong>s valeurs nulles (0)<br />
aux propriétés top, bottom, etc. afin d’utiliser l’élément comme bloc conteneur (voir<br />
positionnement absolu ci-après).<br />
Fixé (fixed) Le positionnement fixé consiste à positionner un élément par rapport<br />
à la zone d’affichage entière : même si l’on fait défiler la page, l’élément reste à sa<br />
place ; il ne défile pas.<br />
32
Un élément en position fixée est placé par rapport au haut (top), au bas (bottom),<br />
à la gauche (left) et à la droite (right) <strong>de</strong> la zone d’affichage. Par défaut, les valeurs<br />
<strong>de</strong> ces propriétés sont celles qu’aurait eu l’élément s’il était resté dans le flux normal.<br />
L’élément est retiré du flux normal : l’emplacement qu’il aurait occupé dans le<br />
flux normal n’est pas conservé.<br />
Par exemple :<br />
img {<br />
}<br />
position: fixed;<br />
top: 10px;<br />
right: 20px;<br />
Il faut encore une fois faire attention au recouvrement <strong>de</strong>s autres éléments.<br />
Remarque : Si l’on indique en même temps <strong>de</strong>s valeurs pour top et bottom (ou right<br />
et left), alors la hauteur <strong>de</strong> l’élément height (resp. width) est calculée par le navigateur<br />
(en ajustant les marges ou autre). Par exemple, si l’on souhaite qu’un élément tienne<br />
sur toute la hauteur <strong>de</strong> la page, on peut fixer top et bottom à 0.<br />
Absolu (absolute) Le positionnement absolu est l’un <strong>de</strong>s plus puissants, mais aussi<br />
le plus complexe à mettre en œuvre : il s’agit <strong>de</strong> retirer un élément du flux normal<br />
et <strong>de</strong> le positionner par rapport à son bloc conteneur. Ce bloc conteneur est le<br />
premier élément qui n’est pas en position statique et qui contient (dans le<br />
co<strong>de</strong> Html) l’élément en question.<br />
img {<br />
}<br />
position: absolute;<br />
bottom: 10px;<br />
right: 0;<br />
33
Dans cet exemple le bloc conteneur est l’élément dont la balise est body. L’image est<br />
donc positionnée par rapport aux bords <strong>de</strong> la page toute entière.<br />
Pour positionner l’image par rapport au paragraphe qui la contient, il faut que le<br />
paragraphe <strong>de</strong>vienne le bloc conteneur <strong>de</strong> l’image. Pour cela, il suffit <strong>de</strong> changer le type <strong>de</strong><br />
positionnement du paragraphe (qu’il ne soit plus en position statique). L’astuce consiste<br />
à définir le paragraphe en position relative, et <strong>de</strong> conserver ses valeurs automatiques <strong>de</strong><br />
positionnement : ainsi l’emplacement du paragraphe dans le flux normal est conservé<br />
sans aucun décalage (par défaut top, left, etc. sont à 0). Ce qui donne :<br />
p {<br />
}<br />
position: relative;<br />
img {<br />
position: absolute;<br />
top: 10px;<br />
right: 20px;<br />
}<br />
34
Attention : On remarque que l’image débor<strong>de</strong> <strong>de</strong> son bloc conteneur (le paragraphe)<br />
et chevauche le paragraphe suivant.<br />
Flottant (float) Un élément en position flottante sort du flux normal, et les éléments<br />
qui suivent (dans le co<strong>de</strong> Html) « coulent » autour.<br />
Un élément peut flotter ou bien à gauche, ou bien à droite. Sa position par rapport<br />
au haut <strong>de</strong> son bloc conteneur est la position qu’il aurait eu dans le flux normal. Par<br />
exemple :<br />
img {<br />
}<br />
float: left;<br />
On voit que le titre « Biographie » suivant coule aussi autour <strong>de</strong> l’image lorsqu’elle<br />
est flottante. Il est possible d’empêcher cela, on peut indiquer qu’un élément n’accepte<br />
pas d’élément flottant à sa gauche (left), à sa droite (right) ou les <strong>de</strong>ux (both). Il est<br />
alors placé en <strong>de</strong>ssous, à la suite.<br />
Par exemple, en indiquant que le titre « Biographie » n’accepte pas d’élément flottant<br />
à sa gauche :<br />
h2 {<br />
}<br />
clear: left;<br />
35
4 Éléments génériques div et span<br />
Pour <strong>de</strong>s besoins esthétiques, il arrive qu’il soit nécessaire d’ajouter <strong>de</strong>s boîtes pouvant<br />
contenir plusieurs éléments Html dans le seul objectif <strong>de</strong> leur appliquer un style<br />
ou une position. Les éléments Html div et span sont <strong>de</strong>s éléments Html génériques <strong>de</strong><br />
type bloc et <strong>de</strong> type en-ligne respectivement.<br />
Par exemple, supposons que l’on veuille construire un sommaire à la page précé<strong>de</strong>nte,<br />
comportant un titre et une liste, afin d’appliquer un style et une position à l’ensemble.<br />
Il suffit pour cela <strong>de</strong> délimiter le co<strong>de</strong> Html du sommaire (titre et liste) <strong>de</strong> balises<br />
div. Afin d’y appliquer un style, nous i<strong>de</strong>ntifions ce bloc par l’attribut id :<br />
<br />
Sommaire<br />
<br />
<br />
#toc {<br />
}<br />
<br />
Biographie<br />
Contribution en logique et en mathématiques<br />
<br />
<br />
<br />
Apport <strong>de</strong> Frege aux mathématiques<br />
Éléments <strong>de</strong> base <strong>de</strong> sa logique<br />
Calcul <strong>de</strong>s prédicats<br />
Philosophie du langage<br />
<br />
<br />
<br />
Sens et dénotation<br />
On peut alors appliquer un style à tout ce bloc qu’on a nommé toc :<br />
position: fixed;<br />
top: 10px;<br />
left: 10px;<br />
width: 350px;<br />
background-color: silver;<br />
padding: 10px;<br />
Au passage, on augmente la marge gauche du reste du document pour éviter le<br />
chevauchement du sommaire avec le texte du document :<br />
body {<br />
}<br />
margin-left: 400px;<br />
36
De la même façon, les balises génériques span permettent <strong>de</strong> délimiter une boîte<br />
générique en-ligne.<br />
Remarque Les éléments div et span n’ont pas <strong>de</strong> signification particulière : il ne faut<br />
les utiliser que lorsqu’aucune autre balise Html ne peut convenir.<br />
5 Conclusion<br />
Avec un peu d’astuce et d’imagination, il est possible <strong>de</strong> développer <strong>de</strong> magnifiques<br />
mises en page, tout en conservant un co<strong>de</strong> Html simple et clair. Malheureusement,<br />
l’introduction d’élément sans contenu sémantique div et span, souvent nécessaire pour<br />
les mises en page complexes, casse la séparation du contenu et <strong>de</strong> la forme.<br />
En pratique, et pour ne pas abuser <strong>de</strong>s éléments Html génériques, on peut :<br />
1. décrire son site en Html sans utiliser div ni span ;<br />
2. établir une maquette visuelle <strong>de</strong> l’apparence souhaitée <strong>de</strong> son site ;<br />
3. s’approcher au mieux <strong>de</strong> la maquette par du co<strong>de</strong> Css et sans modifier le co<strong>de</strong><br />
Html ;<br />
4. modifier le co<strong>de</strong> Html en introduisant <strong>de</strong>s éléments div ou span lorsque nécessaire ;<br />
5. répéter les étapes 3 et 4 jusqu’à obtention d’un résultat satisfaisant.<br />
37
5 Bonus<br />
Voici quelques cas pratiques simples inspirés <strong>de</strong> documents usuels. Ils font intervenir<br />
<strong>de</strong> façon simple et immédiate les notions abordées dans ce <strong>cours</strong>. Ces exemples peuvent<br />
servir <strong>de</strong> base à <strong>de</strong>s mises en page plus évoluées.<br />
1 Lettrine<br />
Une lettrine est une lettre initiale décorée placée en tête d’un texte et occupant une<br />
hauteur supérieure à la ligne courante.<br />
Créer une lettrine est très simple. Il suffit <strong>de</strong> combiner la pseudo-classe first-letter<br />
pour sélectionner la première lettre d’un paragraphe, puis <strong>de</strong> lui appliquer une position<br />
flottante à gauche (pour les langues écrites <strong>de</strong> gauche à droite). Il ne faut pas oublier<br />
d’augmenter sa taille, et le tour est joué !<br />
p:first-letter {<br />
}<br />
float: left;<br />
font-size: 300%;<br />
Bien sûr, on peut changer la police <strong>de</strong> la lettrine, sa couleur, son fond, ses bordures, etc.<br />
2 Notes <strong>de</strong> marge<br />
Pour obtenir <strong>de</strong>s notes <strong>de</strong> marge, nous combinons le positionnement absolu, l’utilisation<br />
<strong>de</strong> balises span, la définition d’une classe, ainsi que la modification <strong>de</strong>s marges<br />
d’un document.<br />
Par exemple, prenons le document Html suivant :<br />
<br />
<br />
<br />
<br />
Notes <strong>de</strong> marge<br />
<br />
38
<br />
Notes dans la marge<br />
Explications<br />
<br />
Par défaut, un élément positionné <strong>de</strong> façon absolue se trouve à l’emplacement<br />
...<br />
<strong>de</strong> construire facilement <strong>de</strong>s notes dans la marge.<br />
<br />
Lorem ipsum<br />
<br />
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam a lorem eu<br />
...<br />
Fusce non lorem et nibh condimentum suscipit. Curabitur<br />
tempus varius diam quis bibendum. Sed vel eros id odio facilisis<br />
...<br />
<br />
Fusce ac<br />
<br />
Fusce ac sem vitae augue suscipit rhoncus. Curabitur quis velit non diam<br />
...<br />
Quisque porta pretium turpis commodo aliquet. Morbi<br />
...<br />
pharetra ultrices, nibh magna bibendum tortor, id semper dolor nunc at dolor.<br />
<br />
...<br />
<br />
<br />
Les éléments span dont la classe est note représentent nos notes <strong>de</strong> marge. Il faut<br />
donc les faire sortir du flux normal (propriété position), les placer près du bord gauche<br />
(left), puis augmenter la marge gauche (margin-left) du document pour éviter les<br />
chevauchements avec le texte normal :<br />
body {<br />
}<br />
margin-left: 200px;<br />
.note {<br />
position: absolute;<br />
top: auto;<br />
left: 20px;<br />
width: 160px;<br />
text-align: right;<br />
39
}<br />
Puisque la valeur <strong>de</strong> top pour les notes n’est pas modifiée, elle vaut alors auto. Ainsi<br />
la position <strong>de</strong>s notes <strong>de</strong> marge par rapport au haut <strong>de</strong> la page est la même que celle<br />
qu’aurait eu la note dans le flux normal.<br />
Sur l’image suivante, les points (rouges) représentent l’emplacement qu’aurait eu la<br />
note <strong>de</strong> marge dans le flux normal.<br />
3 Mise en page complète<br />
Il est d’usage <strong>de</strong> concevoir une vue schématique <strong>de</strong>s pages d’un site. Le schéma<br />
suivant illustre une présentation classique d’un site internet en <strong>de</strong>ux colonnes, dont<br />
l’une (nav) est dédiée à la navigation :<br />
hea<strong>de</strong>r<br />
content<br />
main<br />
nav<br />
footer<br />
Afin <strong>de</strong> réaliser effectivement cette présentation en Html et Css, nous utilisons :<br />
– le positionnement <strong>de</strong>s éléments dans le flux normal,<br />
– <strong>de</strong>s éléments Html div,<br />
40
– du positionnement flottant,<br />
– et <strong>de</strong>s marges.<br />
Pour décrire les élément du schéma (hea<strong>de</strong>r, footer, etc.), on utilise <strong>de</strong>s blocs génériques<br />
div auxquels on associe un i<strong>de</strong>ntifiant :<br />
<br />
<br />
<br />
<br />
<br />
<br />
Mise en page complète<br />
<br />
<br />
...<br />
<br />
<br />
<br />
...<br />
<br />
<br />
...<br />
<br />
<br />
<br />
...<br />
<br />
<br />
<br />
On constate que les blocs #hea<strong>de</strong>r, #content et #footer sont par défaut à la suite<br />
dans le flux normal : ils sont déjà placés les uns en <strong>de</strong>ssous <strong>de</strong>s autres. Il suffit simplement<br />
<strong>de</strong> définir la hauteur <strong>de</strong> #hea<strong>de</strong>r et #footer puisqu’on la connaît :<br />
#hea<strong>de</strong>r {<br />
}<br />
height: 150px;<br />
#footer {<br />
}<br />
height: 50px;<br />
41
Ces blocs seront probablement <strong>de</strong>s blocs conteneurs pour les éléments Html qu’ils<br />
vont contenir, on change alors leur positionnement :<br />
#hea<strong>de</strong>r, #content, #footer {<br />
}<br />
position: relative;<br />
À l’intérieur du bloc #content, nous faisons flotter le bloc #nav à gauche et définissons<br />
la marge gauche du bloc #main pour éviter le chevauchement à la même valeur que la<br />
largeur du bloc #nav. Ce qui donne :<br />
#nav {<br />
}<br />
float: left;<br />
width: 250px;<br />
#main {<br />
}<br />
margin-left: 250px;<br />
Le bloc #main doit aussi être un bloc conteneur :<br />
#main {<br />
}<br />
position: relative;<br />
Si le contenu du bloc #main est plus petit que celui du bloc #nav, alors le bloc #footer<br />
risque <strong>de</strong> se placer à gauche <strong>de</strong> #nav (car #nav est flottant). Pour éviter cela, il suffit<br />
d’empêcher le bloc #footer <strong>de</strong> se trouver à côté d’un flottant :<br />
#footer {<br />
}<br />
clear: both;<br />
Ce co<strong>de</strong> Css peut être con<strong>de</strong>nsé en rassemblant les différentes déclarations pour<br />
donner au final le fichier style.css suivant :<br />
#hea<strong>de</strong>r, #content, #footer, #main {<br />
}<br />
position: relative;<br />
#hea<strong>de</strong>r {<br />
}<br />
height: 150px;<br />
#nav {<br />
float: left;<br />
width: 250px;<br />
}<br />
#main {<br />
margin-left: 250px;<br />
42
}<br />
#footer {<br />
}<br />
height: 50px;<br />
clear: both;<br />
Chacune <strong>de</strong>s pages du site peut utiliser le même co<strong>de</strong> Css style.css. Tous les fichiers<br />
Html auront la structure <strong>de</strong> base du fichier Html précé<strong>de</strong>nt : il suffira <strong>de</strong> remplir le<br />
contenu <strong>de</strong>s éléments #hea<strong>de</strong>r, #nav, #main et #footer dans le co<strong>de</strong> Html.<br />
Ceci facilite la maintenance et permet une certaine homogénéité visuelle.<br />
Html et Css c’est bon ; mangez-en !<br />
43