Como remover o recuo de um item de lista não ordenado?

260

Eu quero remover todo o recuo de ul. Tentei configurar margin, padding, text-indenta 0, mas sem sucesso. Parece que definir text-indentum número negativo funciona - mas essa é realmente a única maneira de remover o recuo?

antonpug
fonte
Difícil dizer sem HTML e CSS, mas usando um CSS Reset / Normalize que consiste em regras ul {padding: 0; margin: 0;} faz o truque na maioria dos casos. Estou certo de que o recuo do texto não tem nada a ver com isso.
Jawad
Sem ver o que você está realmente fazendo, é difícil dizer qual é o problema. Definir margem e preenchimento na ul como 0 deve funcionar em vários navegadores.
Kinakuta
6
"Não funcionou. E não posso usar a redefinição de CSS. Minhas alterações fazem parte de uma estrutura da Web gigante, com mais de 60 pessoas trabalhando nela, haha" - Haha de fato. Do que você não fez sua pergunta claramente!
Jawad

Respostas:

417

Defina o estilo da lista e o preenchimento esquerdo para nada.

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

Para manter os marcadores, você pode substituir o list-style: nonecom list-style-position: insideou a abreviação list-style: inside:

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

j08691
fonte
18
Você pode remover os recuos e manter a numeração / marcadores: ul {list-style-position: inside; padding-left: 0;}
Myforwik
4
Bem, agora que você editou sua resposta, os marcadores são mantidos, mas ainda existe o problema de que <li> s com várias linhas de texto não recua corretamente todas as linhas. Se você continuar editando, poderá finalmente acabar com a minha solução. : D
Jpsy 15/03/2015
A segunda solução que mantém a bala não parece mais funcionar (Chrome 55 no Windows). Alguma alternativa?
Tom Pažourek
2
@ TomPažourek Experimente list-style-position: outside; padding-left: 1em;o<ul>
j08691 20/01
1
@ j08691: Sim, isso funciona, embora a 1emcoisa seja um pouco mágica ... E ainda resta um pouco de indentação.
Tom Pažourek 20/01
93

Minha solução preferida para remover o recorte <ul> é uma linha simples 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 solução não é apenas leve, mas tem várias vantagens:

  • Alinha bem os marcadores de <ul> com o texto de parágrafo normal circundante (= recuo de <ul> removido).
  • Os blocos de texto nos elementos <li> permanecem corretamente recuados se forem agrupados em várias linhas.

Informações herdadas: nas
versões 8 e abaixo do IE, você deve usar a margem esquerda:

    ul { margin-left: 1.2em; }
Jpsy
fonte
Expliquei todos os problemas já publicados na minha postagem, @aioobe. Mas aqui novamente: a resposta aceita (status a partir de agora, porque depois da minha postagem original foi editada várias vezes para aprimorá-la) agora mantém os marcadores (se você usar o segundo exemplo fornecido), mas não recua corretamente a multilinha com marcadores texto. Aqui está o violino do segundo exemplo da resposta aceita, modificado para mostrar o efeito: jsfiddle.net/v6nyuq6f/88 E aqui está o mesmo violino corrigido com a minha abordagem: jsfiddle.net/v6nyuq6f/89
Jpsy
Portanto, é 2016 e contar com algum valor que "não é perfeito para todos os navegadores" é a solução mais limpa para esse problema bastante comum. Existe alguma maneira de obter a largura exata do símbolo do item, talvez usando os recursos CSS3?
F30
Apenas para ter certeza: #ul { padding-left:1.2em; margin-left: 0; }
Andrew Murphy
1
Única solução nesta página, que funciona corretamente com itens de lista longa (envolva corretamente) - Obrigado!
precisa saber é o seguinte
8

Adicione isso ao seu CSS:

ul { list-style-position: inside; }

Isso colocará os elementos li no mesmo recuo que outros parágrafos e texto.

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

Graham
fonte
6
Em <li> s com várias linhas de texto, list-style-position: insidealinha o texto da segunda e de todas as linhas seguintes com o marcador. Isso certamente não é desejável.
Jpsy # 6/14
7

display:table-row; também se livrará do recuo, mas removerá as balas.

Dov Miller
fonte
5

Retire o estofamento:

padding-left: 0;
John Conde
fonte
4

Você pode fornecer um link ? obrigado Eu posso dar uma olhada Muito provavelmente o seu seletor de css não é forte o suficiente ou você pode tentar

padding:0!important;

naeluh
fonte
1
As dimensões não são necessárias ao especificar 0.
raam86
11
!importantis EVIL
Madbreaks
@ Madbreaks Ele pode funcionar se o seletor for o correto e o caso de uso estiver correto, mas o seu problema não for este, talvez nesse caso exista uma regra principal de css que precise ser substituída com a alteração do arquivo base, para que ele seja deixado em aderência como não hackear o núcleo? Eu não sei, talvez eu esteja errado #
1123 naeluh
4

Eu tenho o mesmo problema com um rodapé que estou tentando dividir. Descobri que isso funcionou para mim, tentando algumas das sugestões acima combinadas:

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

Isso parece mantê-lo à esquerda sob meu h1 e os pontos de bala dentro da div e não fora à esquerda.

Gary Ford
fonte
3

Demonstração ao 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 a pergunta original não é clara sobre seus requisitos, tentei resolver esse problema dentro das diretrizes definidas por outras respostas. Em particular:

  • Alinhar marcadores de lista com texto de parágrafo externo
  • Alinhar várias linhas no mesmo item da lista

Eu também queria uma solução que não dependesse de navegadores concordando com a quantidade de preenchimento a ser usada. Eu adicionei uma lista ordenada para completar.

Corey
fonte
-1

Fazendo isso em linha, defino a margem como 0 (ul style = "margin: -0px"). As marcas estão alinhadas com o parágrafo sem saliência.

Jael Faulcon 323-743-3816
fonte
Não entendo por que você recebeu o voto negativo, exceto o sinal negativo na frente de um zero. Eu tentei isso no Google Chrome e funcionou, enquanto a solução padding-left: 0 não. Isso está no Google Chrome versão 79.0.3945.88 WinX, 64 bits.
MrPotatoHead
Adicionando ao meu comentário acima ... como não consigo editá-lo ... brinquei um pouco mais com isso e, no Firefox (71.0) mais recente, o comportamento é o mesmo. No entanto, isso ocorre com listas não ordenadas (ul). Ao usar listas ordenadas (ol), o 1.2em parece alinhar a borda esquerda da lista com a margem esquerda de outro texto (conforme resposta Jpsy acima).
MrPotatoHead 31/12/19