¿Cómo eliminar la sangría de un elemento de la lista desordenada?

260

Quiero eliminar toda sangría de ul. He intentado establecer margin, padding, text-indenta 0, pero sin éxito. Parece que el ajuste text-indenta un número negativo es el truco, pero ¿esa es realmente la única forma de eliminar la sangría?

antonpug
fuente
Difícil de decir sin su HTML y CSS, pero usando un Restablecer / Normalizar CSS que consiste en reglas ul {padding: 0; margin: 0;} hace el truco en la mayoría de los casos. Estoy seguro de que la sangría de texto no tiene nada que ver con eso.
Jawad
Sin ver lo que realmente estás haciendo, es difícil decir cuál es el problema. Establecer tanto el margen como el relleno en el ul a 0 debería funcionar entre navegadores.
kinakuta
66
"No funcionó. Y no puedo usar el restablecimiento de CSS. Mis cambios son parte de un marco web gigante con más de 60 personas trabajando en él jaja" - Jaja de hecho. ¡Entonces no has hecho tu pregunta claramente!
Jawad

Respuestas:

417

Establezca el estilo de lista y el relleno izquierdo en nada.

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

Para mantener las viñetas, puede reemplazar list-style: nonecon list-style-position: insideo la taquigrafía list-style: inside:

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

j08691
fuente
18
Puede eliminar las sangrías y mantener la numeración / viñetas: ul {list-style-position: inside; padding-left: 0;}
Myforwik
44
Bueno, ahora que editó su respuesta, las viñetas se mantienen, pero aún existe el problema de que <li> s con múltiples líneas de texto no sangra correctamente todas las líneas. Si sigues editando, finalmente puedes terminar con mi solución. : D
Jpsy
La segunda solución que mantiene la bala ya no parece funcionar (Chrome 55 en Windows). Alguna alternativa?
Tom Pažourek
2
@ TomPažourek Pruébelo list-style-position: outside; padding-left: 1em;en<ul>
j08691
1
@ j08691: Sí, eso funciona, aunque la 1emcosa tiene un poco de valor mágico ... Y en realidad todavía queda una pequeña muesca.
Tom Pažourek
93

Mi solución preferida para eliminar la sangría <ul> es una simple línea de 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>

Esta solución no solo es liviana, sino que tiene múltiples ventajas:

  • Alinea a la izquierda las viñetas de <ul> con el texto del párrafo normal circundante (= se elimina la sangría de <ul>).
  • Los bloques de texto dentro de los elementos <li> permanecen correctamente sangrados si se envuelven en varias líneas.

Información heredada:
para las versiones de IE 8 y posteriores, debe usar margen izquierdo en su lugar:

    ul { margin-left: 1.2em; }
Jpsy
fuente
Ya expliqué todos los problemas en mi publicación, @aioobe. Pero aquí de nuevo: la respuesta aceptada (estado a partir de ahora, porque después de mi publicación original se ha editado varias veces para mejorarla) ahora mantiene las viñetas (si usa el segundo ejemplo dado), pero no sangra correctamente las líneas múltiples con viñetas texto. Aquí está el violín del segundo ejemplo de la respuesta aceptada, modificada para mostrar el efecto: jsfiddle.net/v6nyuq6f/88 Y aquí está el mismo violín corregido con mi enfoque: jsfiddle.net/v6nyuq6f/89
Jpsy
Por lo tanto, es 2016 y confiar en un valor que "no es perfecto para todos los navegadores" es la solución más limpia para este problema bastante común. ¿Hay alguna forma de obtener el ancho exacto del símbolo del elemento, tal vez usando las funciones CSS3?
F30
Solo para estar seguro:ul { padding-left:1.2em; margin-left: 0; }
Andrew Murphy
1
Única solución en esta página, que funciona correctamente con elementos de lista largos (ajuste correcto) - ¡Gracias!
FredyWenger
8

Agregue esto a su CSS:

ul { list-style-position: inside; }

Esto colocará los elementos li en la misma sangría que otros párrafos y texto.

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

Graham
fuente
66
En <li> s con varias líneas de texto, list-style-position: insidealinea el texto de la segunda línea y todas las líneas siguientes con la viñeta. Esto seguramente no es deseable.
Jpsy
7

display:table-row; también eliminará la sangría pero eliminará las balas.

Dov Miller
fuente
5

Retire el relleno:

padding-left: 0;
John Conde
fuente
4

¿Puedes proporcionar un enlace? gracias puedo echar un vistazo Lo más probable es que su selector CSS no sea lo suficientemente fuerte o puede intentar

padding:0!important;

naeluh
fuente
1
Las dimensiones no son necesarias cuando se especifica 0.
raam86
11
!importantes MALO
Madbreaks
@Madbreaks Puede funcionar si el selector es el correcto y el caso de uso es correcto, pero su problema correcto no es este, tal vez en este caso hay una regla css principal que debe anularse al cambiar el archivo base, por lo que se dejó en virar como no hackear el núcleo? No sé, tal vez estoy equivocado
naeluh
4

Tengo el mismo problema con un pie de página que estoy tratando de dividir. Descubrí que esto funcionó para mí al probar algunas de las sugerencias anteriores combinadas:

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

Esto parece mantenerlo a la izquierda debajo de mi h1 y las viñetas dentro del div en lugar de afuera a la izquierda.

Gary Ford
fuente
3

Demostración en vivo: 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: "●";
}

Como la pregunta original no está clara acerca de sus requisitos, intenté resolver este problema dentro de las pautas establecidas por otras respuestas. En particular:

  • Alinear viñetas de lista con texto de párrafo externo
  • Alinee varias líneas dentro del mismo elemento de la lista.

También quería una solución que no dependiera de que los navegadores acordaran cuánto relleno usar. He agregado una lista ordenada para completar.

Corey
fuente
-1

Al hacer esto en línea, establecí el margen en 0 (ul style = "margin: -0px"). Las balas se alinean con el párrafo sin saliente.

Jael Faulcon 323-743-3816
fuente
No entiendo por qué te votaron negativamente aparte del signo negativo delante de un cero. Intenté esto en Google Chrome y funcionó, mientras que la solución padding-left: 0 no funcionó. Esto está en Google Chrome versión 79.0.3945.88 WinX, 64 bit.
MrPotatoHead
Agregando a mi comentario anterior ... ya que no puedo editarlo ... jugué con esto un poco más, y en el último Firefox (71.0), el comportamiento es el mismo. Sin embargo, esto es con listas desordenadas (ul). Cuando se usan listas ordenadas (ol), 1.2em parece alinear el borde izquierdo de la lista con el margen izquierdo de otro texto (según la respuesta Jpsy anterior).
MrPotatoHead