Di seguito vedremo il modo di potere centrare:
- orizzontalmente un elemento a larghezza fissa
- orizzontalmente un elemento a larghezza non conosciuta
- verticalmente un elemento ad altezza fissa
- verticalmente un elemento ad altezza non conosciuta
- orizzontalmente e verticalmente un elemento a misure fisse
- orizzontalmente e verticalmente un elemento a misure non conosciute
- orizzontalmente e verticalmente una singola riga di testo
1. Centrare orizzontalmente un elemento a larghezza fissa
Regole Css:
width: 200px; /*la larghezza dell’elemento*/
margin:auto; /*margine destra e sinistra in modo automatico*/
Esempio concreto:
<div style="width:200px;margin:auto;">
<!–contenuto–>
</div>
NB: il margin:auto; non funziona se non è specificato una larghezza
Provato su Windows con: Firefox, Internet Explorer 6 e 7, Safari, Opera
2. Centrare orizzontalmente un elemento a larghezza non conosciuta
Regole Css:
text-align: center; /*proprietà css text-align con il valore centrato*/
Esempio concreto:
<div style="text-align:center;">
<!–contenuto–>
</div>
NB: il text-align; non funziona se è specificato una larghezza
Provato su Windows con: Firefox, Internet Explorer 6 e 7, Safari, Opera
3. Centrare verticalmente un elemento ad altezza fissa
Regole Css:
height:100px; /*l’altezza dell’elemento*/
position:absolute; /*l’elemento è tolto del flusso naturale della pagina e posizionato in modo assoluto*/
top:50%; /*il bordo superiore dell’elemento si troverà al 50% dell’altezza disponibile*/
margin-top:-50px; /*la metà dell’altezza dell’elemento è tolta come margine superiore per centrarlo*/
Esempio concreto:
<div style="height:100px;position:absolute;top:50%;margin-top:-50px;">
<!–contenuto–>
</div>
Provato su Windows con: Firefox, Internet Explorer 6 e 7, Safari, Opera
4. Centrare verticalmente un elemento ad altezza non conosciuta
Regole Css:
#contenitore{
height:300px; /*l’elemento senza altezza fissa deve per forza essere contenuto in un elemento genitore con un altezza fissa*/
display:table; /*l’elemento contenitore viene visualizzato come una tabella*/
}
#contenuto_centrato{
display:table-cell; /*l’elemento è visualizzato come una cella della tabella*/
vertical-align:middle; /*proprietà vertical-align con valore centrato*/
}
Esempio concreto:
<div style="display:table;height:300px;">
<div style="display:table-cell;vertical-align:middle;">
<!–contenuto–>
</div>
</div>
NB: la proprietà vertical-align è validà se applicata ad una cella di tabella (display:table-cell;)
Questo metodo potrebbe essere d’utilità se il contenuto è generato in modo dinamico tipo da un database.
Provato su Windows con: Firefox, Safari, Opera
Non funziona per Internet Explorer 6 e 7 (vedi seguente esenpio…)
Visto che la proprietà display:table;non è supportata da Internet Explorer 6 e 7, la soluzione sopra non funziona su IE.
Un metodo valido per IE 6 e 7 è la seguente, usando un errore d’interpretazione della proprietà css top con un valore negativo in percentuale che dalle specifiche CSS2 non dovrebbe essere accettabile.
Regole Css:
#contenitore{
height:300px; /*l’elemento senza altezza fissa deve per forza essere contenuto in un elemento genitore con un altezza fissa*/
position:relative; /*uso della posizione relativa per potere posizionare in modo assoluto il suo contenuto*/
}
#sub_contenitore{
position:absolute; /*un sub elemento posizionato in modo assoluto in rapporto al div contenitore*/
top:50%; /*il bordo superiore dell’elemento si troverà al 50% dell’altezza disponibile*/
}
#contenuto_centrato{
position:relative; /*l’elemento da centrare posizionato in modo relativo in rapporto al div sub_contenitore*/
top:-50%; /*il bordo superiore dell’elemento si alza del 50% dell’altezza*/
}
Esempio concreto:
<div style="height:300px;position:relative;">
<div style="position:absolute;top:50%;">
<div style="position:relative;top:-50%;">
<!–contenuto–>
</div>
</div>
NB: ho personalmente aggiunto bordi colorati per capire meglio l’esempio.
Provato su Windows con: IE6 e IE7. Non valida per Firefox, Safari, Opera
5. Centrare orizzontalmente e verticalmente un elemento a misure fisse
Per centrare un elemento a misure fisse verticalmente e orizzontalmente, riusiamo stesso metodo del punto 3 applicando stessa procedura sia per l’altezza che la larghezza.
Regole Css:
width: 200px; /*la larghezza dell’elemento*/
height: 100px; /*l’altezza dell’elemento*/
position: absolute; /*posizione assoluta per potere riposizionare l’elemento*/
left: 50%; /*il bordo sinistra dell’elemento si troverà al 50% della larghezza disponibile*/
top: 50%; /*il bordo superiore dell’elemento si troverà al 50% dell’altezza disponibile*/
margin-left: -100px; /*la metà della larghezza dell’elemento è tolta come margine superiore per centrarlo*/
margin-top: -50px; /*la metà dell’altezza dell’elemento è tolta come margine superiore per centrarlo*/
Esempio concreto:
<div style="width:200px;height:100px;position:absolute;left:50%;top:50%;
margin-left:-100px;margin-top:-50px;">
<!–contenuto–>
</div>
NB: Questo metodo potrebbe essere utile per centrare orizzontalmente e verticalmente un filmato flash dentro una pagine html.
Provato su Windows con: Firefox, Internet Explorer 6 e 7, Safari, Opera
6. Centrare orizzontalmente e verticalmente un elemento a misure non conosciute
Stesso metodo spiegato al punto 4, aggiungendo al div contenitore il text-align:center; come spiegato al punto 2
7. Centrare orizzontalmente e verticalmente una singola riga di testo
Questo ultimo esempio è per centrare verticalmente e orizzontalmente una singola riga di testo con la proprietà line-height dentro un contenitore a misure fisse.
Regole Css applicate al contenitore:
width: 400px; /*la larghezza del contenitore*/
height: 200px; /*l’altezza del contenitore*/
text-align:center; /*la proprietà text-align con il valore centrato*/
line-height: 200px; /*la proprietà line-height con un valore pare a l’altezza*/
Esempio concreto:
<div style="width:400px;height:200px;text-align:center;line-height:200px;">
Centrare una singola riga di testo
</div>
Questo metodo può essere utile anche per centrare il testo dentro elementi <a> (link) con l’aggiunto del display:block; per potere specificare una larghezza e altezza.
Esempio concreto:
<div style="display:block;width:400px;height:200px;text-align:center;line-height:200px;">
Centrare una singola riga di testo dentro un link
</div>
Centrare una singola riga di testo dentro un link
NB: Provato su Windows con: Firefox, Internet Explorer 6 e 7, Safari, Opera
Per maggiore informazione sulla differenza tra elementi block e inline leggere
questo articolo.
















{ 6 trackbacks }
{ 17 comments… read them below or add one }
Articolo molto utile, non c’è che dire…!!
Grazie Daniele!
Si ho provato (per quanto posso) di coprire tutte le possibilità.:P
Articolo molto utile, ma purtroppo non c’è soluzione cross-browser che regga allineamento verticale e orizzontale per un div a larghezza fissa e altezza variabile!
Vero…per l’allineamento verticale IE8 supporta il display:table; pero con tanti di bug da come ho capito incluso per la proprietà vertical-align (non l’ho ancora provato personalmente).
Sta diventando un macello di seguire la compatibilità tra IE6,7 e 8 e trovare una soluzione giusta per tutti.
grazie molto utile!!
C’è un “piccolo” problema nell’esempio 5, se voglio centrare un layout di un sito (un blocco con dimensioni fisse) dentro una pagina la cosa funziona, ma se ridimensioni la finestra o pure se l’utente ha una risoluzione minore della larghezza del box centrato, lo scroll orizzontale non appare e il blocco centrato viene inesorabilmente mangiato a destra.
La soluzione è bellissima e funziona bene, ma ha questo problema che non è da poco, qualcuno è riuscito a capire come risolvere?
Ciao Mauricio (o Maurizio?)
vero, vero….avevo anch’io avevo incontrato questo problema creando altri siti e poi me ne sono scordata.
Aggiungere il min-width a l’elemento html stesso su Firefox funziona di sicuro (stessa larghezza dell’elemento da centrare), su IE6 non funzionerà visto che non supporta il min-width (http://css.flepstudio.org/css-tips/min-width-ie6.html). Faccio qualche prove con altri browser e aggiorno l’articolo se trovo che questa soluzione va bene.
Grazie della segnalazione!
Purtroppo impostare un min-width a html funziona solo per FF.
Un altra soluzione, aggiungendo un extra div, tenendo in mente che il problema sarà risolto per il scroll orizzontale ma non verticale e sempre che IE6 non supporta il min-width:
<div style=”width:100%;min-width:800px;position:absolute;top:50%;margin-top:-250px;”>
<div style=”width:800px;height:500px;margin:auto;”></div>
</div>
Grazie è la prima volta che uso i css e questo materiale mi è utile
Prego e buon apprendimento allora!
Se hai domande, sei sempre il benvenuto a usare il forum: http://www.flepstudio.org/forum/css-html/
Una domanda , e per allineare una lista verticale in orizzontale !??!
Graize.
Ciao Salpix,
scusa del ritardo per la risposta. Il tuo messaggio era partita come spam.
Misteri della tecnologia
Stesso procedimento per un elemento tipo ul…specifica una larghezza usa margin:auto; o text-align:center; al suo elemento genitori se non c’è una larghezza specifica.
Poi sarebbe da vedere il layout in generale come è fatto e quale altri elementi sono nelle sue vicinanze.
Se invece parli di allineare i singoli elementi della lista in orizzontale, va con il display:inline; e float:left; come in questo esempio: http://css.flepstudio.org/css-tutorials/menu-orizzontale-in-css.html
Grazie!!
Ciao!
Grandissimo suggerimento per centrare verticalmente un div!!
Cosi finalmente sono riuscito a centrare il div con il solo css senza script macchinosi!
Veramente ben fatto il tuo sito, ricco di spunti utilissimi, con la tua gallery css mi hai dato uno spunto niente male per un menu accordion!
….solo una cosa, con FF 3.0.4 su Linux ecco come vedo la tua home:
http://img10.imageshack.us/img10/9307/screenshot11b.png
C’e’ un leggero margine dall’alto dell’header.
Ciao
Ciao Saki,

grazie dei complementi e del screenshot.
Sinceramente, non ho mai guardato la compatibilità per utenti su Linux. Ho ricevuto poche settimane fa, un portatile con Ubuntu per quello inizierò a stare piu attenta (anche se diventa un lavoraccio questa questione di compatibilità tra tutti i browser e sistema operativo O_O).
Neanche ci perderò tempo a sistemare quel errore. Ormai sto lavorando su una nuova versione che spero mettere online al più presto e prometto di controllarlo con Linux.
Nessun problema….in effetti stare dietro a tutti i tipi di visualizzazioni diventa disumano….per un sito che sto realizzando hanno richiesto compatibilita’ totale….sto verificando FF 2.5 e 3, IE 6, 7 e 8, Opera e Safari, tutti sia su Win che su Linux….stanno venendo fuori 3 fogli di stile separati con mille hack all’interno….delirio!
Per fortuna con IE 8 e l’ultimo Opera tutto diventa molto simile a FF 3, cosi si dovrebbe arrivare ad una compatibilita’ quasi all’80% appena IE6 sara’ completamente abbandonato!!
Speriamo.
Saluti e ancora grazie per gli spunti.
Complimenti per il post molto utile e per il blog chiaro e ordinato!
Sono contento di esserci passato.
Arrivederci