Come rimuovere il rientro da una voce di elenco non ordinata?


260

Voglio rimuovere tutti i rientri da ul. Ho provato a installare margin, padding, text-indenta 0, ma senza alcun risultato. Sembra che l'impostazione text-indentdi un numero negativo funzioni, ma è davvero l'unico modo per rimuovere il rientro?


Difficile dirlo senza HTML e CSS, ma utilizzando un ripristino / normalizzazione CSS costituito da regole ul {padding: 0; margin: 0;} fa il trucco nella maggior parte dei casi. Sono sicuro che il rientro del testo non ha nulla a che fare con esso.
Jawad,

Senza vedere cosa stai effettivamente facendo, è difficile dire quale sia il problema. L'impostazione sia del margine che del padding su ul su 0 dovrebbe funzionare su più browser.
Kinakuta,

6
"Non ha funzionato. E non posso usare il reset CSS. Le mie modifiche fanno parte di un gigantesco framework web con oltre 60 persone che ci lavorano haha" - Haha davvero. Di quanto non hai fatto la tua domanda chiaramente!
Jawad,

Risposte:


417

Imposta lo stile dell'elenco e il riempimento a sinistra su nulla.

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

Per mantenere i proiettili è possibile sostituire la list-style: nonecon list-style-position: insideo la scorciatoia list-style: inside:

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


18
Puoi rimuovere i rientri e conservare la numerazione / i punti elenco: ul {list-style-position: inside; padding-left: 0;}
Myforwik

4
Bene, ora che hai modificato la tua risposta, i punti elenco vengono mantenuti, ma c'è ancora il problema che <li> s con più righe di testo non rientra correttamente tutte le righe. Se continui a modificare potresti finalmente finire con la mia soluzione. : D
Jpsy

La seconda soluzione che mantiene il proiettile non sembra più funzionare (Chrome 55 su Windows). Qualche alternativa?
Tom Pažourek,

2
@ TomPažourek Prova list-style-position: outside; padding-left: 1em;il<ul>
j08691

1
@ j08691: Sì, funziona, anche se la 1emcosa ha un valore magico ... E in realtà è rimasto ancora un po 'di rientro.
Tom Pažourek,

93

La mia soluzione preferita per rimuovere il rientro <ul> è un semplice CSS one-liner:

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>

Questa soluzione non è solo leggera, ma presenta numerosi vantaggi:

  • Allinea perfettamente a sinistra i punti elenco di <ul> al testo di paragrafo normale circostante (= rientro di <ul> rimosso).
  • I blocchi di testo all'interno degli elementi <li> rimangono correttamente rientrati se si avvolgono in più righe.

Informazioni legacy:
per IE versioni 8 e precedenti è necessario utilizzare margin-left invece:

    ul { margin-left: 1.2em; }

Ho spiegato tutti i problemi già nel mio post, @aioobe. Ma di nuovo qui: la risposta accettata (stato attuale, perché dopo la mia pubblicazione originale è stata modificata più volte per migliorarla) ora mantiene i punti elenco (se si utilizza il secondo esempio fornito), ma non rientra correttamente in più righe puntate testo. Ecco il violino del secondo esempio della risposta accettata, modificato per mostrare l'effetto: jsfiddle.net/v6nyuq6f/88 Ed ecco lo stesso violino corretto con il mio approccio: jsfiddle.net/v6nyuq6f/89
Jpsy

Quindi è il 2016 e fare affidamento su un valore che non è "perfetto per tutti i browser" è la soluzione più pulita per questo problema piuttosto comune. Esiste un modo per ottenere la larghezza esatta del simbolo dell'articolo, magari utilizzando le funzionalità CSS3?
F30,

Giusto per sicurezza:ul { padding-left:1.2em; margin-left: 0; }
Andrew Murphy,

1
L'unica soluzione in questa pagina, che funziona correttamente con gli elementi della lunga lista (avvolgere correttamente) - Grazie!
FredyWenger,

8

Aggiungi questo al tuo CSS:

ul { list-style-position: inside; }

Ciò inserirà gli elementi li nello stesso trattino di altri paragrafi e testo.

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


6
Su <li> s con più righe di testo, list-style-position: insideallinea il testo della seconda riga e tutte le righe seguenti con il punto elenco. Questo non è sicuramente auspicabile.
Jpsy,

7

display:table-row; eliminerà anche il rientro ma rimuoverà i proiettili.



4

Puoi fornire un collegamento ? grazie posso dare un'occhiata molto probabilmente il tuo selettore css non è abbastanza forte o puoi provare

padding:0!important;


1
Le dimensioni non sono necessarie quando si specifica 0.
raam86

11
!importantè EVIL
Madbreaks il

@Madbreaks Può funzionare se il selettore è quello corretto e il caso d'uso è corretto ma il tuo diritto probabilmente non è questo, forse in questo caso c'è una regola css principale che deve essere sostituita con la modifica del file di base, quindi è rimasta in virata come non hacking core? Forse non so di sbagliarmi
naeluh del

4

Ho lo stesso problema con un piè di pagina che sto cercando di dividere. Ho scoperto che questo ha funzionato per me provando alcuni dei suggerimenti di cui sopra combinati:

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

Questo sembra tenerlo a sinistra sotto il mio h1 e il proiettile punta all'interno del div piuttosto che all'esterno a sinistra.


3

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

Poiché la domanda originale non è chiara in merito ai suoi requisiti, ho cercato di risolvere questo problema all'interno delle linee guida stabilite da altre risposte. In particolare:

  • Allinea i punti elenco con il testo del paragrafo esterno
  • Allinea più righe all'interno della stessa voce di elenco

Volevo anche una soluzione che non dipendesse dal fatto che i browser concordassero su quanto riempimento usare. Ho aggiunto un elenco ordinato per completezza.


-1

In questo modo, ho impostato il margine su 0 (ul style = "margin: -0px"). I proiettili si allineano al paragrafo senza sporgenza.


Non capisco perché sei stato sotto votato a parte il segno negativo di fronte a uno zero. Ho provato questo su Google Chrome e ha funzionato, mentre la soluzione padding-left: 0 no. Questo è su Google Chrome versione 79.0.3945.88 WinX, 64 bit.
MrPotatoHead

Aggiungendo al mio commento sopra ... dal momento che non riesco a modificarlo ... Ho giocato un po 'di più con questo, e sull'ultimo Firefox (71.0), il comportamento è lo stesso. Tuttavia, questo è con elenchi non ordinati (ul). Quando si usano gli elenchi ordinati (ol), 1.2em sembra allineare il bordo sinistro dell'elenco con il margine sinistro di altro testo (per la risposta Jpsy sopra).
MrPotatoHead
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.