19.11.2014 Views

Support de cours - Lita

Support de cours - Lita

Support de cours - Lita

SHOW MORE
SHOW LESS

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

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

Saved successfully!

Ooh no, something went wrong!