Cosa è esattamente necessario per "margin: 0 auto;" lavorare?


206

So che l'impostazione margin: 0 auto;su un elemento viene utilizzata per centrarlo (sinistra-destra). Tuttavia, so che l'elemento e il suo genitore devono soddisfare determinati criteri per far funzionare il margine automatico e non riesco mai a trovare la magia giusta.

Quindi la mia domanda è semplice: quali proprietà CSS devono essere impostate su un elemento e sul suo genitore al fine margin: 0 auto;di centrare il bambino a destra-sinistra?


questo non sembra mai funzionare correttamente per me in IE ... quindi sono curioso anche di questo.
Aprire il

5
@Mark: IE gestirà margin: 0 auto;correttamente solo in modalità standard, quindi è necessario un tipo di documento (come se non fosse necessario prima).
BoltClock

Risposte:


292

In cima alla mia testa:

  1. L'elemento deve essere a livello di blocco, ad es. display: blockOppuredisplay: table
  2. L'elemento non deve galleggiare
  3. L'elemento non deve avere una posizione fissa o assoluta 1

Fuori dalla testa delle altre persone:

  1. L'elemento deve avere un valore widthnon auto2

Si noti che tutte queste condizioni devono essere vere per l'elemento centrato affinché funzioni.


1 C'è una sola eccezione a questa: se il vostro fisso o elemento posizionato in modo assoluto ha left: 0; right: 0, esso sarà centrare con margini auto .

2 Tecnicamente, margin: 0 autofunziona con una larghezza automatica, ma la larghezza automatica ha la precedenza sui margini automatici e, di conseguenza, i margini automatici vengono azzerati, facendo sembrare che non "funzionino".


7
Due risposte "Off the top of the head": o
Russell Dias,

4
aggiungere la larghezza fissa e avete ottenuto la risposta perfetta
meo

1
Dannazione! Tutti gli altri hanno risposto mentre stavo programmando! Anche dalla parte superiore della mia testa ...: O
Kyle,

Mi manca l' ol startattributo (e non è possibile farlo in Markdown) :(
BoltClock

1
@Triynko: Né la domanda né la mia risposta hanno mai detto nulla sugli attributi di presentazione HTML (la domanda non è nemmeno taggata [html]!), Quindi non sono sicuro di cosa esattamente stai chiamando bull. Comunque, mentre ogni elemento che può essere preso di mira con CSS può avere le proprietà di larghezza e altezza CSS, non tutti gli elementi HTML possono avere i corrispondenti attributi di presentazione, e la ragione è semplicemente che non ha senso averli su determinati Elementi HTML.
BoltClock

19

Dalla parte superiore della mia testa, ha bisogno di un width. Devi specificare la larghezza del contenitore che stai centrando (non la larghezza principale).


16
Tutto sta venendo fuori dalla nostra testa!
BoltClock

8

Regola completa per CSS:

  1. ( display: blockE widthnon auto) ORdisplay: table
  2. float: none
  3. position: relative

3

Dalla parte superiore della mia testa, se l'elemento non è un elemento a blocchi, fallo così.

e poi dagli una larghezza.


2

Funzionerà anche con display: table - un'utile proprietà display in questo caso perché non richiede l'impostazione di una larghezza. (So ​​che questo post ha 5 anni, ma è ancora rilevante per i passanti;)


2

Dalla parte superiore della testa del mio gatto, assicurati che divnon stia cercando di centrare width: 100%.

Se lo è, allora le regole stabilite sui div bambini sono ciò che conta.


1

Per favore, vai a questo breve esempio che ho creato jsFiddle . Spero sia facile da capire. È possibile utilizzare un wrapperdiv con la larghezza del sito per allineare al centro. Il motivo che devi mettere widthè che così il browser sa che non stai andando per un layout liquido.


1

Ecco il mio suggerimento:

First: 
      1. Add display: block or table
      2. Add position: relative
      3. Add width:(percentage also works fine)
Second: 
      if above trick not works then you have to add float:none;


-1

Per chiunque proprio ora colpire questa domanda e non essere in grado di risolvere margin: 0 auto, ecco qualcosa che ho scoperto che potresti trovare utile: un tableelemento senza una larghezza specificata deve avere display: tablee non display: block per margin: autofunzionare. Questo può essere ovvio per alcuni, poiché la combinazione di display: blocke il widthvalore predefinito darà una tabella che si espande per riempire il suo contenitore, ma se vuoi che la tabella prenda la sua larghezza "naturale" e sia centrata, devidisplay: table


Questo non è vero. (Anche se solodisplay: blockallora non incontrerà condizione 4 della risposta accettata)
Quentin

@Quentin grazie per il testa a testa. Nel mio caso, non volevo che la tabella riempisse lo spazio orizzontale (il che sembrerebbe ovviare all'intera discussione margin: 0 auto) e non potevo nemmeno specificare la larghezza della tabella, poiché il suo contenuto poteva avere larghezze diverse. In questo caso, l'unica soluzione che funziona (ovvero rende la tabella in modo normale ma la centra) non è una regola di larghezza, display: tableemargin: 0 auto
samson
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.