SELFHTML

Thomas J. Sebestyen :
Formater automatiquement des listes avec une numérotation hybride

Page d'information: vue d'ensemble

vers le bas Thomas J. Sebestyen
vers le bas Remarques sur le sujet
vers le bas Exemple avec explications
vers le bas Liens contextuels

vers le bas 

Thomas J. Sebestyen

E-Mail: adresse électonique thomas.js@selfhtml.org
Homepage-URL: Page en langue allemande http://www.meta-text.net

Il s'agit ici d'un article traduit de l'allemand par la rédaction de SELFHTML actuel. Veuillez poser vos questions relatives à cet article uniquement à son auteur, prenant compte que celui-ci ne maîtrise peut-être pas la langue française!

vers le hautvers le bas 

Remarques sur le sujet

Les listes sont un moyen pratique et fréquemment employé pour représenter des informations telles que, par exemple, des index de contenu etc... Il est certes possible à l'aide de HTML de fixer aussi la numérotation de listes, les limites y sont cependant rapidement atteintes quand il s'agit d'une numérotation hybride, à savoir d'une façon de numéroter panachée où ce n'est pas une simple numérotation automatique qui doit être exécutée, mais où différents formats d'énumération doivent être mélangés.

Les CSS viennent ici à la rescousse avec la possibilité de générer automatiquement des contenus et ainsi de définir et d'orienter des compteurs de numérotation. L'exemple suivant montre comment parvenir à une telle numérotation hybride avec très peu de mentions.

vers le hautvers le bas 

Exemple avec explications

Exemple

Démonstration - nouvelle fenêtre Exemple d'affichage: aperçu (n'est interprété correctement pour l'instant que par Opera)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
      <title>
         Formater des listes avec une numérotation hybride
      </title>
<style type="text/css">
<!--
   ol.niveau1 {
      counter-reset:Point_liste_niveau1;
      list-style-type:none;
   }
   ol.niveau1 li:before {
      content: counter(Point_liste_niveau1) ". ";
      counter-increment:Point_liste_niveau1;
   }
   ol.niveau2 {
      counter-reset:Point_liste_niveau2;
      list-style-type:none;
   }
   ol.niveau2 li:before {
      content: counter(Point_liste_niveau1) counter(Point_liste_niveau2,lower-alpha) ". ";
      counter-increment:Point_liste_niveau2;
   }
-->
</style>
   </head>
   <body>
      <ol class="niveau1">
         <li>Généralités sur les pseudo-formats</li>
         <li>Pseudo-formats pour les liens
            <ol class="niveau2">
               <li>:link</li>
               <li>:visited</li>
               <li>:hover</li>
               <li>:active</li>
               <li>:focus</li>
            </ol>
         </li>
         <li>Pseudo-formats pour les paragraphes
            <ol class="niveau2">
               <li>:first-line</li>
               <li>:first-letter</li>
               <li>:first-child </li>
            </ol>
         </li>
         <li>Pseudo-formats pour du texte généré automatiquement
            <ol class="niveau2">
               <li>:before</li>
               <li>:after</li>
            </ol>
         </li>
         <li>Numérotation automatique</li>
      </ol>
   </body>
</html>
               

Explications:

L'exemple devrait être représenté sous une forme analogue à celle-ci par le navigateur:

1. Généralités sur les pseudo-formats
2. Pseudo-format pour les liens
      2a. :link
      2b. :visited
      2c. :hover
      2d. :active
      2e. :focus
3. Pseudo-formats pour les paragraphes
      3a. :first-line
      3b. :first-letter
      3c. :first-child
4. Pseudo-formats pour du texte généré automatiquement
      4a. :before
      4b. :after
5. Numérotation automatique

Dans l'exemple est définie une liste imbriquée avec deux niveaux, pour laquelle la numérotation des points de la liste du deuxième niveau doit comprendre d'une part le numéro du point de la liste parent et d'autre part sa propre numérotation dans un autre format.

Il vous faut tout d'abord définir une Page d'information: connexion exigée classe propre au premier niveau de la liste ol.niveau1 et fixer que le compteur de numérotation sera remis à zéro à chaque occurence de cette classe (réglage par défaut): counter-reset:Point_liste_niveau1;. Le nom du compteur est ici Point_liste_niveau1. La mention list-style-type:none; sert en fait à empêcher la numérotation propre à HTML, étant donné que nous voulons la remplacer par la numérotation par les CSS:

ol.niveau1 {
   counter-reset:Point_liste_niveau1;
   list-style-type:none;
}

À l'étape suivante vous accédez pour les points de la liste du premier niveau ol.niveau1 li au Page d'information: connexion exigée pseudo-format :before à l'aide duquel des textes peuvent être générés automatiquement. Vous pouvez fixer le contenu du texte généré vec la propriété CSS content du pseudo-format :before. Comme contenu, nous allons définir un compteur counter() et lui donner un nom Point_liste_niveau1,suivi d'un point et d'un espace entre guillemets (". "). Avec la mention counter-increment:Point_liste_niveau1; vous incrémentez le compteur Point_liste_niveau1 de un. Le reste de la définition pour les points de la liste du premier niveau aura cet aspect:

ol.niveau1 li:before {
   content: counter(Point_liste_niveau1) ".";
   counter-increment:Point_liste_niveau1;
}

Agissez semblablement pour le définition de la liste du deuxième niveau. Définissez d'abord une classe, puis la remise à zéro du compteur de numérotation, empêchez enfin la numérotation propre à HTML:

ol.niveau2 {
   counter-reset:Point_liste_niveau2;
   list-style-type:none;
}

La définition pour les points de la liste du deuxième niveau diffère maintenant quelque peu:

ol.niveau2 li:before {
   content: counter(Point_liste_niveau1) counter(Point_liste_niveau2,lower-alpha) ".";
   counter-increment:Point_liste_niveau2;
}

Il vous faut ici utiliser deux compteurs. Avec le premier compteur counter(Point_liste_niveau1) vous accédez au compteur du point de la liste parent.Avec le deuxième compteur, vous définissez un compteur propre aux points de la liste du niveau actuel tout en fixant le Page d'information: connexion exigée type de représentation de ce compteur: counter(Point_liste_niveau2,lower-alpha). À la suite de quoi suivent ici aussi un point et un espace entre guillemets (". "). Enfin vous incrémentez le nouveau compteur avec counter-increment:Point_liste_niveau2.

Remarque:

Au cas où vous ne fixez pour counter() que le nom du compteur, par exemple avec counter(Point_liste_niveau1), c'est automatiquement le format décimal qui sera pris pour la représentation du compteur

Si vous voulez ajoutez un autre niveau, la définition CSS pour une représentation telle que 1a1., 1a2., 1b1., 1b2. etc. aurait cet aspect:

ol.niveau3 {
   counter-reset:Point_liste_niveau3;
   list-style-type:none;
}
ol.niveau3 li:before {
   content: counter(Point_liste_niveau1) counter(Point_liste_niveau2,lower-alpha) counter(Point_liste_niveau3) ". ";
   counter-increment:Point_liste_niveau3;
}
         

Attention:

À cette date, cette possibilité offerte par les CSS n'est soutenue que par Opera.

vers le hautvers le bas 

Liens contextuels

Les adresses qui suivent sont recommandées pour mieux comprendre l'exemples ci-dessus ou pour approfondir et apprendre d'autres possiblités.

Page d'information: connexion exigée HTML/XHTML, Listes
Page d'information: connexion exigée CSS, Définir des formats pour des classes
Page d'information: connexion exigée CSS, :before, :after (Pseudo-formats pour le texte généré automatiquement)
Page d'information: connexion exigée CSS, Numérotation automatique
englischsprachige Seite W3C, Compteurs automatiques et numérotation

vers le haut

© 2005 Seite  Informations