Table des matières
Numérotation automatique des titres par CSS
Il s'agit de créer un fichier CSS qui numérotera automatiquement les titres.
Contraintes :
h1 est réservé au titre de la page - il ne doit donc pas être numéroté. Le premier titre à numéroter est donc le premier élément h2.
Il est parfois utile d'inclure un titre sans numérotation, il faut donc pouvoir la désactiver.
La méthode habituelle consiste à définir une classe nocount.
Exemple :
-
voici un h3 qui n'incrémente pas le compteur :
<h3 id="nocountDemo" class="nocount">Ce titre n'a pas de numéro</h3>
-
et pour relancer la numérotation :
<h3 id="countAgain">Ce titre a un numéro</h3>
La numérotation reprend là où elle s'est arrêtée.
c'est autre chose. Il ne s'agit que des numéros.
Le CSS
Et voici le CSS :
body {counter-reset: h2} h2 {counter-reset: h3} h3 {counter-reset: h4} h4 {counter-reset: h5} h5 {counter-reset: h6} h2:before {counter-increment: h2; content: counter(h2) ". "} h3:before {counter-increment: h3; content: counter(h2) "." counter(h3) ". "} h4:before {counter-increment: h4; content: counter(h2) "." counter(h3) "." counter(h4) ". "} h5:before {counter-increment: h5; content: counter(h2) "." counter(h3) "." counter(h4) "." counter(h5) ". "} h6:before {counter-increment: h6; content: counter(h2) "." counter(h3) "." counter(h4) "." counter(h5) "." counter(h6) ". "} h2.nocount:before, h3.nocount:before, h4.nocount:before, h5.nocount:before, h6.nocount:before { content: ""; counter-increment: none }
David Storey donne une bonne explication satisfaisante dans son article intitulé Automatic numbering with CSS Counters (numérotation automatique à l'aide de compteurs CSS).
En gros, vous définissez d'abord vos compteurs (en les réinitialisant), puis vous les incrémentez et les insérez au contenu généré en utilisant la pseudo-classe :before
Surveillez la cascade !
Pour utiliser le moins de lignes de CSS possible, j'ai d'abord essayé cela :
h2 {counter-reset:h2; counter-reset:h3; counter-reset:h4; counter-reset:h5; counter-reset:h6;}
Pourquoi cela ne fonctionne-t-il pas ? C'est le C dans CSS - la cascade. Vous produisez une série de valeurs différentes pour la même propriété et chacune d'entre elles remplace l'autre, de sorte qu'en fait, ici, le seul compteur remis à zéro est le dernier.