Come posso centrare <ul> <li> in div


88

Come posso centrare un elenco non ordinato di <li>in una larghezza fissa div?

<table width="100%">
  <tbody>
  <tr>
    <td width="41%"><img src="/web/20100104192317im_/http://www.studioteknik.com/html2/html/images/hors-service.jpg" width="400" height="424"></td>
    <td width="59%"><p align="left">&nbsp;</p>
      <h1 align="left">StudioTeknik.com</h1>
      <p><br align="left">
        <strong>Marc-André Ménard</strong></p>
      <ul>
        <li>Photographie digitale</li>
        <li>Infographie </li>
        <li>Débug et IT (MAC et PC)</li>
        <li> Retouche </li>
        <li>Site internet</li>
        <li>Graphisme</li>
      </ul>
      <p align="left"><span class="style1"><strong>Cellulaire en suisse : </strong></span><a href="#">+41 079 573 48 99</a></p>
      <p align="left"><strong class="style1">Skype : </strong> <a href="#">menardmam</a></p>
    <p align="left"><strong class="style1">Courriel :</strong><a href="https://web.archive.org/web/20100104192317/mailto:menardmam@hotmail.com">    info@studioteknik.com</a></p></td>
  </tr>
  </tbody>
</table>

Risposte:


139

Poiché gli elementi ule lisono display: blockdi default, assegna loro i margini automatici e una larghezza inferiore al loro contenitore .

ul {
    width: 70%;
    margin: auto;
}

Se hai cambiato la loro proprietà di visualizzazione o hai fatto qualcosa che sovrascrive le normali regole di allineamento (come fluttuarle), allora non funzionerà.


4
se questo non ti rende felice, probabilmente: stackoverflow.com/questions/2865380/…
Bruiser

10
Larghezza impostazione: auto; e display: inline-block; consentirebbe al tuo ul di comportarsi come una riga di testo. È quindi possibile utilizzare text-align: center; sull'elemento genitore. Ciò consentirebbe anche al tuo ul di crescere e ridursi al variare del contenuto interno, invece di avere una larghezza fissa.
i_a

@Chetabahana - Stai guardando il testo, non l'elemento: jsfiddle.net/qwbexxog/3
Quentin

non funziona bene con tutte le risoluzioni, il centro flessibile funziona
Srinivas08

163

Per centrare l'ul e avere anche gli elementi li centrati in esso , e fare in modo che la larghezza dell'ul cambi dinamicamente, usa display: inline-block; e avvolgerlo in un div centrato.

<style type="text/css">
    .wrapper {
        text-align: center;
    }
    .wrapper ul {
        display: inline-block;
        margin: 0;
        padding: 0;
        /* For IE, the outcast */
        zoom:1;
        *display: inline;
    }
    .wrapper li {
        float: left;
        padding: 2px 5px;
        border: 1px solid black;
    }
</style>

<div class="wrapper">
    <ul>
        <li>Three</li>
        <li>Blind</li>
        <li>Mice</li>
    </ul>
</div>

Aggiornare

Ecco un collegamento jsFiddle al codice sopra.


Questo è il problema che ho avuto con le altre soluzioni, non funzionerebbe per gli elementi li se li cambiassi.
Aram Kocharyan

Lo stavo usando per Bootstrap 3 nav e dovevo aggiungerlo float: none;al file ul.
Dylan Valade


22

Passaggi:

  1. Scrivi style="text-align:center;"al genitore divdiul
  2. Scrivi style="display:inline-table;"aul
  3. Scrivi style="display:inline;"ali

o utilizzare

<div class="menu">
 <ul>
   <li>item 1 </li>
   <li>item 2 </li>
   <li>item 3 </li>
 </ul>
</div>

<style>
 .menu { text-align: center; }
 .menu ul { display:inline-table; }
 .menu li { display:inline; }
</style>

Dobbiamo aggiungere il margine, altrimenti è annidato l'un l'altro controlla qui jsfiddle.net/qwbexxog/4
Chetabahana

9

Questo è un modo migliore per centrare gli UL all'interno di qualsiasi contenitore DIV.

Questa soluzione CSS non utilizza le proprietà Width e Float. Float: Left e Width: 70%, ti causerà mal di testa quando dovrai duplicare il tuo menu su pagine diverse con voci di menu diverse.

Invece di usare la larghezza, usiamo il riempimento e il margine per determinare lo spazio intorno al testo / voce di menu. Inoltre, invece di usare Float: Left nell'elemento LI, usa display: inline-block.

Facendo fluttuare la tua LI a sinistra, fai letteralmente fluttuare il tuo contenuto a sinistra e quindi devi usare uno degli Hack menzionati sopra per centrare il tuo UL. Display: inline-block crea la tua proprietà Float per te (più o meno). Prende il tuo elemento LI e lo trasforma in un elemento blocco che giace uno accanto all'altro (non fluttuante).

Con la progettazione reattiva e l'utilizzo di framework come Bootstrap o Foundation, si verificheranno problemi durante il tentativo di fluttuare e centrare il contenuto. Hanno alcune classi incorporate, ma è sempre meglio farlo da zero. Questa soluzione è molto migliore per i menu dinamici (come il sistema di menu Adobe Business Catalyst).

Il riferimento per questo tutorial può essere trovato su: http://html-tuts.com/center-div-image-table-ul-inside-div/

HTML

<div class="container">
        <ul>
            <li><a href="#">Button</a></li>
            <li><a href="#">Button</a></li>
            <li><a href="#">Button</a></li>
            <li><a href="#">Button</a></li>
            <li><a href="#">Button</a></li>
        </ul>
    </div>

CSS

.container {
    text-align: center;
    border: 1px solid green;
}
.container ul {
    border: 2px solid red;
    display: inline-block;
    margin: 10px 0;
    padding: 2px;
}
.container li {
    display: inline-block;
}
.container li a {
    display: inline-block;
    background: #444;
    color: #FFF;
    padding: 5px;
    text-decoration: none;
}

6

Potrebbe essere

div ul
{
 width: [INSERT FIXED WIDTH]
 margin: 0 auto;
}

o

div li
{
text-align: center;
}

dipende da come dovrebbe apparire (o dalla combinazione di questi)


2
L'ultima opzione non centrerebbe gli elementi dell'elenco, ma solo il loro contenuto in linea.
Quentin

Tuttavia, se <li>non sono in stile, sembra lo stesso.
FP

4

Per centrare un oggetto blocco (ad esempio il ul) è necessario impostare una larghezza su di esso e quindi è possibile impostare i margini sinistro e destro di quell'oggetto su auto.

Per centrare il contenuto inline dell'oggetto blocco (ad esempio il contenuto inline di li) puoi impostare la proprietà css text-align: center;.


1

Provare

div#divID ul {margin:0 auto;}


1

Interessante ma provalo con elementi li flottati all'interno di ul: Esempio qui

Il problema ora: l'ul ha bisogno di una larghezza fissa per sedersi effettivamente al centro. Comunque vogliamo che sia relativo alla larghezza del contenitore (o dinamico), margin: 0 auto su ul non funziona.

Un modo migliore è lasciare andare l'elenco UL / Li e utilizzare un esempio di approccio diverso qui


0

Se conosci la larghezza di ulallora puoi semplicemente impostare il margine diul a0 auto;

Questo allineerà il ulal centro del div contenitore

Esempio:

HTML:

<div id="container">
 <ul>
  <li>Item1</li>
  <li>Item2</li>
 </ul>
<div>

CSS:

  #container ul{
    width:300px;
    margin:0 auto;
  }

0

Ecco la soluzione che ho trovato:

#wrapper {
  float:right;
  position:relative;
  left:-50%;
  text-align:left;
}
#wrapper ul {
  list-style:none;
  position:relative;
  left:50%;
}

#wrapper li{
  float:left;
  position:relative;
}

0

Un'altra opzione è:

HTML

<nav>
  <ul class = "main-nav"> 
   <li> Productos </li>
   <li> Catalogo </li>
   <li> Contact </li>  
   <li> Us </li>
  </ul>
</nav>    

CSS:

nav {
  text-align: center;
}

nav .main-nav li {
  float: left;
  width: 20%;
  margin-right: 5%;
  font-size: 36px;
  text-align: center;
}

0

Ho cercato lo stesso caso e ho provato tutte le risposte modificando la larghezza di <li>.
Sfortunatamente non tutti sono riusciti a ottenere la stessa distanza a sinistra ea destra del<ul> riquadro.

La corrispondenza più vicina è questa risposta, ma deve regolare il cambio di larghezza con il riempimento

.container ul {
    ...
    padding: 10px 25px;
}

.container li {
  ...
  width: 100px;
}

Vedi il risultato sotto, tutte le distanze <li>anche dalla <ul>scatola sono le stesse.inserisci qui la descrizione dell'immagine

Puoi controllarlo su questo jsFiddle:
http://jsfiddle.net/qwbexxog/14/


-1
<div id="container">
  <table width="100%" height="100%">
    <tr>
      <td align="center" valign="middle">
        <ul>
          <li>item 1</li>
          <li>item 2</li>
          <li>item 3</li>
        </ul>
      </td>
    </tr>
  </table>
</div>

-4

usa i tag del centro oldschool

<div> <center> <ul> <li>...</li> </ul></center> </div>

:-)


Dovresti evitare di usare espressioni di tipo stile nel codice di markup. Ecco per cosa è stato creato il CSS!
FP

1
Funzionabile ma nota che: "L' centerelemento è stato deprecato in HTML 4.01 e non è supportato in XHTML 1.0 Strict DTD" da w3schools.com/TAGS/tag_center.asp
okw

4
sigh W3Schools fornisce come al solito informazioni incomplete e sbagliate. È stato deprecato nella 4.0 e non nella 4.01 e non appare in nessuna variante Strict (individuare XHTML 1.0 è una scelta strana).
Quentin

Come accennato prima, questi sono stati deprecati in HTML 4.01 ... anche questa è solo una cattiva pratica ...
Jonny Haynes

2
Sì, non dovrebbe usare questo tipo di tag, ma questo non è un motivo per meritare una risposta negativa. A volte, vogliamo la soluzione più faticosa. E per me questa risposta è positiva.
workdreamer
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.