Wie entferne ich Einrückungen aus einem ungeordneten Listenelement?

260

Ich möchte alle Einrückungen entfernen ul. Ich habe versucht , Einstellung margin, padding, text-indentzu 0, aber ohne Erfolg. Scheint, dass die Einstellung text-indentauf eine negative Zahl den Trick macht - aber ist das wirklich der einzige Weg, um die Einrückung zu entfernen?

Antonpug
quelle
Schwer zu sagen ohne HTML & CSS, aber mit einem CSS Reset / Normalize, bestehend aus Regeln ul {padding: 0; margin: 0;} macht in den meisten Fällen den Trick. Ich bin sicher, dass Text-Einzug nichts damit zu tun hat.
Jawad
Ohne zu sehen, was Sie tatsächlich tun, ist es schwierig zu sagen, wo das Problem liegt. Das Setzen von Rand und Abstand auf der ul auf 0 sollte browserübergreifend funktionieren.
Kinakuta
6
"Hat nicht funktioniert. Und kann CSS-Reset nicht verwenden. Meine Änderungen sind Teil eines riesigen Webframeworks, an dem über 60 Personen arbeiten, haha" - Haha in der Tat. Dann haben Sie Ihre Frage nicht klar gestellt!
Jawad

Antworten:

416

Stellen Sie den Listenstil und die linke Auffüllung auf nichts.

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

Um die Kugeln zu pflegen, können Sie die list-style: nonedurch list-style-position: insideoder die Kurzschrift ersetzen list-style: inside:

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

j08691
quelle
18
Sie können die Einrückungen entfernen und die Nummerierung / Aufzählungszeichen beibehalten, indem Sie: ul {list-style-position: inside; padding-left: 0;}
Myforwik
4
Nun, da Sie Ihre Antwort bearbeitet haben, werden die Aufzählungszeichen beibehalten, aber es gibt immer noch das Problem, dass <li> s mit mehreren Textzeilen nicht alle Zeilen korrekt einrücken. Wenn Sie weiter bearbeiten, erhalten Sie möglicherweise endlich meine Lösung. : D
Jpsy
Die zweite Lösung, die die Kugel hält, scheint nicht mehr zu funktionieren (Chrome 55 unter Windows). Irgendwelche Alternativen?
Tom Pažourek
2
@ TomPažourek Probieren Sie list-style-position: outside; padding-left: 1em;die<ul>
j08691
1
@ j08691: Ja, das funktioniert, obwohl das 1emDing ein bisschen magisch ist ... Und es ist tatsächlich noch ein kleines Stück Einrückung übrig.
Tom Pažourek
93

Meine bevorzugte Lösung zum Entfernen von <ul> Einrückungen ist ein einfacher CSS-Einzeiler:

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>

Diese Lösung ist nicht nur leicht, sondern bietet mehrere Vorteile:

  • Die Aufzählungspunkte von <ul> werden gut links am umgebenden normalen Absatztext ausgerichtet (= Einrücken von <ul> entfernt).
  • Die Textblöcke in den <li> -Elementen bleiben korrekt eingerückt, wenn sie in mehrere Zeilen eingeschlossen werden.

Legacy-Informationen:
Für IE-Versionen 8 und niedriger müssen Sie stattdessen margin-left verwenden:

    ul { margin-left: 1.2em; }
Jpsy
quelle
Ich habe alle Probleme bereits in meinem Beitrag @aioobe erklärt. Aber auch hier noch einmal: Die akzeptierte Antwort (Status ab sofort, da mein ursprünglicher Beitrag nach mehrmaliger Bearbeitung bearbeitet wurde, um ihn zu verbessern) behält jetzt die Aufzählungszeichen bei (wenn Sie das zweite angegebene Beispiel verwenden), rückt jedoch nicht mehrzeilig mit Aufzählungszeichen ein Text. Hier ist die Geige des zweiten Beispiels der akzeptierten Antwort, die geändert wurde, um den Effekt zu zeigen: jsfiddle.net/v6nyuq6f/88 Und hier ist dieselbe Geige, die mit meinem Ansatz korrigiert wurde: jsfiddle.net/v6nyuq6f/89
Jpsy
Es ist also 2016 und es ist die sauberste Lösung für dieses häufig auftretende Problem, sich auf einen Wert zu verlassen, der "nicht für alle Browser perfekt" ist. Gibt es eine Möglichkeit, die genaue Breite des Elementsymbols zu ermitteln, möglicherweise mithilfe von CSS3-Funktionen?
F30
Nur um sicher zu gehen:ul { padding-left:1.2em; margin-left: 0; }
Andrew Murphy
1
Einzige Lösung auf dieser Seite, die korrekt mit langen Listenelementen funktioniert (korrekt umlaufen) - Danke!
FredyWenger
8

Fügen Sie dies Ihrem CSS hinzu:

ul { list-style-position: inside; }

Dadurch werden die li-Elemente im selben Einzug wie andere Absätze und Texte platziert.

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

Graham
quelle
6
Richtet bei <li> s mit mehreren Textzeilen list-style-position: insideden Text der zweiten und aller folgenden Zeilen am Aufzählungszeichen aus. Dies ist sicherlich nicht wünschenswert.
Jpsy
7

display:table-row; wird auch die Einkerbung loswerden, aber die Kugeln entfernen.

Dov Miller
quelle
5

Entfernen Sie die Polsterung:

padding-left: 0;
John Conde
quelle
4

Können Sie einen Link bereitstellen? danke Ich kann einen Blick darauf werfen Höchstwahrscheinlich ist Ihr CSS-Selektor nicht stark genug oder Sie können es versuchen

padding:0!important;

naeluh
quelle
1
Abmessungen werden nicht benötigt, wenn 0 angegeben wird.
raam86
11
!importantist böse
Madbreaks
@Madbreaks Es kann funktionieren, wenn der Selektor der richtige ist und der Anwendungsfall korrekt ist, aber Ihr rechtes Problem nicht dieser. Vielleicht gibt es in diesem Fall eine CSS-Hauptregel, die beim Ändern der Basisdatei überschrieben werden muss, sodass sie in bleibt Tack wie nicht Kern hacken? Ich weiß nicht, vielleicht irre ich mich
naeluh
4

Ich habe das gleiche Problem mit einer Fußzeile, die ich aufteilen möchte. Ich fand heraus, dass dies für mich funktionierte, indem ich einige der oben genannten Vorschläge zusammen ausprobierte:

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

Dies scheint es links unter meinem h1 zu halten und die Kugel zeigt innerhalb des Div und nicht außerhalb links.

Gary Ford
quelle
3

Live-Demo: 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: "●";
}

Da die ursprüngliche Frage hinsichtlich ihrer Anforderungen unklar ist, habe ich versucht, dieses Problem innerhalb der durch andere Antworten festgelegten Richtlinien zu lösen. Bestimmtes:

  • Richten Sie Listenaufzählungszeichen am Text außerhalb des Absatzes aus
  • Richten Sie mehrere Zeilen innerhalb desselben Listenelements aus

Ich wollte auch eine Lösung, bei der sich die Browser nicht darauf einigen, wie viel Polsterung verwendet werden soll. Der Vollständigkeit halber habe ich eine geordnete Liste hinzugefügt.

Corey
quelle
-1

Dabei setze ich den Rand auf 0 (ul style = "margin: -0px"). Die Aufzählungszeichen werden mit dem Absatz ohne Überhang ausgerichtet.

Jael Faulcon 323-743-3816
quelle
Ich verstehe nicht, warum Sie außer dem negativen Vorzeichen vor einer Null herabgestimmt wurden. Ich habe dies in Google Chrome versucht und es hat funktioniert, während die Padding-Left: 0-Lösung dies nicht tat. Dies ist auf Google Chrome Version 79.0.3945.88 WinX, 64-Bit.
MrPotatoHead
Zu meinem obigen Kommentar hinzufügen ... da ich ihn nicht bearbeiten kann ... habe ich ein bisschen mehr damit gespielt, und auf dem neuesten Firefox (71.0) ist das Verhalten dasselbe. Dies gilt jedoch für ungeordnete Listen (ul). Bei Verwendung geordneter Listen (ol) scheint 1.2em den linken Rand der Liste am linken Rand eines anderen Textes auszurichten (gemäß Jpsy-Antwort oben).
MrPotatoHead