Il y a peu de science en CSS.
Des propriétés par dizaines. Des valeurs par douzaines. Des lignes de conduite.
Tout l’art en CSS consiste à manier l’indépendance des éléments, la concision du code et l’efficacité des sélecteurs.
Pour commencer : Fichier -> Nouveau document
p{ color: magenta;}
Sauvegarder -> style.css
Ouvrez index.html et rechargez la page.
La beauté incontestable de cette page vous laisse sans voix.

La syntaxe est là :
selecteur{ propriété: valeur;}
Le <p>
du HTML est stylé grâce au p en CSS. En vérité, tous les <p>
sont stylés comme tel.
Mais voilà, on ne veut pas forcément styler tous les <p>
mais seulement certains, voire un seul.
On peut alors sélectionner certains <p>
en leur ajoutant l’attribut “class”.
<p class="introduction">Les roses sont rouges.</p>
Une classe en HTML correspond à un point “.” en CSS.
.introduction{ color: pink;}
Cette classe est réutilisable autant de fois que vous le voulez, et peut s’appliquer à d’autres balises aussi.
Si vous ne voulez styler qu’un seul élément, utilisez l’identifiant :
<p id="introduction">Les violettes sont bleues.</p>
Un id en HTML correspond à un dièse “#” en CSS.
#introduction{ color: purple;}
L’inconvénient de l’id est qu’il n’est utilisable qu’une seule fois par page HTML. Je le déconseille.
Un tableau vaut mieux que mille mots.
HTML | Sélecteurs CSS possibles | Signification |
---|---|---|
<p></p> |
p | Tous les <p> |
<div class="global"></div> |
div .global div.global |
Toutes les <div> Tous les éléments avec class=”global” Toutes les <div> ayant class=”global” |
<ul id="menu"> |
#menu ul#menu |
L’élément qui a id=”menu” Le <ul> qui a id=”menu” |
<ol class="dico"> <li>Un cobaye</li> <li>Des cobaux</li> </ol> |
li ol li .dico li |
Tous les <li> Tous les <li> ayant un <ol> comme ancêtre Tous les <li> ayant un élément class="dico" comme ancêtre |
Il y a pléthore de sélecteurs CSS possibles, du plus spécifique au plus global.
Il est d’ailleurs possible de regrouper plusieurs sélecteurs pour un même groupe de propriétés, et ainsi éviter de répéter les mêmes valeurs plusieurs fois inutilement. Il suffit de séparer les sélecteurs par des virgules :
/* Avant */
.one{ color:blue; font-size:12px; font-weight:bold; line-height:14px;}
.two{ color:green; font-size:12px; font-weight:bold; line-height:14px;}
.three{ color:magenta; font-size:12px; font-weight:bold; line-height:14px;}
/* Après */
.one,.two,.three{ font-size:12px; font-weight:bold; line-height:14px;}
.one{ color:blue;}
.two{ color:green;}
.three{ color:magenta;}
Cette pratique est très utile lorsque vous voudrez modifier ultérieurement vos valeurs car ces dernières seront regroupées en un seul point.
Elle s’avère indispensable lorsqu’il s’agit de modifier uniquement le background-position
de plusieurs éléments partageant le même background-image
.
Chez le notaire
Il est possible qu’un ancêtre style un descendant. Prenez comme exemple :
body{ color:red;}
Toutes les balises étant enfants/descendants de <body>
, tout le texte sera rouge.
Enfin… Certaines balises ne se laissent pas dominer par leurs ancêtres. Les <a>
par exemple resteront bleus.
De même, certaines propriétés ne se propagent pas aux enfants :
body{ border:2px solid orange;}
Une seule grosse bordure sera visible, pour le <body>
, mais par pour ses descendants.
Internal affairs
Jusqu’à présent je vous ai fait mettre le CSS dans un fichier à part.
Il existe néanmoins deux approches alternatives de l’ennemi en passant directement par le HTML :
1. balises de style
<style type="text/css">
p{ color: green;}
</style>
<p>Heureux qui comme Ulysse…</p>
2. attribut HTML
<p style="color: green;">A fait un beau voyage…</p>
Le souci du 1 est d’avoir à répéter le code CSS autant de fois qu’il y a de pages.
Le souci du 2 est d’avoir à répéter le code CSS autant de fois qu’il y a d’éléments à styler.
Ces deux approches sont donc utilisées ponctuellement, pour styler au cas par cas, car elles sont prioritaires face au fichier CSS externe.
En file d’attente
<div>
<p>Par les champs et les grèves</p>
</div>
Cet élément <p>
se retrouve face à un dilemme. Une partie de la CSS lui dit d’être vert, une autre d’être orange.
div{ color: green;}
p{ color: orange;}
Le p, qui le cible directement, vaincra, quel que soit l’ordre :
p{ color: orange;} /* Vainqueur */
div{ color: green;}
Une classe est plus forte.
<div>
<p class="nenuphar">Par les champs et les grèves</p>
</div>
div{ color: green;}
p{ color: orange;}
.nenuphar{ color: blue;} /* Vainqueur */
Néanmoins la classe est terrassée par l’identifiant.
<div>
<p id="magnolia" class="nenuphar">Par les champs et les grèves</p>
</div>
div{ color: green;}
p{ color: orange;}
.nenuphar{ color: blue;}
#magnolia{ color:red;} /* Vainqueur */
Classement de la compétition de priorité, avec l’exemple précédent, du moins au plus spécifique :
* | Toutes les balises (à éviter) |
body | Un ancêtre |
div | Un ancêtre plus proche (le parent) |
body p | Un p dans un body (grâce à l’espace) |
div p | Un p dans une div |
div > p | Un p directement précédé d’une div |
body div p | p dans div dans body |
.nenuphar | La classe |
#magnolia | L’identifiant |
<p style="…"> | Directement sur la balise : très puissant |
!important | Imbattable (à utiliser en dernier recours) |
Un mot sur le grand vainqueur : !important.
p{ color: red !important;}
Absolument à éviter, car difficile à contourner. L’utiliser, c’est comme si tout repartait de zéro :
div p{ color: blue !important;} /* Vainqueur */
p{ color: red !important;}
Comment savoir qui gagne exactement ? Google Chrome / Safari : Ctrl + Shift + C Ou Firefox + Firebug.

La jachère
Reprenons. Supprimez tout. Jetez votre code CSS, tel un caillou évasif.
Gardez le HTML. Observez.
Cette couleur. Ces marges. Cette police.
Oui, votre page est déjà stylée. Un minimum. Un strict minimum.
Le coupable est là ! Devant vous. Depuis le début. Il vous observe autant que vous l’observez. Votre navigateur.
Livré avec une CSS système. Des valeurs par défaut, légèrement différentes selon le navigateur. Comment s’en débarasser (de la CSS, pas du navigateur) ?
Impossible de ne pas appeler la CSS système. Il faut l’overrider. La quoi ? L’overrider ! Hein ? L’OVERRIDER. Aaaaaaaah. L’overrider.
Réduire à néant. Partir de rien pour devenir tout. Au courage.
Mais réduire quoi ? Et comment ?
Rassurez-vous. Quelqu’un l’a fait : Yahoo Reset CSS.
body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,textarea,p,blockquote,th,td {
margin:0;
padding:0;
}
table {
border-collapse:collapse;
border-spacing:0;
}
fieldset,img {
border:0;
}
address,caption,cite,code,dfn,em,strong,th,var {
font-style:normal;
font-weight:normal;
}
ol,ul {
list-style:none;
}
caption,th {
text-align:left;
}
h1,h2,h3,h4,h5,h6 {
font-size:100%;
font-weight:normal;
}
q:before,q:after {
content:'';
}
abbr,acronym { border:0;
}
Collez-le en haut de votre CSS.
A bas les marges, bordure, tailles du body, des p, des input !
Place à vous, à votre style…
Votre pinceau ne se brisera plus de désespoir. Le vif sera tranché.