Jak usunąć wcięcie z nieuporządkowanego elementu listy?

260

Chcę usunąć wszystkie wcięcia z ul. Próbowałem ustawienie margin, padding, text-indentdo 0, ale bezskutecznie. Wygląda na to, że ustawienie text-indentliczby ujemnej jest wystarczające - ale czy to naprawdę jedyny sposób na usunięcie wcięcia?

antonpug
źródło
Trudno powiedzieć bez HTML i CSS, ale używając resetowania / normalizacji CSS składającego się z reguł ul {padding: 0; margin: 0;} wykonuje lewę w większości przypadków. Jestem pewien, że wcięcie tekstu nie ma z tym nic wspólnego.
Jawad
Nie widząc, co właściwie robisz, trudno powiedzieć, na czym polega problem. Ustawienie zarówno marginesu, jak i dopełnienia na ul na 0 powinno działać w różnych przeglądarkach.
kinakuta
6
„Nie działało. Nie mogę zresetować CSS. Moje zmiany są częścią gigantycznego frameworka internetowego, nad którym pracuje ponad 60 osób, haha” - rzeczywiście Haha. Nie jasno zadałeś swoje pytanie!
Jawad

Odpowiedzi:

416

Ustaw styl listy i lewe wypełnienie na nic.

ul {
    list-style: none;
    padding-left: 0;
}​

Aby utrzymać kule można wymienić list-style: nonez list-style-position: insidelub skrót list-style: inside:

ul {
  list-style-position: inside;
  padding-left: 0;
}

j08691
źródło
18
Możesz usunąć wcięcia i zachować numerację / punktory poprzez: ul {list-style-position: inside; padding-left: 0;}
Myforwik
4
Cóż, teraz kiedy edytowałeś swoją odpowiedź, wypunktowania zostały zachowane, ale nadal istnieje problem polegający na tym, że <li> z wieloma wierszami tekstu nie wcina poprawnie wszystkich wierszy. Jeśli będziesz kontynuować edycję, możesz w końcu skończyć z moim rozwiązaniem. : D
Jpsy
Drugie rozwiązanie, które utrzymuje kulę, już nie działa (Chrome 55 w systemie Windows). Jakieś alternatywy?
Tom Pažourek,
2
@ TomPažourek Spróbuj list-style-position: outside; padding-left: 1em;na<ul>
j08691
1
@ j08691: Tak, to działa, chociaż ta 1emrzecz ma nieco magiczną wartość ... I tak naprawdę pozostało trochę wgłębienia.
Tom Pažourek,
93

Moim preferowanym rozwiązaniem do usunięcia <ul> wcięcia jest prosty, jedno-liniowy CSS:

ul { padding-left: 1.2em; }
<p>A leading line of paragraph text</p>
<ul>
    <li>Bullet points align with paragraph text above.</li>
    <li>Long list items wrap around correctly. Long list items wrap around correctly. Long list items wrap around correctly. Long list items wrap around correctly. Long list items wrap around correctly. </li>
    <li>List item 3</li>
</ul>
<p>A trailing line of paragraph text</p>

To rozwiązanie jest nie tylko lekkie, ale ma wiele zalet:

  • Ładnie wyrównuje lewe punkty <ul> do otaczającego normalnego tekstu akapitu (= usunięte wcięcie <ul>).
  • Bloki tekstowe w elementach <li> pozostają poprawnie wcięte, jeśli są zawijane w wiele wierszy.

Starsze informacje: w
przypadku wersji IE 8 i niższych należy zamiast tego użyć marginesu:

    ul { margin-left: 1.2em; }
Jpsy
źródło
Wszystkie problemy wyjaśniłem już w moim poście @aioobe. Ale tutaj jeszcze raz: Akceptowana odpowiedź (status na teraz, ponieważ po moim oryginalnym opublikowaniu została wielokrotnie edytowana, aby ją poprawić) teraz zachowuje punktory (jeśli użyjesz drugiego podanego przykładu), ale nie wcina ona poprawnie multilinii punktowanej tekst. Oto skrzypce drugiego przykładu zaakceptowanej odpowiedzi, zmodyfikowanej w celu pokazania efektu: jsfiddle.net/v6nyuq6f/88 A oto ta sama skrzynka
Jpsy
Jest rok 2016 i oparcie się na pewnej wartości, która „nie jest idealna dla wszystkich przeglądarek”, jest najczystszym rozwiązaniem tego dość powszechnego problemu. Czy jest jakiś sposób, aby uzyskać dokładną szerokość symbolu elementu, być może używając funkcji CSS3?
F30,
Na ul { padding-left:1.2em; margin-left: 0; }
Andrew Murphy
1
Jedyne rozwiązanie na tej stronie, które działa poprawnie z długimi elementami listy (poprawnie się zawija) - Dzięki!
FredyWenger
8

Dodaj to do swojego CSS:

ul { list-style-position: inside; }

Spowoduje to umieszczenie elementów li w tym samym tiret co inne akapity i tekst.

Patrz: http://www.w3schools.com/cssref/pr_list-style-position.asp

Graham
źródło
6
Na <li> s z wieloma liniami tekstu, list-style-position: insidewyrównuje tekst drugiej i wszystkich kolejnych linii z punktorem. To z pewnością nie jest pożądane.
Jpsy
7

display:table-row; pozbędę się również wcięcia, ale usunie pociski.

Dow Miller
źródło
5

Usuń wyściółkę:

padding-left: 0;
John Conde
źródło
4

Czy możesz podać link? dzięki Mogę rzucić okiem Najprawdopodobniej twój selektor css nie jest wystarczająco silny lub możesz spróbować

padding:0!important;

naeluh
źródło
1
Wymiary nie są potrzebne przy określaniu 0.
raam86,
11
!importantjest EVIL
Madbreaks
@Madbreaks Może to działać, jeśli selektor jest prawidłowy, a przypadek użycia jest poprawny, ale prawy prob nie jest tym, może w tym przypadku istnieje główna reguła css, którą należy zastąpić przez zmianę pliku podstawowego, więc pozostawił hals jak nie rąbanie rdzenia? Nie wiem, może się mylę
naeluh
4

Mam ten sam problem ze stopką, którą próbuję podzielić. Odkryłem, że to zadziałało, wypróbowując kilka powyższych sugestii łącznie:

footer div ul {
    list-style-position: inside;
    padding-left: 0;
}

Wydaje się, że to utrzymuje go po lewej stronie pod moją h1 i strzałami wewnątrz div, a nie na zewnątrz po lewej.

Gary Ford
źródło
3

Demo na żywo: https://jsfiddle.net/h8uxmoj4/

ol, ul {
  padding-left: 0;
}

li {
  list-style: none;
  padding-left: 1.25rem;
  position: relative;
}

li::before {
  left: 0;
  position: absolute;
}

ol {
  counter-reset: counter;
}

ol li::before {
  content: counter(counter) ".";
  counter-increment: counter;
}

ul li::before {
  content: "●";
}

Ponieważ pierwotne pytanie nie jest jasne, jakie są jego wymagania, próbowałem rozwiązać ten problem zgodnie z wytycznymi określonymi przez inne odpowiedzi. W szczególności:

  • Wyrównaj punktory listy z zewnętrznym tekstem akapitu
  • Wyrównaj wiele linii w obrębie tego samego elementu listy

Chciałem też rozwiązania, które nie opierałoby się na przeglądarkach uzgadniających, ile paddingu użyć. Dodałem uporządkowaną listę dla kompletności.

Corey
źródło
-1

Robiąc to w linii, ustawiam margines na 0 (styl ul = "margin: -0px"). Punktory są wyrównane do akapitu bez nawisu.

Jael Faulcon 323-743-3816
źródło
Nie rozumiem, dlaczego zostałeś odrzucony inaczej niż znak ujemny przed zerem. Próbowałem tego na Google Chrome i działało, podczas gdy padding-left: 0 rozwiązanie nie. To jest na Google Chrome w wersji 79.0.3945.88 WinX, 64-bit.
MrPotatoHead
Dodając do mojego powyższego komentarza ... ponieważ nie mogę go edytować ... bawiłem się tym trochę więcej, aw najnowszym Firefoksie (71.0) zachowanie jest takie samo. Jest tak jednak w przypadku list nieuporządkowanych (ul). Podczas korzystania z list uporządkowanych (ol), 1.2em wydaje się wyrównywać lewą krawędź listy do lewego marginesu innego tekstu (zgodnie z odpowiedzią Jpsy powyżej).
MrPotatoHead