Comment supprimer l'indentation d'un élément de liste non ordonné?

260

Je souhaite supprimer toute indentation de ul. J'ai essayé la mise margin, padding, text-indentà 0, mais en vain. Il semble que la définition text-indentd'un nombre négatif fasse l'affaire - mais est-ce vraiment la seule façon de supprimer l'indentation?

antonpug
la source
Difficile à dire sans votre HTML et CSS mais en utilisant une réinitialisation / normalisation CSS composée de règles ul {padding: 0; margin: 0;} fait l'affaire dans la plupart des cas. Je suis sûr que le retrait de texte n'a rien à voir avec cela.
Jawad
Sans voir ce que vous faites réellement, il est difficile de dire quel est le problème. La définition de la marge et du remplissage sur ul à 0 devrait fonctionner entre les navigateurs.
kinakuta
6
"Cela n'a pas fonctionné. Et je ne peux pas utiliser la réinitialisation CSS. Mes modifications font partie d'un cadre Web géant avec plus de 60 personnes qui y travaillent haha" - Haha en effet. Que vous n'avez pas posé votre question clairement!
Jawad

Réponses:

417

Définissez le style de liste et le remplissage gauche sur rien.

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

Pour conserver les puces, vous pouvez remplacer le list-style: nonepar list-style-position: insideou la sténographie list-style: inside:

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

j08691
la source
18
Vous pouvez supprimer les retraits et conserver la numérotation / les puces par: ul {list-style-position: inside; padding-left: 0;}
Myforwik
4
Eh bien, maintenant que vous avez modifié votre réponse, les puces sont conservées, mais il y a toujours le problème que les <li> avec plusieurs lignes de texte ne mettent pas correctement en retrait toutes les lignes. Si vous continuez à éditer, vous pouvez enfin vous retrouver avec ma solution. : D
Jpsy
La deuxième solution qui garde la balle ne semble plus fonctionner (Chrome 55 sur Windows). Des alternatives?
Tom Pažourek
2
@ TomPažourek Essayez list-style-position: outside; padding-left: 1em;le<ul>
j08691
1
@ j08691: Oui, cela fonctionne, bien que la 1emchose soit un peu d'une valeur magique ... Et il reste en fait un tout petit peu d'indentation.
Tom Pažourek
93

Ma solution préférée pour supprimer l'indentation <ul> est une simple ligne CSS simple:

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>

Cette solution est non seulement légère, mais présente de multiples avantages:

  • Il aligne parfaitement à gauche les puces de <ul> sur le texte de paragraphe normal environnant (= retrait de <ul> supprimé).
  • Les blocs de texte au sein des éléments <li> restent correctement en retrait s'ils s'articulent sur plusieurs lignes.

Informations héritées:
pour les versions IE 8 et inférieures, vous devez utiliser la marge gauche à la place:

    ul { margin-left: 1.2em; }
Jpsy
la source
J'ai déjà expliqué tous les problèmes dans mon message, @aioobe. Mais là encore: la réponse acceptée (état à partir de maintenant, car après ma publication d'origine, elle a été modifiée plusieurs fois pour l'améliorer) conserve désormais les puces (si vous utilisez le deuxième exemple donné), mais elle ne met pas correctement en retrait la puce multiligne texte. Voici le violon du deuxième exemple de la réponse acceptée, modifié pour montrer l'effet: jsfiddle.net/v6nyuq6f/88 Et voici le même violon corrigé avec mon approche: jsfiddle.net/v6nyuq6f/89
Jpsy
C'est donc 2016 et s'appuyer sur une valeur qui n'est "pas parfaite pour tous les navigateurs" est la solution la plus propre à ce problème assez courant. Existe-t-il un moyen d'obtenir la largeur exacte du symbole de l'élément, peut-être en utilisant les fonctionnalités CSS3?
F30
Juste pour être en sécurité:ul { padding-left:1.2em; margin-left: 0; }
Andrew Murphy
1
Seule solution sur cette page, qui fonctionne correctement avec les éléments de longue liste (envelopper correctement) - Merci!
FredyWenger
8

Ajoutez ceci à votre CSS:

ul { list-style-position: inside; }

Cela placera les éléments li dans le même tiret que les autres paragraphes et textes.

Réf: http://www.w3schools.com/cssref/pr_list-style-position.asp

Graham
la source
6
Sur les <li> avec plusieurs lignes de texte, list-style-position: insidealigne le texte de la deuxième ligne et de toutes les lignes suivantes avec la puce. Ce n'est certainement pas souhaitable.
Jpsy
7

display:table-row; supprimera également l'indentation mais supprimera les balles.

Dov Miller
la source
5

Retirez le rembourrage:

padding-left: 0;
John Conde
la source
4

Pouvez-vous fournir un lien? merci je peux jeter un oeil Très probablement votre sélecteur css n'est pas assez fort ou pouvez-vous essayer

padding:0!important;

naeluh
la source
1
Les dimensions ne sont pas nécessaires lors de la spécification de 0.
raam86
11
!importantest EVIL
Madbreaks
@Madbreaks Cela peut fonctionner si le sélecteur est le bon et que le cas d'utilisation est correct mais votre problème n'est pas celui-ci, peut-être que dans ce cas, il existe une règle css principale qui doit être remplacée par la modification du fichier de base, donc il est laissé dans virer de bord comme ne pas pirater le noyau? Je ne sais pas peut-être que je me trompe
naeluh
4

J'ai le même problème avec un pied de page que j'essaie de diviser. J'ai trouvé que cela fonctionnait pour moi en essayant quelques-unes des suggestions ci-dessus combinées:

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

Cela semble le garder à gauche sous mon h1 et les points de balle à l'intérieur du div plutôt qu'à l'extérieur vers la gauche.

Gary Ford
la source
3

Démo en direct: 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: "●";
}

Étant donné que la question d'origine n'est pas claire sur ses exigences, j'ai essayé de résoudre ce problème dans les lignes directrices définies par d'autres réponses. En particulier:

  • Aligner les puces de liste avec le texte de paragraphe extérieur
  • Aligner plusieurs lignes dans le même élément de liste

Je voulais également une solution qui ne repose pas sur des navigateurs convenant de la quantité de rembourrage à utiliser. J'ai ajouté une liste ordonnée pour être complète.

Corey
la source
-1

En faisant cela en ligne, j'ai mis la marge à 0 (ul style = "margin: -0px"). Les puces s'alignent sur le paragraphe sans surplomb.

Jael Faulcon 323-743-3816
la source
Je ne comprends pas pourquoi vous avez reçu un vote négatif autre que le signe négatif devant un zéro. J'ai essayé cela sur Google Chrome et cela a fonctionné, contrairement à la solution padding-left: 0. C'est sur Google Chrome version 79.0.3945.88 WinX, 64 bits.
MrPotatoHead
Ajout à mon commentaire ci-dessus ... car je ne peux pas le modifier ... J'ai joué avec cela un peu plus, et sur le dernier Firefox (71.0), le comportement est le même. Cependant, c'est avec des listes non ordonnées (ul). Lorsque vous utilisez des listes ordonnées (ol), 1.2em semble aligner le bord gauche de la liste avec la marge gauche d'un autre texte (par réponse Jpsy ci-dessus).
MrPotatoHead