Chcę mieć „wewnętrzną” listę z wypunktowaniami lub liczbami dziesiętnymi, które są równo z najlepszymi blokami tekstu. Drugie wiersze wpisów listy muszą mieć takie samo wcięcie jak pierwszy wiersz!
Na przykład:
Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
Aenean commodo ligula eget dolor. Aenean Aenean massa.
Cum sociis natoque penatibus et magnis dis parturient montes,
nascetur ridiculus mus. Donec quam felis,
1. Text
2. Text
3. longer Text, longer Text, longer Text, longer Text, longer Text, longer Text
second line of longer Text
4. Text
Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
Aenean commodo ligula eget dolor.
CSS podaje tylko dwie wartości dla swojej „pozycji w stylu listy” - wewnątrz i na zewnątrz. Z „wewnątrz” drugie linie są wyrównane z punktami listy, a nie z linią wyższą:
3. longer Text, longer Text, longer Text, longer Text, longer Text, longer Text
second line of longer Text
4. Text
Szerokość „poza” moją listą nie pokrywa się już z lepszymi blokami tekstu.
Eksperymentuje z wcięciem szerokości, wcięciem w lewo i marginesem w lewo dla list nieuporządkowanych, ale zawodzą w przypadku list uporządkowanych, ponieważ zależy to od liczby znaków dziesiętnych:
Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
Aenean commodo ligula eget dolor.
3. longer Text, longer Text, longer Text, longer Text, longer Text, longer Text
second line of longer Text
4. Text
11. Text
12. Text
„11.” i „12.” nie pokrywają się z nadrzędnym blokiem tekstowym w porównaniu do „3” i „4.”.
Więc gdzie jest sekret dotyczący uporządkowanych list i tiret drugiego wiersza? Dzięki za twój wysiłek!
źródło
Odpowiedzi:
Aktualizacja
Ta odpowiedź jest nieaktualna. Możesz to zrobić o wiele prościej, jak wskazano w innej odpowiedzi poniżej:
Zobacz https://www.w3schools.com/cssref/pr_list-style-position.asp
Oryginalna odpowiedź
Jestem zaskoczony, widząc, że to jeszcze nie zostało rozwiązane. Możesz skorzystać z algorytmu układu tabeli w przeglądarce (bez użycia tabel) w następujący sposób:
Demo: http://jsfiddle.net/4rnNK/1/
Aby działał w IE8, użyj
:before
zapisu starszego typu z jednym dwukropkiem.źródło
foo
tylko dowolny łańcuch znaków (ID), służy do łączeniacounter-reset
,counter-increment
icounter()
właściwości.position: relative
na<li>
iposition: absolute
na generowanej treści. Zobacz jsfiddle.net/maryisdead/kgr4k dla przykładu.40px
? To się zepsuje, gdy liczniki będą szersze . Istotą korzystania z układu tabeli jest to, że przeglądarka automatycznie dopasuje zawartość.Wierzę, że zrobi to, czego szukasz.
JSFiddle: https://jsfiddle.net/dzbos70f/
źródło
1em
nie równa się przestrzeni wcięcia. Linie nie będą idealnie wyrównywane pikselowo. Po drugie, a kiedy lista osiągnie liczbę 10? 100? Wcięcie tekstu nie będzie działać, nie zostanie wyrównane. Ta odpowiedź powinna zostać odrzucona.1em
. oi60.tinypic.com/a0eyvs.jpg Pierwszy element listy używa powyższej techniki wcięcia tekstu. W porównaniu z tym, jak zwykle wygląda z pozycją stylu listy: na zewnątrz jest źle wyrównany, w tym przypadku wyłączony o piksel.Najłatwiejszym i najczystszym sposobem, bez żadnych włamań, jest po prostu wcięcie
ul
(lubol
):Daje to taki sam wynik jak zaakceptowana odpowiedź: https://jsfiddle.net/5wxf2ayu/
Zrzut ekranu:
źródło
list-style-position: outside
do<li>
.Sprawdź to skrzypce:
http://jsfiddle.net/K6bLp/
Pokazuje, jak ręcznie wciąć ul i ol za pomocą CSS.
HTML
CSS
Zredagowałem również twoje skrzypce
http://jsfiddle.net/j7MEd/3/
Zanotuj to.
źródło
type
atrybut for<ol>
wydaje się być nieaktualny w HTML 5. Użyjstyle="list-style-type: "
zamiast tego.Można ustawić margines i padding OSOBĄ
ol
lubul
w CSSźródło
Uważam, że wystarczy umieścić listę „pocisk” poza obiciem.
źródło
Możesz użyć CSS, aby wybrać zakres; w takim przypadku chcesz wyświetlić elementy 1-9:
Następnie odpowiednio dostosuj marże na tych pierwszych elementach:
Zobacz to w akcji tutaj: http://www.wortfm.org/wort-madison-charts-for-the-week-beginning-11192012/
źródło
Następujący CSS załatwił sprawę:
źródło
moje rozwiązanie jest całkiem takie same jak Pumbaa80 jednego „s, ale proponuję używać
display: table
zamiastdisplay:table-row
doli
elementu. Będzie to mniej więcej tak:Więc teraz możemy użyć marże dla odstępów między
li
„sźródło
Sam bardzo lubię to rozwiązanie:
źródło
Listy ol, ul będą działać, jeśli chcesz, możesz także użyć tabeli z ramką: brak w css.
źródło
CSS podaje tylko dwie wartości dla swojej „pozycji w stylu listy” - wewnątrz i na zewnątrz. Z „wewnątrz” drugie linie są wyrównane z punktami listy, a nie z linią wyższą:
Na uporządkowanych listach, bez interwencji, jeśli podasz „list-style-position” wartość „inside”, drugi wiersz długiej pozycji listy nie będzie miał wcięcia, ale wróci do lewej krawędzi listy (tj. będzie wyrównany do lewej względem numeru elementu). Jest to charakterystyczne dla list uporządkowanych i nie występuje na listach nieuporządkowanych.
Jeśli zamiast tego podasz „list-style-position” wartość „outside”, drugi wiersz będzie miał takie samo wcięcie jak pierwszy wiersz.
Miałem listę z ramką i miałem ten problem. Po ustawieniu „list-style-position” na „inside”, moja lista nie wyglądała tak, jakbym tego chciał. Ale z „pozycją stylu listy” ustawioną na „poza”, liczby elementów listy wypadały poza polem.
Rozwiązałem ten problem, po prostu ustawiając szerszy lewy margines dla całej listy, co pchnęło całą listę w prawo, z powrotem do pozycji, w której była wcześniej.
CSS:
ol.classname {margin: 0; padding: 0;}
ol.classname li {margin: 0.5em 0 0 0; padding-left: 0; list-style-position: outside;}
HTML:
źródło
Ok, wróciłem i wymyśliłem kilka rzeczy. Jest to DOKŁADNE ROZWIĄZANIE do tego, co zaproponowałem, ale wydaje się funkcjonalne.
Najpierw stworzyłem liczby jako serię nieuporządkowanych list. Lista nieuporządkowana zwykle zawiera dysk na początku każdego elementu listy (
Następnie pokazałem całą listę: wiersz tabeli. Dlaczego nie wkleję ci kodu zamiast o nim gadać?
CSS:
}
}
Wydaje się, że wyrównuje tekst w drugim dziale z liczbami na liście uporządkowanej w pierwszym dziale. Otoczyłem zarówno listę, jak i tekst znacznikiem, dzięki czemu mogę po prostu powiedzieć wszystkim divom, aby wyświetlały się jako bloki wbudowane. To ładnie je ustawiło.
Margines służy do wstawienia spacji między kropką a początkiem tekstu. W przeciwnym razie biegną naprzeciw siebie i wygląda to jak odleżyna.
Mój pracodawca chciał, aby zawinięty tekst (w przypadku dłuższych wpisów bibliograficznych) był zgodny z początkiem pierwszego wiersza, a nie z lewym marginesem. Początkowo wierciłem się z dodatnim marginesem i negatywnym wcięciem tekstu, ale potem zdałem sobie sprawę, że kiedy przełączyłem się na dwa różne div, to spowodowało, że tekst był wyrównany, ponieważ lewy margines div był margines, w którym tekst naturalnie się zaczynał. Tak więc wszystko, czego potrzebowałem, to margines 0,2em, aby dodać trochę miejsca, a wszystko inne ustawiało się płynnie.
Mam nadzieję, że to pomoże, jeśli OP miał podobny problem ... Trudno mi było go zrozumieć.
źródło
Miałem ten sam problem i zacząłem używać odpowiedzi user123444555621 . Jednak musiałem również dodać
padding
iborder
do każdegoli
, co to rozwiązanie nie pozwala, ponieważ każdyli
jesttable-row
.Najpierw używamy a
counter
do odtworzeniaol
liczb.Następnie ustawić
display: table;
na każdymli
idisplay: table-cell
na:before
dać nam wcięcia.Wreszcie trudna część. Ponieważ nie używamy układu tabeli do całości
ol
, musimy upewnić się, że każdy:before
ma taką samą szerokość. Możemy użyćch
jednostki, aby z grubsza utrzymać szerokość równą liczbie znaków. Aby zachować jednolite szerokości, gdy liczba cyfr dla:before
różnych jest różna, możemy zaimplementować zapytania ilościowe . Zakładając, że wiesz, że twoje listy nie będą zawierały 100 elementów lub więcej, potrzebujesz tylko jednej reguły zapytania ilościowego, aby nakazać:before
zmianę jej szerokości, ale możesz łatwo dodać więcej.źródło