La risposta rapida: text-align sul genitore
Un <img> è un elemento inline: sta in una riga di testo come una parola. Quindi lo centri come centri il testo, con text-align: center sul genitore:
Lo stile va sul div, non sull'immagine. Mettere text-align: center sull'<img> stesso non fa nulla, perché l'immagine non contiene testo da allineare.
Metodo 2: display block e margin auto
Se preferisci dare stile all'immagine stessa, trasformala in un blocco e dalle margini laterali automatici. Lo spazio libero sui due lati viene diviso in parti uguali:
L'immagine grigia ha margin: 0 auto ma resta all'inizio della riga: i margini automatici non hanno effetto su un elemento inline. Il pezzo mancante è display: block. max-width: 100% con height: auto evita che l'immagine esca da uno schermo stretto e ne conserva le proporzioni.
Metodo 3: flexbox o grid, anche in verticale
Per centrare un'immagine in entrambe le direzioni dentro un box, dai un'altezza al box e centrane il contenuto con grid o flexbox:
L'equivalente con flexbox è display: flex; justify-content: center; align-items: center;. In entrambi i casi il box deve avere un'altezza maggiore dell'immagine, altrimenti non c'è spazio in cui centrare. Gli stessi metodi centrano qualsiasi elemento; la pagina su come centrare un div li mette tutti a confronto.
Centrare un'immagine con didascalia
Una foto con didascalia va in un <figure>. Centra il contenuto della figura, e immagine e didascalia si allineano insieme:
Più immagini in una riga centrata
Una riga di loghi o miniature è un lavoro da flexbox. justify-content: center centra il gruppo, gap lo distanzia e flex-wrap lo fa andare a capo sugli schermi piccoli restando centrato:
Quale metodo usare
| Situazione | Usa |
|---|---|
| Un'immagine in un paragrafo o in un blocco semplice | text-align: center sul genitore |
| Puoi dare stile solo all'immagine | display: block; margin: 0 auto; |
| Centrare in entrambe le direzioni dentro un box | Grid place-items: center (o flexbox) sul box |
| Una riga di immagini | Flexbox con justify-content: center |
| Un'immagine con didascalia | <figure> con text-align: center |
| Un'immagine di sfondo, non un contenuto | background-position: center, vedi background-image |
I vecchi metodi, e perché no
Li troverai ancora nei tutorial datati:
<!-- obsolete: do not use -->
<center><img src="logo.png" alt="Logo"></center>
<img src="logo.png" alt="Logo" align="center">
<center> e l'attributo align sono stati rimossi dall'HTML. I browser mostrano ancora <center> per compatibilità con il passato, e align="center" su un'immagine non la centra nemmeno in orizzontale: i browser lo trattano come un allineamento verticale nella riga. Usa uno dei metodi CSS qui sopra.
Errori comuni
text-align: centersull'<img>. Mettilo sul genitore.margin: 0 autosu un'immagine inline. Aggiungidisplay: block.- Centraggio verticale senza altezza sul genitore. Il box si restringe all'immagine e non resta spazio in cui centrare.
float: center. Questo valore non esiste. I float vanno solo su un lato.- Dimenticare
alt. Anche un'immagine centrata ha bisogno di un testo alternativo; usaalt=""solo per le immagini puramente decorative. - Un'immagine deformata. Impostare in CSS sia
widthsiaheightcon valori di proporzioni diverse la distorce. Impostane uno e usaheight: auto, oppure aggiungiobject-fit: cover.
Domande frequenti
Come centro un'immagine in HTML?
Metti text-align: center sull'elemento che la contiene, per esempio <p style="text-align: center;"><img src="logo.png" alt="Logo"></p>. Un'immagine è inline per impostazione predefinita, quindi si centra come una parola di testo.
Come centro un'immagine con margin auto?
Prima rendi l'immagine un blocco: img { display: block; margin: 0 auto; }. I margini automatici non centrano gli elementi inline, e un'immagine resta inline finché non lo cambi.
Come centro un'immagine in verticale e in orizzontale?
Trasforma il suo contenitore in una griglia (o in un flexbox) con un'altezza: .box { display: grid; place-items: center; height: 300px; }. L'immagine si posiziona così al centro del box.
Posso usare il tag <center> o align="center" per centrare un'immagine?
No. <center> e l'attributo align su <img> sono obsoleti in HTML5. I browser mostrano ancora <center> per le pagine vecchie, ma align="center" su un'immagine la allinea in verticale nella riga, non in orizzontale. Usa il CSS.
Perché c'è un piccolo spazio sotto la mia immagine centrata?
Un'immagine inline poggia sulla linea di base del testo e lascia sotto di sé lo spazio per le parti discendenti delle lettere. Imposta display: block sull'immagine, oppure vertical-align: middle, e lo spazio sparisce.