J'utilise des compteurs imbriqués et une portée 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/
html
css
html-lists
poignard
la source
la source
1.
>1.1.
1.2.
1.3.
et ainsi de suite?id
etclass
vous permettent de définir des css spécifiques à ces éléments avec des sélecteurs. Si vous utilisez une couvertureli
,ul
,ol
etc, le css affecte toutes les instances de celui - ci. Mais si vous définissez votre élément sur<ol class="cleared">
et votre sélecteur css surol.cleared
, vous n'affectez pasol
inutilement les autres éléments.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; }
la source
font-weight: bold
auxol ol > li:before
compteurs de la liste imbriquéebold
mais que cela ne fait pas les compteurs de la liste de premier niveaubold
?Regarde ça :
http://jsfiddle.net/PTbGc/
Votre problème semble avoir été résolu.
Ce qui me ressort (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
Comment je l'ai fait
Au lieu de :
<li>Item 1</li> <li>Item 2</li> <ol> <li>Subitem 1</li> <li>Subitem 2</li> </ol>
Faire :
<li>Item 1</li> <li>Item 2 <ol> <li>Subitem 1</li> <li>Subitem 2</li> </ol> </li>
la source
C'est une excellente solution! Avec quelques règles CSS supplémentaires, vous pouvez le formater comme une liste de plan 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; }
la source
J'ai rencontré un problème similaire récemment. Le correctif consiste à définir la propriété d'affichage des éléments li dans la liste ordonnée sur list-item, et non sur display block, 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 all li comme l'élément de liste et lui attribue la valeur appropriée, et voit l'ol, comme un élément de bloc ou de bloc en ligne basé sur vos paramètres, et n'essaye pas d'attribuer une valeur de comptage à il.
la source
La solution de Moshe est excellente, mais le problème peut toujours exister si vous devez placer la liste dans un fichier
div
. (lire: réinitialisation du compteur CSS sur la liste imbriquée )Ce style pourrait éviter ce problème:
ol > li { counter-increment: item; } ol > li:first-child { counter-reset: item; } ol ol > li { display: block; } ol ol > li:before { content: counters(item, ".") ". "; margin-left: -20px; }
<ol> <li>list not nested in div</li> </ol> <hr> <div> <ol> <li>nested in div</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> </div>
Vous pouvez également activer la réinitialisation du compteur
li:before
.la source
.
de la liste imbriquée mais la liste racine?Après avoir parcouru d'autres réponses, j'ai trouvé ceci, appliquez simplement la classe
nested-counter-list
à laol
balise racine :code sass:
ol.nested-counter-list { counter-reset: item; li { display: block; &::before { content: counters(item, ".") ". "; counter-increment: item; font-weight: bold; } } ol { counter-reset: item; & > li { display: block; &::before { content: counters(item, ".") " "; counter-increment: item; font-weight: bold; } } } }
code css :
ol.nested-counter-list { counter-reset: item; } ol.nested-counter-list li { display: block; } ol.nested-counter-list li::before { content: counters(item, ".") ". "; counter-increment: item; font-weight: bold; } ol.nested-counter-list ol { counter-reset: item; } ol.nested-counter-list ol > li { display: block; } ol.nested-counter-list ol > li::before { content: counters(item, ".") " "; counter-increment: item; font-weight: bold; }
ol.nested-counter-list { counter-reset: item; } ol.nested-counter-list li { display: block; } ol.nested-counter-list li::before { content: counters(item, ".") ". "; counter-increment: item; font-weight: bold; } ol.nested-counter-list ol { counter-reset: item; } ol.nested-counter-list ol>li { display: block; } ol.nested-counter-list ol>li::before { content: counters(item, ".") " "; counter-increment: item; font-weight: bold; }
<ol class="nested-counter-list"> <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>
Et si vous avez besoin d'une fin
.
à la fin des compteurs de la liste imbriquée, utilisez ceci:ol.nested-counter-list { counter-reset: item; } ol.nested-counter-list li { display: block; } ol.nested-counter-list li::before { content: counters(item, ".") ". "; counter-increment: item; font-weight: bold; } ol.nested-counter-list ol { counter-reset: item; }
<ol class="nested-counter-list"> <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>
la source