Come centrare un div: tutti i metodi a confronto

Come centrare un div

Come centrare un div: 7 metodi CSS, dal vivo e a confronto | We.Inc

Centra un div in orizzontale, in verticale o in entrambe le direzioni. Attiva flexbox, grid, margin auto, posizionamento assoluto, text-align e line-height sullo stesso box, guarda il CSS e quando ognuno si rompe.

Per centrare un div in entrambe le direzioni bastano due righe sul genitore: display: grid; place-items: center; oppure display: flex con justify-content: center e align-items: center. Solo in orizzontale, dai al div una larghezza e margin-inline: auto. Perché la centratura verticale si veda, il genitore deve essere più alto del figlio.

La versione breve

Scegli un metodo e un asse: il box di prova si sposta, il CSS per genitore e figlio viene scritto per intero e una nota spiega dove quel metodo si rompe. Sono coperte sette tecniche, comprese quelle vecchie che incontrerai ancora nel codice esistente, seguite da una tabella decisionale per sceglierne una.

Domande frequenti

Perché il mio div non si centra in verticale?

Di solito perché il genitore non ha altezza in più. Un blocco è alto solo quanto il suo contenuto, quindi non c'è spazio in cui centrare. Dai al genitore una height, una min-height (per esempio 100dvh per lo schermo intero) oppure lascialo allungarsi dentro un layout flex o grid più alto.

Qual è il modo più breve per centrare un div?

display: grid; place-items: center; sul genitore. Centra il figlio in entrambe le direzioni, funziona con qualsiasi dimensione del figlio e non richiede width o height sul figlio.

Come centro un div sull'intera pagina?

Rendi body o un wrapper alto almeno quanto il viewport: min-height: 100dvh; display: grid; place-items: center;. Per un modale che fluttua sopra la pagina, usa position: fixed; inset: 0; margin: auto; con larghezza e altezza definite, oppure l'elemento nativo dialog, che si centra da solo.

margin: 0 auto funziona ancora?

Sì, per centrare in orizzontale un blocco con una larghezza minore di quella del genitore. margin-inline: auto è la forma logica moderna e non tocca i margini superiore e inferiore.

Come centro un div in Tailwind?

Metti flex items-center justify-center, oppure grid place-items-center, sul genitore e dagli un'altezza come h-screen o min-h-dvh. Per un blocco centrato in orizzontale, aggiungi mx-auto e una larghezza o max-width al figlio.

Due direzioni, due problemi diversi

Quando i vecchi metodi hanno ancora senso

Tabella decisionale

Quale metodo per quale compito

Ricette pronte da copiare

Una card al centro dello schermo

In una pagina reale usa min-height: 100dvh sul wrapper. Il riquadro qui usa un'altezza fissa per starci dentro.

Pulsante play sopra una miniatura

inset: 0 con margin: auto centra un figlio di dimensione fissa senza transform, così i bordi restano nitidi.

Un elemento al centro, gli altri ai bordi

I margini auto su un figlio flex prendono tutto lo spazio libero, così il logo sta al centro della barra mentre menu e carrello restano ai lati.

La centratura verticale richiede che il genitore sia più alto del figlio. Con flex-direction: column le due proprietà si scambiano gli assi.

Più figli si impilano in righe, ognuno centrato nella propria riga, quindi si distribuiscono in verticale invece di restare uniti. Racchiudili in un unico elemento.

Nel normale flusso a blocchi centra solo in orizzontale, e solo quando il figlio ha una larghezza minore del genitore. Dentro un genitore flex o grid, margin: auto centra in entrambe le direzioni.

Il figlio esce dal flusso, quindi il genitore non cresce più attorno a lui. Gli spostamenti di mezzo pixel possono sfocare il testo, e il transform rende il figlio un containing block e uno stacking context.

Il figlio ha bisogno di una dimensione esplicita sull'asse centrato. Senza, inset: 0 si limita ad allungare il figlio fino a riempire il genitore. Nei browser attuali funzionano anche le larghezze fit-content.

Sposta solo i contenuti inline: testo, immagini, box inline-block. Un normale div a blocco lo ignora, e anche il testo dentro il figlio eredita la centratura.

Si rompe appena il testo va a capo su una seconda riga, e l'altezza va scritta a mano due volte. Va bene per un badge o un pulsante su una riga, per nient'altro.

Prova ogni metodo di centratura

Asse

Centra

Metodo

Genitore (tratteggiato) e figlio (blu)

Box figlio

Questo metodo non può gestire quell'asse. Il box mostra dove finisce senza.

Copia CSS

Copia classi

Quando fallisce:

Inizia gratis · Nessuna carta di credito richiesta

Correlati: Guide

Prodotto

Per chi è

Funzionalità

Risorse

Azienda

Mappa del sito