La miglior tecnica da utilizzare è il clearfix: http://perishablepress.com/new-clearfix-hack/

Vecchio metodo

Una semplice proprietà css, magari mai conosciuta, può a volte davvero risolvere con una semplice riga tanti problemi. E’ il caso dell’utilizzo della proprietà overflow:auto per “racchiudere” degli elementi flottati. Questa scoperta risale a molto tempo fa ma non è detto che ci si incappi per forza in essa, è quindi mio interesse riproporla qui nella sua semplicità per mostrarne l’efficacia! Guardiamo la Demo per capire meglio:

Il problema e la compatibilità cross-browser

La compatibilità di questa proprietà, e di tutte quelle esposte nell’articolo, è stata testata e accertata per Firefox 3+, Chrome 3+, Safari 4+, Opera 9+, IE7+. Indovinate chi manca?? IE6. Si proprio lui.

Perchè questa proprietà è utile? Perchè senza di essa, quando ci si trova nella situazione di un contenitore che racchiude elementi in float, si è costretti a porre il fatico <div style=”clear:both”></div> per forzare la chiusura reale, visiva del contenitore. Impostando invece semplicemente overflow:auto al div contenitore il problema come per magia si risolve. Vediamo l’esempio di quanto appena detto usando il codice:

80 days around the world, we’ll find a pot of gold just sitting where the rainbow’s ending. Time – we’ll fight against the time, and we’ll fly on the white wings of the wind. 80 days around the world, no we won’t say a word before the ship is really back. Round, round, all around the world.

Hong Kong Phooey, number one super guy. Hong Kong Phooey, quicker than the human eye. He’s got style, a groovy style, and a car that just won’t stop. When the going gets tough, he’s really rough, with a Hong Kong Phooey chop (Hi-Ya!)

Con le seguenti proprietà CSS associate:

.container {
	background: #9c0c0a;
	border: solid 1px #999;
	padding: 10px;
	overflow: auto;
}
.box {
	background: #fdf3c1;
	width: 400px;
	margin-right: 10px;
	padding: 10px 20px;
	float: left;
}

Purtroppo per quanto riguarda IE6 non c’è molto da fare se non utilizzare un div di chiusura che effettui il clear. E’ bene quindi considerare l’utilizzo di questa proprietà che effettua il clear solamente nel caso in cui non sia necessaria la retrocompatibilià. Ai posteri l’ardua sentenza!

Note aggiuntive: fix e qualche contro

Testi lunghi

Oltre al problema sopracitato di Internet Explorer 6, occorre prestare attenzione al contenuto dei nostri div con proprietà float. Nel caso in cui ci trovassimo in presenza di parole molto lunghe che eccederebbero la dimensione del contenitore sarà necessario utilizzare la proprietà word-wrap:

.box {
	word-wrap: break-word;
}

Immagini più larghe del contenitore

Nel caso ci trovassimo ad avere a che fare con immagini più larghe del contenitore flottato, dovremo invece risolvere usando:

.box img {
	max-width: 100%;
	height: auto;
}

In questo modo l’immagine non fuoriuscirà più dal box e si ridimensionerà correttamente mantenendo le proporzioni originali.
L’utilizzo incrociato di queste proprietà eviterà anche la comparsa di fastidiose scrollbar!
That’s all folks! 🙂

Non è tutto oro quel che luccica

Seppur tutto sembri funzionare a meraviglia, utilizzando questo metodo c’è un caso al quale si dovrà prestare molta attenzione. All’interno di un contenitore con properietà overflow:auto non sarà infatti possibile gestire correttamente elementi con position:absolute. Questi infatti rimarranno vincolati al contenitore e mostreranno al loro interno la fastidiosa scrollbar senza essere in grado di “spingere” il contenitore parente.