Blog: Commenti: | Pagine: 1 2 3 4 5 6
~x86 [HOME | KS HOME]

[EDIT | DELL] #5 CSS: Posizionare un div a metà pagina e al centro 09/12/2007 PERMALINK

UPDATE @ 9/12/2007 13.55

Per chi fosse interessato a centrare verticalmente un div di altezza dinamica, può usare un po' di JS, in questo modo:

<body OnLoad='javascript: document.getElementById("test").style.marginTop="-"+((document.documentElement.clientHeight*25)/100)+"px">

<div id="test" style="position:absolute; top: 50%; left:50%; background-color: red; width: 50%; height: 50%; border: 0; margin-left: -25%;">

Oggi voglio spiegarvi come fare una cosa apparentemente semplice ma in realtà complicata:

Posizionare un DIV a centro pagina e a metà altezza.

Bene, senza usare nessun inutile JavaScript vi farò vedere come farlo via CSS seguendo la via più semplice.

Il nostro problema è centrare un DIV in altezza e in larghezza avendo un body dinamico, ecco come fare:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Test</title>

<style type="text/css">
body {
	height: 100%;
	width: 100%;
	padding: 0px;
	margin: 0px;
	border: 0px;
	background-color: #000;
	font-family: Georgia, serif;
}
</style>
</head>

<body>
	<div id="test" style="position:absolute; top: 50%; left:50%; background-color: red; width: 100px; height: 100px; border: 1px solid #fff; margin-top: -50px;  margin-left: -50px;">asd</div>
</body>
</html>

Come vedete non faccio altro che usare un position: absolute; e un top: 50%; per centrarlo verticalmente e un left: 50%; per ottenere l'allineamento orizzontale. Per non avere problemi con altezze e larghezze statiche bisogna ricordare di metter sempre margin-top pari all'altezza / 2 e margin-left pari alla larghezza/2.

Spero di esservi stato utile, so che sembra semplice una volta detto ma arrivarci non è stato semplice, c'è chi vi consiglia di usare JS, chi il vertical-align (funziona ma con DIV di grandezza statica) e chi altri metodi esotici; Questo mi è sembrato il migliore.


[DEL] GidanMX2 scrive:

Se darete una altezza al vostro div, per farlo rimanere allineato dovrete specificare nello stile:
margin-top: -(altezza_div/2);

[DEL] Eduardo scrive:

Mio caro gidan, il problema dell'allineamento centrato di un div non è certo quello.

Prova a fare un test con
<div style="position:absolute; top: 50%; left:50%; background-color: red; display:block; width:200px; height:200px;">asd</div>

e capirai.

Il problema e centrarlo al centro "tenendo" presente le dimensioni del div. Per questo le soluzioni sono tante (ma il js è forse il metodo universale)

[DEL] GidanMX2 scrive:

Per allineare quello basta dare:
<div style="position:absolute; top: 50%; left:50%; background-color: red; display:block; width:200px; height:200px; margin-left: -100px; margin-top: -100px;">asd</div>

[DEL] Eduardo scrive:

Va be ci siamo capiti male, il mio commento è per far notare che il js è utilizzato per le altezze dinamiche del div

[DEL] GidanMX2 scrive:

Per allineare DIV con altezza dinamica, potete usare questo esempio:
<div id="test" style="position:absolute; top: 50%; left:50%; background-color: red; width: 50%; height: 50%; border: 0; margin-left: -25%;" OnClick='javascript: document.getElementById("test").style.marginTop="-"+((document.documentElement.clientHeight*25)/100)+"px"'>asd</div>
Se clickate sul DIV si centrerà. (mettetelo OnLoad o esterno per automatizzare)


opzionale: Nome:
opzionale: E-mail:

CAPTCHA:


!: Se il codice risulta illeggibile aggiornare la pagina.

Codice di controllo:

Powered By: