Używam zagnieżdżonych liczników i zakresu, aby utworzyć uporządkowaną listę:
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>
Oczekuję następującego wyniku:
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
Zamiast tego widzę to (zła numeracja) :
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
Nie mam pojęcia, czy ktoś widzi, gdzie idzie źle?
Oto JSFiddle: http://jsfiddle.net/qGCUk/2/
html
css
html-lists
sztylet
źródło
źródło
1.
>1.1.
1.2.
1.3.
i tak dalej?id
i,class
pozwalają zdefiniować css specyficzne dla tych elementów z selektorami. Jeśli używasz kocli
,ul
,ol
etc, to css wpływa na wszystkie instancje niego. Ale jeśli ustawisz swój element na,<ol class="cleared">
a selektor css naol.cleared
, nie wpłynieszol
niepotrzebnie na inne elementy.Użyj tego stylu, aby zmienić tylko zagnieżdżone listy:
ol { counter-reset: item; } ol > li { counter-increment: item; } ol ol > li { display: block; } ol ol > li:before { content: counters(item, ".") ". "; margin-left: -20px; }
źródło
font-weight: bold
dool ol > li:before
zagnieżdżonej listy, liczniki są,bold
ale nie tworzą liczników z listy pierwszego poziomubold
?Sprawdź to :
http://jsfiddle.net/PTbGc/
Wygląda na to, że Twój problem został rozwiązany.
Co się pojawia (w Chrome i 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
Jak to zrobiłem
Zamiast :
<li>Item 1</li> <li>Item 2</li> <ol> <li>Subitem 1</li> <li>Subitem 2</li> </ol>
Zrobić :
<li>Item 1</li> <li>Item 2 <ol> <li>Subitem 1</li> <li>Subitem 2</li> </ol> </li>
źródło
To świetne rozwiązanie! Dzięki kilku dodatkowym regułom CSS możesz sformatować ją tak, jak listę konspektów MS Word z wiszącym wcięciem pierwszego wiersza:
OL { counter-reset: item; } LI { display: block; } LI:before { content: counters(item, ".") "."; counter-increment: item; padding-right:10px; margin-left:-20px; }
źródło
Niedawno napotkałem podobny problem. Rozwiązaniem jest ustawienie właściwości display elementów li na liście uporządkowanej na element listy, a nie blok wyświetlania, i upewnienie się, że właściwość display elementu ol nie jest elementem listy. to znaczy
li { display: list-item;}
Dzięki temu parser html widzi wszystkie li jako element listy i przypisuje do niego odpowiednią wartość, a także widzi ol jako element inline-block lub blok oparty na twoich ustawieniach i nie próbuje przypisywać żadnej wartości count do to.
źródło
Rozwiązanie Mosze jest świetne, ale problem może nadal istnieć, jeśli chcesz umieścić listę w pliku
div
. (czytaj: resetowanie licznika CSS na zagnieżdżonej liście )Ten styl może zapobiec temu problemowi:
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>
Możesz również włączyć resetowanie licznika
li:before
.źródło
.
na liście zagnieżdżonej, ale na liście głównej?Po przejrzeniu innych odpowiedzi wpadłem na to, po prostu zastosuj klasę
nested-counter-list
dool
znacznika głównego :kod 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; } } } }
kod 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>
A jeśli potrzebujesz
.
końca na końcu liczników listy zagnieżdżonej, użyj tego: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>
źródło
Nie komplikuj!
Prostsze i standardowe rozwiązanie do zwiększania liczby i zachowania kropki na końcu. Nawet jeśli poprawnie uzyskasz css, nie zadziała, jeśli kod HTML nie jest poprawny. patrz poniżej.
CSS
ol { counter-reset: item; } ol li { display: block; } ol li:before { content: counters(item, ". ") ". "; counter-increment: item; }
SASS
ol { counter-reset: item; li { display: block; &:before { content: counters(item, ". ") ". "; counter-increment: item } } }
Element nadrzędny HTML
Jeśli dodajesz dziecko, upewnij się, że znajduje się ono pod rodzicem
li
.<!-- WRONG --> <ol> <li>Parent 1</li> <!-- Parent is Individual. Not hugging --> <ol> <li>Child</li> </ol> <li>Parent 2</li> </ol> <!-- RIGHT --> <ol> <li>Parent 1 <ol> <li>Child</li> </ol> </li> <!-- Parent is Hugging the child --> <li>Parent 2</li> </ol>
źródło