CSS: Centrare un box nella pagina

Marco Pegoraro, 20 Novembre 2006

CSS: box centrato nella paginaOggi ti spiego come realizzare un box a dimensioni fisse centrato nella pagina utilizzando solo delle semplici definizioni CSS.

Questo tipo di tecnica è molto diffusa per creare dei box di login o dei box di informazione che rimangano centrati nello schermo in modo indipendente dalla dimensione dello schermo (layout fluido).

Iniziamo con la struttura xHTML...

La seguente porzione di codice è da considerarsi parte di una completa struttura xHTML 1.0 Strict:

...
<body>
<div class="centrato">
Testo contenuto nel box.
</div>
</body>

Come puoi vedere utilizziamo solamente un semplice elemento DIV il cui contenuto può essere totalmente arbitrario... ad esempio un form di login.

Per il nostro DIV abbiamo utilizzato la classe CSS "centrato" che andiamo a definire di seguito. Vorrei farti notare che sarebbe stato possibile utilizzare anche in ID... cambia solamente il tipo di sintassi utilizzata nella seguente porzione CSS.

... Concludiamo con la definizione di stile:

Il foglio di stile CSS è altrettanto semplice:

div.centrato {
display: block;
width: 300px;
height: 200px;

position: absolute;
top: 50%;
left: 50%;

margin: -150px 0 0 -100px;

background: #900;
}

Le prime 3 righe definiscono la dimensione del box. Questo è un dato fondamentale affinchè  il successivo posizionamento abbia successo.

angolo in alto a sinistra per il posizionamentoLe successive 3 righe definiscono il posizionamento assoluto del box. Utilizzando la misura percentuale risuciamo ad ottenere il posizionamento centrato senza conoscere le dimensioni esatte della finestra.

Ti faccio però notare che in questo modo è l'angolo in alto a sinistra del box a risultare centrato. Questo si deve al fatto che i posizionamenti vengono calcolati proprio da questa posizione per qualsiasi elemento della pagina.

Entrando nel vivo di questa tecnica di posizionamento utilizziamo l'attributo margin per "correggere" il posizionamento portando il punto notevole al posizionamento al centro del box.

E' importante notare che utilizziamo dei margini negativi per "arretrare" di metà dimensione sia la larghezza che l'altezza del box.

L'ultima riga serve semplicemente a definire un colore di sfondo per visualizzare meglio il box posizionato.

Visualizza l'esempio completo »

Conclusioni:

Questa è una semplicissima tecnica per ottenere un box centrato basata unicamente su definizioni CSS. Sicuramente è una più che valida alternativa all'utilizzo di tabelle per ottenere effetti di questo tipo.

Il punto debole di questa soluzione è la necessità di conoscere a priori le dimensioni esatte del box da centrare.

Per finire vorrei farti notare che questa soluzione può essere adottata anche per posizionare immagini o altri elementi xHTML.

Commenti all'articolo:

scusa ma mi sembra che tu abbia invertito il margin-top con il margin-left...non dovrebbe essere:
margin: -100px 0 0 -150px; ???
07/12/2007 13:17
by elaine
Hai proprio ragione!!!
Per evitare fraintendimenti lascio il testo com'è in modo che il tuo commento fornisca la spiegazione...
Anzi potrei dire "volevo vedere se eravate attenti"!!!
10/12/2007 10:10
by thepeg
Mmm.Sconsiglio sempre i margini negativi. No no a mio avviso va fatto in un altro modo.
14/12/2007 14:13
by mike the bike
Proponi!
14/12/2007 14:24
by thepeg
.generale{
width:950px;
margin:auto;
}

Così non andrebbe?
14/12/2007 18:04
by Mike te bike
Il tuo suggerimento funziona solo per l'allineamento orizzontale... io vagliavo soluzioni che combinassero allineamento orizzontale con allineamento verticale!
17/12/2007 08:57
by thepeg
ho provato quella tecnica ma da problemi con la selezione del testo in IE.
12/02/2008 11:31
by mirco
Io consiglio di usare margin : [valore di height]px auto;
e poi position : relative; top : -[valore di height/2]px;
in modo da non usare i margini negativi ma usarli con il posizionamento (che solitamente non crea problemi) e usare l'ottimo margin : auto per la centratura in orizzontale in modo da essere maggiormente compatibili con IE6
14/02/2008 19:15

Categorie: Css; Interfacce Web;


Aggiungi il Tuo Commento:

Inviando questa risposta dichiaro di aver letto ed approvato le condizioni di utilizzo di questo sito web.

(*) = campo obbligatorio.


Condizioni di Utilizzo:

1 - Tutte le risposte inviate a questo sito saranno sottoposte a moderazione manuale da parte dell'amministratore al fine di evitare il fenomeno detto "SPAM".

2 - Tutti i dati inseriti nel modulo di risposta verranno pubblicati in questa pagina ad eccezione dell'e-mail. Tale informazione viene richiesta ed archiviata dagli amministratori al fine di scoraggiare un utilizzo non consono del blog.

3 - Non utilizzare le risposte per pubblicizzare il tuo sito web. Tale tentativo verrà cancellato dall'amministratore. In ogni caso ai link inseriti nelle risposte viene applicato il "nofollow" per cui non ti portano vantaggi.
Se vuoi possiamo discutere uno scambio link: Srivimi!