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.

Pré-requis

Installation

Configuration

Utilisation

Désinstallation

Voir aussi


Basé sur « Automatic Heading Numbers with CSS » par Phil Archer.