Centrare elementi verticalmente e orizzontalmente in css

Monday 08 September 08 by Onsitus in CSS Tutorials

Di seguito vedremo il modo di potere centrare:

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>

css centrare orizzontalmente

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>

css centrare orizzontalmente

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>

css centrare verticalmente

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>

css verticale

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>

css verticale

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>

css verticale

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>

Centrare una singola riga di testo

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.

This article in english >>

23 commenti

Rimani aggiornato con il RSS Feed

{ 6 trackbacks }

Crare una pagina - Forum Flash CS3
09.13.08 at 08:52
Centrare un div con un immagine - Forum Flash CS3 Flash CS4
12.05.08 at 09:17
Swfobject - Forum Flash CS3 Flash CS4
01.30.09 at 15:53
[Actionscript 2] Ho creato i bottoni adesso.... - Page 3 - Forum Flash CS3 Flash CS4
01.30.09 at 19:20
Proprietà css text - lo stile dei testi in css
04.08.09 at 09:20
centrare elementi orrizzontalmente e verticalmente
03.22.10 at 13:09

{ 17 comments… read them below or add one }

DaniRevi 09.09.08 at 08:39

Articolo molto utile, non c’è che dire…!!

Onsitus 09.09.08 at 12:42

Grazie Daniele!
Si ho provato (per quanto posso) di coprire tutte le possibilità.:P

PiccoloSocrate 09.16.08 at 09:03

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!

Onsitus 09.16.08 at 10:57

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.

Aless{a}ndro 10.07.08 at 14:08

grazie molto utile!!

Mauricio 10.24.08 at 17:24

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?

Onsitus 10.24.08 at 17:52

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! :)

Onsitus 10.24.08 at 19:07

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>

luca 11.20.08 at 16:22

Grazie è la prima volta che uso i css e questo materiale mi è utile

Onsitus 11.21.08 at 10:42

Prego e buon apprendimento allora!
Se hai domande, sei sempre il benvenuto a usare il forum: http://www.flepstudio.org/forum/css-html/

salpix 02.11.09 at 20:04

Una domanda , e per allineare una lista verticale in orizzontale !??!
Graize.

Onsitus 02.13.09 at 11:37

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

Andrea 05.12.09 at 16:10

Grazie!!

Saki_Kawa 05.13.09 at 11:24

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

Onsitus 05.14.09 at 11:06

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. :P

Saki_Kawa 05.15.09 at 15:47

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.

Gabriele Gualco 04.18.10 at 21:03

Complimenti per il post molto utile e per il blog chiaro e ordinato!
Sono contento di esserci passato.
Arrivederci

Scrivi un commento

You can use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Previous post: Template css gratuito 5

Next post: Css menu orizzontale/verticale 5