Le plus simple pour entamer notre survol du codage manuel des feuilles de style est de commencer par les feuilles de style locales. C'est ce qu'on devrait utiliser le moins souvent possible, pour des raisons qui vont s'éclaircir peu à peu (du moins l'espérons-nous :-), mais c'est le plus facile à expliquer.
Imaginons qu'on veuille mettre
un morceau de texte en bleu et avec
des caractères plus grands que dans le reste du paragraphe.
Il suffira de l'enserrer dans une balise <span>... </span>
avec un attribut de style style="..."
spécifiant la couleur et la taille des caractères :
Pour appliquer cet effet à tout un paragraphe, il suffirait de placer ce
même attribut de style dans la balise de paragraphe
<P style="...">... </P> (attention, avec les
CSS, il est impératif de toujours fermer les balises HTML).
La feuille de style locale est ce qui se trouve entre les guillemets de l'attribut de style. Elle est composée ici de deux instructions, chacune d'entre elles comprenant 4 parties :
On peut enchaîner autant d'instructions que l'on veut ; les noms des propriétés et des valeurs qu'on leur attribue doivent respecter les recommandations officielles (toute erreur entraine l'annulation de l'instruction).
<style type="text/css">
<!--
...déclarations de style...
-->
</style>
P {font-size:1.25em; color:blue;}
c'est-à-dire que les instructions sont les
couples propriété:valeur; que nous avons vus plus
haut, tandis que le sélecteur est ici la balise HTML
« P » des paragraphes. Plus généralement,
il y a quatre grandes catégories de sélecteurs possibles,
correspondant aux quatre familles de déclarations suivantes :
BODY {font-family:verdana; color:black;}
BODY,P,TD {font-family:verdana; color:black;}
BODY,P,TD {font-family:verdana; color:black;}
TD {font-size:smaller;}
.rouge {color:red;}.
(noter l'emploi du point dans le sélecteur ; on peut mettre
ensuite le nom que l'on veut.)
<span class="rouge">... </span>
ou bien <td class="rouge">... </td>
(mais cette
fois, sans le point dans le nom de classe).
Nous reviendrons plus loin sur cette notion de classe de style.
a:hover {color:red; font-weight:bold}
(noter la présence du deux-points dans le sélecteur ;
le nom qui suit est obligatoirement l'un des noms fixés dans les CSS).
#bloc23 {position:absolute; top:20px;...}
ID) d'un des éléments HTML de la page. La suite des instructions de la
déclaration va alors constituer le style appliqué à cet élément.
style="..." codé dans l'élément
lui-même, mais cette façon de faire sépare plus nettement les
instructions de rendu (toutes regroupées dans la feuille interne) et le
texte lui-même ; en d'autres termes,
on sépare mieux ainsi la forme et le fond de la page.
#bloc23,#bloc#24 {position:absolute; color:blue...}
au moins pour les propriétés de style communes à tous les
éléments concernés, quitte à compléter plus
loin pour les propriétés spécifiques aux différents
éléments :
#bloc23 {top:20px; left:56px;}
#bloc24 {top:120px; left:240px;}
etc...
De même, cette feuille de style interne est généralement
placée dans la
section <HEAD>. Elle marcherait aussi bien dans la
section <BODY>, mais comme c'est là qu'est la place
naturelle du
contenu de la page, on tâchera d'éviter cette pratique.
Une feuille de style externe est un fichier texte qui ne contient que des déclarations de style tout à fait semblables à celles d'une feuille de style interne. Le nom de ce fichier doit avoir une extension "css" — par exemple, "mon_style.css". Pour que la page prenne ces déclarations en compte, on la reliera au fichier externe par l'instruction suivante :
<link rel="STYLESHEET" type="text/css"
href="mon_style.css">
Bien entendu, si le fichier de style n'est pas au même niveau que la
page dans l'arborescence du site, on indiquera la bonne adresse dans le
href="...".
Cependant, les recommandations CSS2 ont prévu qu'une même page puisse
recevoir des styles différents selon qu'on l'examine sur un écran
ou qu'on l'écoute avec un navigateur oral, ou encore qu'on l'imprime.
Cela se traduit par l'apparition d'un
nouvel attribut "media" dans la balise
<LINK> :
<link rel="STYLESHEET" type="text/css"
media="all" href="mon_style.css">
Ce media="all" signifie «pour tous les media» ; on
peut aussi avoir media="screen" (pour l'écran),
media="print" (pour l'impression), media="aural"
(pour écouter) et
bien d'autres possibilités encore...
mais sans doute pas encore toutes implantées dans les navigateurs actuels.
<LINK> ci-dessus, puisque les deux seraient toujours appliqués
avec ce media="all".
En pratique, il y en a une, très importante : parmi les navigateurs qui
interprétent les styles, NN4, qui les lit si mal,
ne reconnaît pas le deuxième appel.
On a donc un moyen d'uniformiser les rendus en faisant deux feuilles de
style externes, une première qui sera lue par NN4 avec un <LINK>
simple, et une deuxième feuille, destinée aux navigateurs plus conformes aux
normes du W3C, qui sera reliée avec un <LINK media="all">.
Malheureusement, il existe des navigateurs alternatifs beaucoup plus
récents (iCab, pour MacOS, par exemple), qui ne lisent toujours pas ces <LINK
media="all">... et qui affichent alors un rendu malheureux :-(
Il n'y a guère de solution bien commode, sinon attendre que NN4
devienne complètement marginal (ça vient, ça vient...)
Notez enfin qu'il y a d'autres techniques pour faire des feuilles de style multi-media.
Quand on doit revenir sur une feuille de style complexe où se sont
accumulées un grand
nombre d'instructions, il est agréable d'avoir des commentaires qui
expliquent à quoi sert telle ou telle déclaration, ou pourquoi on a fait
tel ou tel choix dans les rendus. On placera ces commentaires entre les
symboles /* et */. Exemple :
/* pour des explications en petits caracteres :*/
div.nota
{font-size: 87%; /* OK en dehors de NN4 */
margin-left: 2em;
etc... }
A la base, une classe de style est simplement ce que nous avons défini plus haut, c.à.d. une déclaration avec un sélecteur commençant par un point, et susceptible de s'appliquer à n'importe quel élément HTML pouvant recevoir ce style.
P.special{font-size:larger; color:red;}
définit une classe "special" qu'on ne pourra appliquer qu'à
des balises <P>.
<DIV> ou <SPAN> sans rendu spécifique.
L'inconvénient est qu'un navigateur ne lisant pas les styles (et on peut
toujours déconnecter cette interprétation pour aller plus vite) ferait de
la bouillie d'une telle page. Il vaut mieux continuer à utiliser des
balises <P>, <H1>, <H2>, etc... qui,
redéfinies ou non par des déclarations de style, maintiendront toujours
une certaine structure à la page.
Les classes permettent de donner un style à tous les «éléments» d'une page HTML, c'est-à-dire à tout ce qui peut être contenu dans un bloc contrôlé par une balise HTML. Mais ça ne suffit pas. Par exemple, comment mettre des styles sur les différents états possibles des liens (non visités, visités, survolés...), ou sur la première lettre d'un paragraphe (concept de lettrine), ou sur la première ligne d'un paragraphe ? Pour cela, les pères des CSS ont imaginé le concept des pseudo-classes et des pseudo-éléments. Dans toutes les déclarations correspondantes, le sélecteur contient un deux-points.
Les pseudo-classes les plus importantes sont certainement les pseudo-classes de liens:
a:link {...} pour les liens non visitésa:visited {...} pour les liens visitésa:hover {...} pour les liens survolésa:active {...} pour les liens «activés»
(c.à.d. la souris est dessus, le
bouton est pressé le bouton, mais pas relâché)
a:link {color:blue; text-decoration:none;}
a:hover {color:red; text-decoration:none;}
<a href=...>), suivie
d'un deux-points et d'un mot spécial. On peut aussi combiner les concepts de
classe et de pseudo-classe, pour former des pseudo-classes "link",
"visited" sur des classes de liens.
Par exemple, les déclarations
a.italique:link {color:orange; font-style:italic;}
a.italique:visited {color:green; font-style:italic;}
a.italique:hover{color:red; font-weight:bold;font-style:italic;}
(en fait la lettre initiale "a" est facultative)
conjuguées à des liens de classe italique
(c.à.d. avec un codage <a class="italique" href=...>)
mettront ceux-ci en
italiques, orange au départ, rouge et gras sous la souris, vert après le clic.
Démonstration : voyez ici sur ce lien... si votre
navigateur le veut bien (en général les styles link et hover
marchent très correctement... Je n'en dirais pas autant pour le style
visited :-).
a:focus{...}
pour les liens qui viennent d'être activés, mais l'implémentation laisse
encore à désirer : parmi les navigateurs qui y répondent, comme IE5 ou NN6
sur Mac, on peut agir sur la couleur (par exemple), mais pas sur le petit cadre qui apparaît
autour du lien et que certains trouvent gênant.
Citons enfin deux pseudo-éléments très simples à expliquer :
p:first-letter {...} pour singulariser la première
lettre d'un paragraphe p:first-line {...} pour singulariser la première
ligne d'un paragraphe
A titre d'exemple, si votre navigateur le permet, ce paragraphe devrait commencer par une lettrine de taille double et une première ligne spéciale en petites capitales.
Nous reviendrons plus tard sur ces deux pseudo-éléments. En fait, il y en a beaucoup d'autres de prévus dans la norme CSS2, mais nettement plus complexes... et dont l'implantation laisse toujours à désirer en ce début 2002. On se reportera au lien précédent pour en savoir davantage.
<ul> à l'intérieur des cellules
<td> d'une table), <h2> juste après un titre
<h1>), Par exemple :
TD > UL { instructions...}
appliquerait un style à une liste UL contenue dans une cellule
TD de table (sélecteur d'enfant). L'élément
modifié doit être un enfant direct du premier élément.
TD EM { instructions...}
appliquerait un style à un bloc EM contenu dans une cellule
TD de table, que ce bloc soit un descendant direct ou non
(sélecteur descendant).
H1 + H2 { instructions... }
modifierait le style d'un H2
juste après un H1 (sélecteur d'enfants adjacents)
A[title] {instructions...}
modifierait le style
d'une balise A contenant un attribut title
(sélecteur d'attribut)
On peut aussi former des pseudo-classes sur ces sélecteurs composites.
Par exemple
A[title]:link, A[title]:hover {font-weight:bold}
permettrait de mettre en gras tous les liens contenant une bulle d'aide
par title,
à la fois pour le lien normal et le lien survolé,
afin de mieux les signaler à
l'attention du visiteur.
Voyez ces deux derniers liens, tous deux avec une bulle : en cette
mi-2002, ça fonctionne bien sur NN6 ou Mozilla ; aussi sur
Opera (enfin.., OK sur Windows, mais on se heurte à un bug dans title
sur Opera5-Mac) ; pas du tout sur IE5 ou 6 (c.à.d. ces deux liens ne
passent pas en gras) :-(.