J'utilise des compteurs et une portée imbriqués pour créer une liste ordonnée:
ol {
counter-reset: item;
padding-left: 10px;
}
li {
display: block
}
li:before {
content: counters(item, ".") " ";
counter-increment: item
}
<ol>
<li>one</li>
<li>two</li>
<ol>
<li>two.one</li>
<li>two.two</li>
<li>two.three</li>
</ol>
<li>three</li>
<ol>
<li>three.one</li>
<li>three.two</li>
<ol>
<li>three.two.one</li>
<li>three.two.two</li>
</ol>
</ol>
<li>four</li>
</ol>
J'attends le résultat suivant:
1. one
2. two
2.1. two.one
2.2. two.two
2.3. two.three
3. three
3.1 three.one
3.2 three.two
3.2.1 three.two.one
3.2.2 three.two.two
4. four
Au lieu de cela, voici ce que je vois (mauvaise numérotation) :
1. one
2. two
2.1. two.one
2.2. two.two
2.3. two.three
2.4 three <!-- this is where it goes wrong, when going back to the parent -->
2.1 three.one
2.2 three.two
2.2.1 three.two.one
2.2.2 three.two.two
2.3 four
Je n'ai aucune idée, est-ce que quelqu'un voit où ça va mal?
Voici un JSFiddle: http://jsfiddle.net/qGCUk/2/
Décochez la case "normaliser CSS" - http://jsfiddle.net/qGCUk/3/ La réinitialisation CSS utilisée pour que toutes les marges et tous les bourrages de liste soient définis par défaut sur 0
[~ # ~] mettre à jour [~ # ~] http://jsfiddle.net/qGCUk/4/ - vous devez inclure vos sous-listes dans votre <li>
ol {
counter-reset: item
}
li {
display: block
}
li:before {
content: counters(item, ".") " ";
counter-increment: item
}
<ol>
<li>one</li>
<li>two
<ol>
<li>two.one</li>
<li>two.two</li>
<li>two.three</li>
</ol>
</li>
<li>three
<ol>
<li>three.one</li>
<li>three.two
<ol>
<li>three.two.one</li>
<li>three.two.two</li>
</ol>
</li>
</ol>
</li>
<li>four</li>
</ol>
Utilisez ce style pour modifier uniquement les listes imbriquées:
ol {
counter-reset: item;
}
ol > li {
counter-increment: item;
}
ol ol > li {
display: block;
}
ol ol > li:before {
content: counters(item, ".") ". ";
margin-left: -20px;
}
Vérifiez ceci:
Votre problème semble avoir été résolu.
Ce qui se présente pour moi (sous Chrome et Mac OS X)
1. one
2. two
2.1. two.one
2.2. two.two
2.3. two.three
3. three
3.1 three.one
3.2 three.two
3.2.1 three.two.one
3.2.2 three.two.two
4. four
Au lieu de:
<li>Item 1</li>
<li>Item 2</li>
<ol>
<li>Subitem 1</li>
<li>Subitem 2</li>
</ol>
Faites:
<li>Item 1</li>
<li>Item 2
<ol>
<li>Subitem 1</li>
<li>Subitem 2</li>
</ol>
</li>
C'est une excellente solution! Avec quelques règles CSS supplémentaires, vous pouvez le formater comme une liste hiérarchique MS Word avec un retrait de première ligne suspendu:
OL {
counter-reset: item;
}
LI {
display: block;
}
LI:before {
content: counters(item, ".") ".";
counter-increment: item;
padding-right:10px;
margin-left:-20px;
}
J'ai rencontré un problème similaire récemment. Le correctif consiste à définir la propriété display des éléments li de la liste ordonnée sur list-item, et non le bloc display, et à s'assurer que la propriété display de ol n'est pas list-item. c'est à dire
li { display: list-item;}
Avec cela, l’analyseur html voit tout le li comme l’élément de la liste et lui attribue la valeur appropriée, ainsi que l’ol, un bloc en ligne ou un élément de bloc basé sur vos paramètres, et ne tente pas d’affecter une valeur de comptage à il.