Continua la rubrica su JuliusDesign, CSS Trick in cui vedremo alcuni codici CSS per facilitare o agevolare il flusso di lavoro.
Oggi vediamo insieme come centrare un contenuto in verticale e orizzontale nella nostra pagina web.
Spesso avremmo proprio bisogno di un bel fucile per minacciare il nostro CSS e centrare correttamente i nostri contenuti.
Vediamo come senza armi, ma in modo pacifico possiamo centrare contenuti in orizzontale e verticale in una pagina web.
Centrare un Elemento in Orizzontale
Per centrare un div in orizzontale ci basterà assegnare una larghezza e un margin zero per l’asse delle x e auto per l’asse delle y.
Codice CSS
#contenitore{
width: 100px;
height: 100px;
margin: 0 auto;
}
Centrare un Elemento in Verticale
Per centrare un div in verticale è leggermente diversa la tecnica da usare.
Purtroppo non si puà usare margin: auto auto sarebbe troppo facile e neanche vertical-align in quanto funziona solo con le tabelle, oppure associando a un div table come tipologia di display.
Codice CSS
#contenitore{
background-color: #F3F3F3;
border: 3px dashed #CCCCCC;
height: 18em;
left: 50%;
margin-left: -15em;
margin-top: -9em;
position: absolute;
top: 50%;
width: 30em;
text-align:center;
line-height: 16em;
}
Per centrare questo div id uguale contenitore dovremo, dopo aver assegnato altezza e larghezza, associare una posizione absolute, con top e left in percentuale.
Questa tecnica CSS è compatibile con i browser: Internet Explorer 6+, Firefox, Chrome, Opera, Safari.
Segnala un Tuo CSS Trick!
Conosci un codice CSS che potrebbe essere utile ai lettori di JuliusDesign?
Invia una email con il codice CSS+HTML dettagliato a csstrick@juliusdesign.net, il prossimo codice potrebbe essere firmato da te!
Conoscevi questo codice CSS?
Lascia un Mi Piace se non conoscevi questo Trick, o se ti piace la rubrica.
17 Commenti
Fortunatamente esiste un’alternativa che risolve il problema del contenuto non visibile se la finestra è troppo piccola: http://blog.themeforest.net/tutorials/vertical-centering-with-css/ (soluzione #3)
HTML:
<div id="floater">
<div id="content">
Content here
</div>
</div>
CSS:
#floater {float:left; height:50%; margin-bottom:-120px;}
#content {clear:both; height:240px; position:relative;}
Purtroppo è necessario un secondo elemento, ma è ovviamente meglio un elemento in più di un testo non visibile.
Bella rubrica questa grazie!
Ottima tecnica messa tra i preferiti!
Stavo cercando proprio questo!!! GRAZZZIE!
numero uno come sempre!!
Messo tra i preferiti la tua rubrica grande!
@ bfred.it:
Io già conoscevo questa tecnica, ma il problema é proprio quello che hai segnalato tu! Grazie per questo link, non sapevo ci fosse una soluzione alternativa alla tabella posizionata centralmente in verticale per evitare che parte del sito si cancelli quando la finestra é troppo piccola:D
@ Giuseppe:
Prima di trovare la soluzione con il floater utilizzavo
min-height
sul body, mi pare, per evitare che la finestra diventi troppo piccola, ma il floater funziona meglio ed è più compatibile.@ bfred.it:
Si infatti, questo é più compatibile di sicuro… lo utilizzerò non appena c’é ne sarà occasione :)
e se contenuto è caricato dinamicamente? e ognuno ha l’altezza diversa?
@ Monica:
Ci sarebbe il metodo table/table-cell, ma ho avuto parecchi problemi a farlo funzionare ed alla fine ci ho rinunciato. http://blog.themeforest.net/tutorials/vertical-centering-with-css/ (metodo #1)
Oppure può usare un po’ di javascript con il mio metodo
//con jquery, al caricamento della pagina
$(document).ready(function(){
var altezzaContenuto = $('#content').height();
//l'ideale è non modificare l'altezza del floater via CSS ma farlo solo se è disponibile il javascript
$('#floater').css({height:"50%",marginBottom:-altezzaContenuto/2})
})
Stavo cercando propio questo, GRAZIE…
Ciao Julius, controlla la scritta dell’immagine dell’articolo.. (Trik)
@ bfred.it:
bfred.it ha scritto:
ciao bfred ho provato questa soluzione, ma non mi funziona se non con questa modifica:
HTML: Content here CSS: #floater {float:left; height:50%; margin-bottom:-120px;} #content {clear:both; height:240px; position:relative;}
cioè mi pare che occorra chiudere il div floater prima di aprire il div content.
Ho controllato anche al link di riferimento e nell’applicare la regola, spostano appunto il div content al di fuori del div floater.
Scusate ma sono molto inesperto e mi piacerebbe capire… grazie
Forse ho fatto un po’ di casino, ma non so come inserire i codici html…
Riprovo ad inserirli:
Versione di bfred
HTML:
<div id="floater"> <div id="content"> Content here </div> </div>
CSS:
#floater {float:left; height:50%; margin-bottom:-120px;} #content {clear:both; height:240px; position:relative;}
Versione secondo me corretta
<div id="floater"> </div> <div id="content"> Content here </div>
CSS:
#floater {float:left; height:50%; margin-bottom:-120px;} #content {clear:both; height:240px; position:relative;}
Spero sia giusto… abbiate pietà
Io uso questo bel trucchetto (per centrare qualcosa di fluido)
http://jsfiddle.net/g7YjM/2/
Esiste un sistema cross browser più adattabile ad ogni esigenza senza l’utilizzo di table o table-cell.
http://www.filippoamadori.it/articolo/centrare-un-div-verticalmente-con-i-css