Czy lista uporządkowana może dać wynik podobny do 1.1, 1.2, 1.3 (zamiast tylko 1, 2, 3,…) z css?
201
Czy uporządkowana lista może generować wyniki wyglądające jak 1.1, 1.2, 1.3 (zamiast tylko 1, 2, 3, ...) z CSS? Do tej pory używanie list-style-type:decimalzaowocowało tylko 1, 2, 3, a nie 1.1, 1.2., 1.3.
<ol><li>li element
<ol><li>sub li element</li><li>sub li element</li><li>sub li element</li></ol></li><li>li element</li><li>li element
<ol><li>sub li element</li><li>sub li element</li><li>sub li element</li></ol></li></ol>
W tym rozwiązaniu brakuje jednej drobnej rzeczy: kropki po numerze elementu. Nie wygląda jak standardowy styl listy. Napraw, dodając kropkę do reguły dla li:before: content: counters(item, ".")". ";
LS
4
To kiepska odpowiedź. To nie działa poprawnie. Sprawdź odpowiedź Jakuba Jirutki poniżej
Pan Pablo
1
@Gumbo Wiem, a odpowiedź Jakuba dała mi prawidłową numerację.
Pan Pablo
236
Żadne z rozwiązań na tej stronie nie działa poprawnie i uniwersalnie dla wszystkich poziomów i długich (zawijanych) akapitów. Naprawdę trudne jest uzyskanie spójnego wcięcia z powodu zmiennej wielkości znacznika (1., 1.2, 1.10, 1.10.5,…); nie można go po prostu „sfałszować”, nawet przy wstępnie obliczonym marginesie / wypełnieniu dla każdego możliwego poziomu wcięcia.
W końcu wymyśliłem rozwiązanie, które faktycznie działa i nie wymaga JavaScript.
Jest testowany na Firefox 32, Chromium 37, IE 9 i Android Browser. Nie działa na IE 7 i wcześniejszych.
CSS:
ol {
list-style-type: none;
counter-reset: item;
margin:0;
padding:0;}
ol > li {
display: table;
counter-increment: item;
margin-bottom:0.6em;}
ol > li:before {
content: counters(item,".")". ";
display: table-cell;
padding-right:0.6em;}
li ol > li {
margin:0;}
li ol > li:before {
content: counters(item,".")" ";}
Dobra robota dla osiągnięcia tego rodzaju wcięcia. Nadal jednak twierdzę, że dwa pierwsze przypadki wcięć, które wymieniłeś, są kwestią preferencji, a nie dobra i zła. Weźmy pod uwagę przypadek 1 i przypadek 2 - ten drugi potrafi przecisnąć się na znacznie więcej poziomach, zanim odstępy stają się niewygodne, a jednocześnie wyglądają całkiem nieźle. Ponadto zarówno MS Word, jak i domyślny styl przeglądarki używają wcięcia 2 przypadku. Myślę, że oni też robią to źle?
Saul Fautley
2
@ saul-fautley To źle pod względem typografii. Twój przykład z szaloną liczbą zagnieżdżonych poziomów pokazuje, że zagnieżdżona numeracja nie jest odpowiednia dla zbyt wielu poziomów, ale jest to dość oczywiste. MS Words nie jest systemem składu, to zwykły procesor dokumentów o słabej typografii. Domyślny styl przeglądarki… och, nie wiesz dużo o typografii, prawda?
Jakub Jirutka
3
To naprawdę działa (technicznie) na wszystkich poziomach i długich akapitach. Jeśli rozsądne jest użycie kilkunastu poziomów, to kolejne pytanie, które nie ma nic wspólnego z rozwiązaniem technicznym. Chodzi o to, że nie musisz predefiniować reguły CSS dla każdego poziomu zagnieżdżenia, jak w przypadku niektórych innych rozwiązań.
Jakub Jirutka
4
Chociaż nie powiedziałbym, że z innymi odpowiedziami jest coś „niewłaściwego”, powiedziałbym, że są one niekompletne. Ta odpowiedź jest na miejscu, a nawet działała w przerażająco dziwnie stylizowanej witrynie, którą zmieniam.
DanielM
2
@tremby: Rozbieżność można rozwiązać poprzez użycie li „display: table-row” zamiast „display: table”. Problemem jest to, że li nie może wtedy używać żadnych marginesów / wypełnień, ponieważ rzędy tabel są zawsze automatycznie sortowane według zawartości. Można to obejść, dodając „li: after” z „display: block”. Zobacz pełny przykład w jsFiddle . Jako dodatkowy bonus dodałem „wyrównanie tekstu: do prawej” do „li: przed”, aby wyrównać liczby do prawej.
mmlr
64
Wybrana odpowiedź jest świetnym początkiem, ale zasadniczo wymusza list-style-position: inside;stylizację elementów listy, co sprawia, że zawijany tekst jest trudny do odczytania. Oto proste obejście, które daje również kontrolę nad marginesem między liczbą a tekstem i wyrównuje liczbę do prawej zgodnie z domyślnym zachowaniem.
ol {
counter-reset: item;}
ol li {
display: block;
position: relative;}
ol li:before {
content: counters(item,".")".";
counter-increment: item;
position: absolute;
margin-right:100%;
right:10px;/* space between number and text */}
Jednym minusem jest to, że dodaje kropkę na końcu każdego elementu listy.
Davin Studer,
3
@Davin Studer: Dodaje tylko kropkę na końcu każdej liczby, zgodnie z olzachowaniem domyślnym . Można go łatwo usunąć, usuwając ostatni "."z contentwłaściwości, ale dla mnie wygląda to nieco dziwnie.
To najlepsza (i najprostsza) działająca odpowiedź z całej strony.
Bruno Toffolo,
6
Uwaga: Użyj CSS, aby utworzyć zagnieżdżoną numerację w nowoczesnej przeglądarce. Zobacz zaakceptowaną odpowiedź. Poniższe informacje dotyczą wyłącznie historii.counters
To rozwiązanie kończy się niepowodzeniem, gdy listy są zagnieżdżone.
LS
@LS Zawsze możesz dostosować selektory do swoich potrzeb. .foo > ol > li.
kennytm
1
Chodzi mi o to, że zapisałeś na stałe „1”. w stylu. Co się stanie, gdy podlista jest dzieckiem drugiego elementu na liście nadrzędnej? Chcesz, aby pojawiał się jako „2.”, ale zawsze będzie „1.” ze względu na sposób, w jaki jest tutaj kodowany. Jakie jest rozwiązanie Czy tworzyć nowe zestawy stylów dla każdej możliwej liczby? Nie. Użyj counters()funkcji jak w powyższych przykładach zamiast counter()funkcji.
W niedalekiej przyszłości możesz być w stanie użyć elementu ::markerpsuedo, aby osiągnąć ten sam rezultat, co inne rozwiązania w jednym wierszu kodu.
Pamiętaj, aby sprawdzić tabelę zgodności przeglądarki, ponieważ wciąż jest to technologia eksperymentalna. W chwili pisania tego tylko Firefox i Firefox dla Androida, począwszy od wersji 68, obsługują to.
Oto fragment kodu, który zostanie poprawnie wyrenderowany, jeśli zostanie wypróbowany w zgodnej przeglądarce:
::marker {content: counters(list-item,'.')':'}
li {padding-left:0.5em}
<ol><li>li element
<ol><li>sub li element</li><li>sub li element</li><li>sub li element</li></ol></li><li>li element</li><li>li element
<ol><li>sub li element</li><li>sub li element</li><li>sub li element</li></ol></li></ol>
Musiałem dodać to do rozwiązania opublikowanego w 12, ponieważ korzystałem z listy z mieszaniną listy uporządkowanej i list nieuporządkowanych. treść: brak ścisłego cytatu wydaje się dziwną rzeczą do dodania Wiem, ale działa ...
ol ul li:before {
content:no-close-quote;
counter-increment: none;
display: list-item;
margin-right:100%;
position: absolute;
right:10px;}
ol {
list-style-type: none;
counter-reset: item;
margin:0;
padding:0;}
ol > li {
display: table;
counter-increment: item;
margin-bottom:0.6em;}
ol > li:before {
content: counters(item,".")") ";
display: table-cell;
padding-right:0.6em;}
li ol > li {
margin:0;}
li ol > li:before {
content: counters(item,".")") ";}
Strata czasu na spojrzenie. Prawie identyczny z wcześniejszą odpowiedzią. Jedyną różnicą jest „)” na końcu znacznika.
juanitogan
0
jest to poprawny kod, jeśli chcesz najpierw potomnie zmienić rozmiar innego css.
<style>
li.title {font-size:20px;counter-increment: ordem;color:#0080B0;}.my_ol_class {counter-reset: my_ol_class;padding-left:30px!important;}.my_ol_class li {display: block;position: relative;}.my_ol_class li:before {counter-increment: my_ol_class;content: counter(ordem)"." counter(my_ol_class)" ";position: absolute;margin-right:100%;right:10px;/* space between number and text */}
li.title ol li{font-size:15px;color:#5E5E5E;}</style>
w pliku HTML.
<ol><liclass="title"><pclass="page-header list_title">Acceptance of Terms. </p><olclass="my_ol_class"><li><p>
my text 1.
</p></li><li><p>
my text 2.
</p></li></ol></li></ol>
Odpowiedzi:
Możesz użyć do tego liczników :
Przykład
Aby uzyskać więcej informacji, zobacz Zagnieżdżone liczniki i zakres .
źródło
li:before
:content: counters(item, ".")". ";
Żadne z rozwiązań na tej stronie nie działa poprawnie i uniwersalnie dla wszystkich poziomów i długich (zawijanych) akapitów. Naprawdę trudne jest uzyskanie spójnego wcięcia z powodu zmiennej wielkości znacznika (1., 1.2, 1.10, 1.10.5,…); nie można go po prostu „sfałszować”, nawet przy wstępnie obliczonym marginesie / wypełnieniu dla każdego możliwego poziomu wcięcia.
W końcu wymyśliłem rozwiązanie, które faktycznie działa i nie wymaga JavaScript.
Jest testowany na Firefox 32, Chromium 37, IE 9 i Android Browser. Nie działa na IE 7 i wcześniejszych.
CSS:
Przykład:
Wypróbuj na JSFiddle , rozwidl na Gist .
źródło
Wybrana odpowiedź jest świetnym początkiem, ale zasadniczo wymusza
list-style-position: inside;
stylizację elementów listy, co sprawia, że zawijany tekst jest trudny do odczytania. Oto proste obejście, które daje również kontrolę nad marginesem między liczbą a tekstem i wyrównuje liczbę do prawej zgodnie z domyślnym zachowaniem.JSFiddle: http://jsfiddle.net/3J4Bu/
źródło
ol
zachowaniem domyślnym . Można go łatwo usunąć, usuwając ostatni"."
zcontent
właściwości, ale dla mnie wygląda to nieco dziwnie.Rozwiązania zamieszczone tutaj nie działały dla mnie dobrze, więc zrobiłem mieszankę odpowiedzi na to pytanie i następujące pytanie: Czy można utworzyć wielopoziomową uporządkowaną listę w języku HTML?
Wynik:
Uwaga: zrzut ekranu, jeśli chcesz zobaczyć kod źródłowy lub cokolwiek z tego postu: http://estiloasertivo.blogspot.com.es/2014/08/introduccion-running-lean-y-lean.html
źródło
Uwaga: Użyj CSS, aby utworzyć zagnieżdżoną numerację w nowoczesnej przeglądarce. Zobacz zaakceptowaną odpowiedź. Poniższe informacje dotyczą wyłącznie historii.
counters
Jeśli przeglądarka obsługuje
content
icounter
,źródło
.foo > ol > li
.counters()
funkcji jak w powyższych przykładach zamiastcounter()
funkcji.Wynik: http://i.stack.imgur.com/78bN8.jpg
źródło
Mam pewien problem, gdy istnieją dwie listy, a druga znajduje się w DIV. Druga lista powinna zaczynać się od 1., a nie 2.1
http://jsfiddle.net/3J4Bu/364/
EDYCJA: Rozwiązałem problem przez http://jsfiddle.net/hy5f6161/
źródło
W niedalekiej przyszłości możesz być w stanie użyć elementu
::marker
psuedo, aby osiągnąć ten sam rezultat, co inne rozwiązania w jednym wierszu kodu.Pamiętaj, aby sprawdzić tabelę zgodności przeglądarki, ponieważ wciąż jest to technologia eksperymentalna. W chwili pisania tego tylko Firefox i Firefox dla Androida, począwszy od wersji 68, obsługują to.
Oto fragment kodu, który zostanie poprawnie wyrenderowany, jeśli zostanie wypróbowany w zgodnej przeglądarce:
Możesz także sprawdzić ten świetny artykuł, smashingmagazine na ten temat.
źródło
Musiałem dodać to do rozwiązania opublikowanego w 12, ponieważ korzystałem z listy z mieszaniną listy uporządkowanej i list nieuporządkowanych. treść: brak ścisłego cytatu wydaje się dziwną rzeczą do dodania Wiem, ale działa ...
źródło
Dla mnie działało:
Spójrz na: http://jsfiddle.net/rLebz84u/2/
lub ten http://jsfiddle.net/rLebz84u/3/ z więcej i uzasadnionym tekstem
źródło
jest to poprawny kod, jeśli chcesz najpierw potomnie zmienić rozmiar innego css.
w pliku HTML.
źródło