<font>
, <big>
, <b>
, <i>
, <center>
,
attributs color
et bgcolor
…Très rapidement, les limites de cette approche se font sentir.
En 1996, apparition du langage CSS, cascading style sheets : sépare proprement du HTML tout ce qui concerne la présentation, et non le contenu
style
<h1 style="color:red; font-style:italic;">Mon titre</h1>
Contient un ou plusieurs couples propriété-valeur,
séparés par des points-virgules
(ici color:red
et font-style:italic
)
red
pour la propriété color
italic
pour la propriété font-style
Résultat : le titre sera rouge et en italique
Il y a de nombreuses propriétés CSS (une liste ici)
Vous allez en découvrir une bonne partie dans ce cours, souvent par vous-mêmes
color
, couleur du texte (ex. color: blue
)background-color
, couleur du fond (ex. background-color: black
)font-family
, police du texte (ex. font-family: Verdana
)font-size
, taille de la police (ex. font-size: 120%
)font-style
, style de la police (ex. font-style: italic
)font-weight
, graisse de la police (ex. font-weight: bold
)border
, cadre autour de l'élément (ex. border: 1px solid black
)text-align
, contrôle l'alignement du texte (ex. text-align: center
)text-decoration
, décoration du texte (ex. text-decoration: underline
)Noter dans les exemples que ces propriétés ont des valeurs assez différentes : on ne peut pas deviner comment une propriété fonctionne juste en regardant son nom !
style
Il est très rare de vouloir appliquer un style à un unique élément : en général on veut un style pour les titres, un style pour les paragraphes, un style pour les liens, etc.
style
, il faut recopier un même style à de nombreux endroits différents
CSS permet de déclarer des règles
On les met dans un élément style
dans l'en-tête du document,
ou alors dans une feuille de style externe
h1 {
color: red;
font-style: italic;
}
h1
), qui choisit
à quels éléments s'applique la règle ;Règles CSS dans l'en-tête = document plus facile à maintenir…
… mais il faut recopier toutes les règles pour chaque page web du site
<link rel="stylesheet" href="mon_style.css" />
Feuille de style commune à toutes les pages d'un site ⇒ une seule ligne à changer pour changer la couleur des titres de toutes les pages
Inversement, à partir d'une même page HTML, on peut obtenir des rendus extrêmement variés en changeant simplement le lien vers la feuille de style
Démonstration : CSS Zen Garden
<link rel="stylesheet" href="ecran.css" media="screen" />
<link rel="stylesheet" href="papier.css" media="print" />
L'attribut media
de l'élément link indique à quel média s'applique la feuille de styleLes navigateurs (et les proxys) utilisent un mécanisme de cache : ils gardent en mémoire les pages visitées, pour éviter de les télécharger à nouveau quand l'internaute y retourne
Les feuilles de style permettent d'exploiter ce mécanisme : le style n'est téléchargé qu'une seule fois pour un même site, pas une fois par page
Exploitation du cache d'autant plus efficace que le contenu d'un site change généralement plus souvent que le style
Au passage, attention, la mise en cache du CSS par les navigateurs est pénible lorsque l'on code : parfois, modifier le CSS semble ne pas avoir d'effet… parce que le navigateur nous montre toujours l'ancienne version !
il faut faire un hard reload, c'est-à-dire actualiser la page en forçant le vidage du cache (sous Firefox, faire Ctrl-Shift-R, ou Ctrl-F5 (attention, pas Shift-F5)
Pourquoi la feuille de style est-elle parfois mise en cache et parfois non ? C'est parce que la mise en cache est heuristique — quelques explications ici
h1 {
color: red;
}
h1 {
font-style: italic;
}
le titre est en rouge et en italique
Les deux règles s'appliquent : c'est la cascade, chaque règle s'ajoute aux précédentes.
NB : le titre est aussi en gras et en plus grand que le texte
slide déplacée dans le cours bonnes pratiques CSS
On a vu qu'une règle CSS est composée d'un sélecteur et d'une liste de couples propriété-valeur
Pour l'instant, on n'a utilisé comme sélecteur que le type d'un élément, mais on peut faire bien d'autres choses…
h1, h2, h3 {
color: red;
text-decoration: underline;
}
h3 {
font-weight: normal;
}
encore une application du principe DRY
*
,
qui sélectionne tous les éléments. Utile pour débugger : essayer
* { border: 1px solid black; }
/* je suis un commentaire */
/*
et */
ne sera pas interprété par le navigateur