19.11.2014 Views

Support de cours - Lita

Support de cours - Lita

Support de cours - Lita

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!