{"id":154,"date":"2011-03-22T09:12:09","date_gmt":"2011-03-22T08:12:09","guid":{"rendered":"https:\/\/alistapart.com\/it\/article\/uso-di-float-in-css\/"},"modified":"2011-03-22T09:12:09","modified_gmt":"2011-03-22T08:12:09","slug":"uso-di-float-in-css","status":"publish","type":"article","link":"https:\/\/alistapart.com\/it\/article\/uso-di-float-in-css\/","title":{"rendered":"Uso di float in CSS"},"content":{"rendered":"<p><img decoding=\"async\" src=\"http:\/\/alistapart.com\/it\/wp-content\/uploads\/sites\/2\/2011\/03\/n26-ccss.png\" border=\"0\" style=\"float: left;\" \/>La propriet\u00e0 float \u00e8 una risorsa molto utile e potente a disposizione dei web designer\/developer che lavorano con HTML e CSS. Purtroppo per\u00f2, pu\u00f2 anche causare frustrazione e confusione se non si comprende appieno il suo funzionamento. Inoltre, in passato, il float \u00e8 stato associato a dei bug dei browser piuttosto seri, quindi \u00e8 normale essere nervosi quando lo si usa nelle regole del proprio CSS. Ma calmiamoci e liberiamoci dalla frustrazione: vi mostrer\u00f2 come si comporta la propriet\u00e0 float applicata agli elementi e quanto sia incredibilmente utile una volta che la si padroneggia.<\/p>\n<p>Nel mondo della stampa vediamo dei float ogniqualvolta leggiamo un articolo in un magazine in cui vi sia un&#8217;immagine sulla sinistra o sulla destra con del testo tutto intorno ad essa. Nel mondo di HTML\/CSS, il testo \u201cavvolge\u201d un&#8217;immagine pi\u00f9 o meno come in un layout per magazine solo se a questa viene applicata la propriet\u00e0 float. Le immagini sono solo uno dei molti casi d&#8217;uso per la propriet\u00e0 float: possiamo ottenere mediante float anche il noto layout a due colonne. In effetti, potete applicare il float praticamente a qualunque elemento nel vostro HTML. Conoscendo e comprendendo le basi della propriet\u00e0 float, insieme ai <a href=\"articoli\/32-numero-19-30-novembre-2010\/121-fondamenti-del-posizionamento-in-css\">fondamenti del posizionamento<\/a>, sarete in grado di ottenere qualunque layout con sicurezza.<\/p>\n<div class=\"paragrafo\">\n<h2>La definizione<\/h2>\n<p>Cominciamo dalla definizione di float <a href=\"http:\/\/www.w3.org\/TR\/CSS2\/visuren.html#floats\">data dal W3C<\/a>:<\/p>\n<blockquote>\n<p>Un float \u00e8 un elemento che viene spostato a sinistra o a destra sulla riga corrente. La caratteristica pi\u00f9 importante di un float (o di un elemento a cui \u00e8 applicato il float) \u00e8 che il contenuto pu\u00f2 scorrergli lungo il bordo (oppure si pu\u00f2 impedire che ci\u00f2 avvenga utilizzando la propriet\u00e0 \u201cclear\u201d). Il contenuto scorre lungo il lato destro di un elemento con float impostato a left e lungo il lato sinistro di un elemento con float impostato a right.<\/p>\n<\/blockquote>\n<p>Alla propriet\u00e0 float si possono applicare quattro valori: <code>left<\/code>, <code>right<\/code>, <code>inherit<\/code> e <code>none<\/code>. Ciascuno di questi valori \u00e8 auto-esplicativo. Ad esempio, se assegnate <code>float: left<\/code> ad un elemento, questo si sposter\u00e0 sul lato pi\u00f9 a sinistra del suo elemento padre. La stessa idea si applica a <code>float: right<\/code>: l&#8217;elemento verr\u00e0 mandato sul lato pi\u00f9 a destra del suo elemento padre. Il valore <code>inherit<\/code> dice all&#8217;elemento a cui \u00e8 applicato di ereditare il valore di float del suo elemento padre. Il valore <code>none<\/code> \u00e8 il valore di default e dice all&#8217;elemento di non spostarsi sotto l&#8217;effetto del float.<\/p>\n<p>Ecco un semplice esempio come quello citato prima del magazine, <a href=\"demo\/CSS_float\/esempio_a.html\">Esempio A<\/a> ed il relativo markup:<\/p>\n<pre><code> \nimg { \n  float: right;\n  margin: 10px;\n}\n<\/code><\/pre>\n<\/div>\n<div class=\"paragrafo\">\n<h2>Il comportamento del float<\/h2>\n<p>Niente di troppo complesso, ma tutto sommato abbastanza bello, no? Un gioco da ragazzi, mi dite. Ok, ben prima di entrare nella parte in cui i float ci aprono la porta di un mondo popolato da unicorni amanti del bacon, facciamo un attimo retromarcia e parliamo di quello che stiamo effettivamente sperimentando. Nel mondo del web, il nostro HTML deve sottostare ad alcune regole, in particolare al <a href=\"http:\/\/www.w3.org\/TR\/CSS21\/visuren.html#normal-flow\">flusso normale<\/a>. Nel flusso normale, ogni elemento di tipo block (<code>div<\/code>, <code>p<\/code>, <code>h1<\/code>, etc.) si impila sopra l&#8217;altro verticalmente, dall&#8217;alto della viewport verso il basso. Gli elementi a cui \u00e8 applicato il float vengono prima disposti in accordo con il flusso normale e poi tolti dal flusso normale e mandati nella parte pi\u00f9 a destra o pi\u00f9 a sinistra (a seconda del valore applicato) dell&#8217;elemento padre. In altre parole, passano dall&#8217;essere uno sopra all&#8217;altro ad uno di fianco all&#8217;altro, purch\u00e9 vi sia spazio sufficiente nell&#8217;elemento padre perch\u00e9 ogni elemento a cui \u00e8 applicato il float vi trovi spazio. Questo comportamento \u00e8 cruciale e va tenuto a mente quando si creano siti web.<\/p>\n<p>Diamo un&#8217;occhiata a qualche altro esempio. Nell&#8217;<a href=\"demo\/CSS_float\/esempio_b.html\">Esempio B<\/a>, ci sono tre  blocchi a cui non \u00e8 applicata la propriet\u00e0 float:<\/p>\n<pre><code> \n.block { \n  width: 200px;\n  height: 200px;\n}\n<\/code><\/pre>\n<p>Vedete come si impilano uno sull&#8217;altro? Questo \u00e8 il concetto base di <em>flusso normale<\/em>. Ecco ora lo stesso esempio con il float applicato agli elementi block, <a href=\"demo\/CSS_float\/esempio_c.html\">Esempio C<\/a>:<\/p>\n<pre><code> \n.block { \n  float: left;\n  width: 200px;\n  height: 200px;\n} \n<\/code><\/pre>\n<p>Ora i blocchi sono uno accanto all&#8217;altro. Ottimo, abbiamo capito come si fa. Ma cosa succede se non c&#8217;\u00e8 abbastanza spazio nell&#8217;elemento padre perch\u00e9 tutti i blocchi stiano uno accanto all&#8217;altro? Pensavo non me l&#8217;avreste mai chiesto. Prendiamo il nostro ultimo esempio ed aumentiamo il numero di elementi di cinque volte. L&#8217;elemento padre in questo esempio \u00e8 il body del nostro documento. Notate che a seconda della dimensione della finestra del browser (e di conseguenza dell&#8217;elemento padre <code>body<\/code>), i blocchi scendono su una seconda riga, perch\u00e9 non c&#8217;\u00e8 abbastanza spazio per tutti loro per disporsi uno accanto all&#8217;altro. Man mano che ridimensionate la finestra del vostro browser per avere pi\u00f9 spazio, vedrete i blocchi riposizionarsi. Provateci nell&#8217;<a href=\"demo\/CSS_float\/esempio_d.html\">Esempio D<\/a>.<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2>Al sicuro<\/h2>\n<p>La propriet\u00e0 <code>float<\/code> ha un fratellastro, <code>clear<\/code>. I due si complementano in maniera da rendervi programmatori felici. Come ricorderete, un elemento a cui \u00e8 applicato il float \u00e8 prima disposto secondo il flusso normale e poi rimosso da quello. Questo significa che ogni elemento che segue un elemento a cui \u00e8 applicato il float si comporter\u00e0 in maniera contraria alle aspettative. Qui \u00e8 dove sospetto che potremmo cominciare a metterci nei pasticci. Diamo di nuovo un&#8217;occhiata ad un rapido esempio con i nostri blocchi: nell&#8217;<a href=\"demo\/CSS_float\/esempio_e.html\">Esempio E<\/a>, applicher\u00f2 il float a due blocchi (rosa e azzurro) e subito dopo questi, <em>non<\/em> applicher\u00f2 il float agli altri due blocchi (verde ed arancio). Qui di seguito il codice HTML e CSS per l&#8217;<a href=\"demo\/CSS_float\/esempio_e.html\">Example E<\/a>:<\/p>\n<pre><code> \n&lt;div class=\"block pink float\"&gt;&lt;\/div&gt;\n&lt;div class=\"block blue float\"&gt;&lt;\/div&gt;\n&lt;div class=\"block green\"&gt;&lt;\/div&gt;\n&lt;div class=\"block orange\"&gt;&lt;\/div&gt;\n \n.block {\n  width: 200px;\n  height: 200px;\n}\n.float { float: left; }\n.pink { background: #ee3e64; }\n.blue { background: #44accf; }\n.green { background: #b7d84b; }\n.orange { background: #E2A741; }\n<\/code><\/pre>\n<p>Vi piace il blocco verde? Ma&#8230; un attimo! Dov&#8217;\u00e8 il blocco verde? C&#8217;\u00e8, proprio sotto al blocco rosa. La propriet\u00e0 float \u00e8 applicata sia al blocco rosa sia a quello azzurro e si comportano come ci aspetteremmo: posizionandosi uno accanto all&#8217;altro. Tuttavia, dal momento che sono stati rimossi dal flusso normale, i blocchi arancio e verde si comportano come se non ci fossero nemmeno: questo \u00e8 il motivo per cui sotto al nostro blocco rosa \u00e8 nascosto quello verde. Come rendiamo di nuovo visibile il nostro blocco verde? Utilizzando la propriet\u00e0 <code>clear<\/code>.<\/p>\n<p>La propriet\u00e0 <code>clear<\/code> ha cinque valori disponibili: <code>left<\/code>, <code>right<\/code>, <code>both<\/code>, <code>inherit<\/code> e <code>none<\/code>. Assegnare il valore <code>left<\/code> vuol dire che il bordo superiore di questo elemento deve stare sotto ogni elemento a cui \u00e8 applicata la propriet\u00e0 <code>float: left<\/code>. Lo stesso concetto si applica per il valore <code>right<\/code>: l&#8217;elemento deve posizionarsi sotto a tutti gli elementi a cui \u00e8 applicata la propriet\u00e0 <code>float: right<\/code>. Utilizzando il valore <code>both<\/code> si dice all&#8217;elemento che il suo bordo superiore deve stare sotto ad ogni elemento a cui \u00e8 applicata la propriet\u00e0 left o right. Il valore <code>inherit<\/code> eredita la propriet\u00e0 <code>clear<\/code> dal suo elemento padre, mentre il valore di default <code>none<\/code> si comporta come ci aspetteremmo. Armati di queste nozioni, prendiamo in considerazione l&#8217;<a href=\"demo\/CSS_float\/esempio_e2.html\">Esempio E2<\/a>. Questa volta applicheremo il clear ai due elementi a cui \u00e8 applicato il float utilizzando la propriet\u00e0 <code>clear<\/code> sul nostro blocco verde. Il nostro codice, leggermente modificato, diventa:<\/p>\n<pre><code> \n&lt;div class=\"block pink float\"&gt;&lt;\/div&gt;\n&lt;div class=\"block blue float\"&gt;&lt;\/div&gt;\n&lt;div class=\"block green clear\"&gt;&lt;\/div&gt;\n&lt;div class=\"block orange\"&gt;&lt;\/div&gt;\n \n.block {\n  width: 200px;\n  height: 200px;\n}\n \n.float { float: left; }\n.clear { clear: left; }\n.pink { background: #ee3e64; }\n.blue { background: #44accf; }\n.green { background: #b7d84b; }\n.orange { background: #E2A741; }\n<\/code><\/pre>\n<p>Assegnando il valore <code>clear: left<\/code> al nostro blocco verde, gli abbiamo detto di comportarsi come se il blocco rosa fosse nel flusso normale del nostro documento (sebbene ne sia stato in realt\u00e0 rimosso) e di posizionarsi sotto ad esso. Si tratta di una propriet\u00e0 estremamente potente: come potete vedere, aiuta a portare gli elementi a cui non \u00e8 applicato un float all&#8217;interno del flusso normale, un comportamento che ci aspetteremmo di default. Detto ci\u00f2, conoscere e comprendere sia la propriet\u00e0 <code>float<\/code> sia <code>clear<\/code>, apre le porte alla creativit\u00e0 per il vostro HTML e CSS.<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2>Utilizzare i float per i layout<\/h2>\n<p>Passiamo ai layout, dove la propriet\u00e0 <code>float<\/code> \u00e8 incredibilmente utile. Possiamo ottenere il classico layout a due colonne in molti modi, molti dei quali usano uno o due elementi a cui si applica float. Diamo un&#8217;occhiata ad un semplice esempio: un sito web a due colonne con l&#8217;area del contenuto a sinistra, la navigazione a destra ed un&#8217;area header e footer a chiuderlo. Per questo articolo, osserveremo solo il codice relativo agli elementi a cui \u00e8 applicato il float. Ecco l&#8217;<a href=\"demo\/CSS_float\/esempio_f.html\">Esempio F<\/a>:<\/p>\n<pre><code> \n#container {\n  width: 960px;\n  margin: 0 auto;\n}\n \n#content {\n  float: left;\n  width: 660px;\n  background: #fff;\n}\n \n#navigation {\n  float: right;\n  width: 300px;\n  background: #eee;\n}\n \n#footer {\n  clear: both;\n  background: #aaa;\n  padding: 10px;\n}\n<\/code><\/pre>\n<p>Ok, vediamo cosa sta succedendo in questo caso. Il genitore che funge da contenitore qui \u00e8 chiamato in maniera appropriata <code>#container<\/code> e tiene a posto gli elementi a cui \u00e8 applicato il float. Se non ci fosse, gli elementi si sposterebbero sui lati pi\u00f9 a sinistra e pi\u00f9 a destra della viewport (la finestra del nostro browser). Poi, abbiamo <code>#content<\/code> e di seguito <code>#navigation<\/code>. Questi sono i nostri elementi a cui \u00e8 applicato il float. Abbiamo mandato <code>#content<\/code> a sinistra e <code>#navigation<\/code> a destra, per ottenere il layout a due colonne. Ho definito per entrambe una larghezza, cos\u00ec che riempiano l&#8217;intero contenitore padre. Infine, abbiamo il <code>#footer<\/code>, a cui abbiamo assegnato la propriet\u00e0 <code>clear<\/code>. Come sappiamo da prima, questa propriet\u00e0 <code>clear<\/code> porta gli elementi che si trovano dopo quelli a cui \u00e8 applicato il float nel flusso normale. In questo caso, al <code>#footer<\/code> \u00e8 stato assegnato il valore <code>both<\/code>, che fa in modo che il <code>#footer<\/code> si posizioni sotto agli elementi <code>#content<\/code> e <code>#navigation<\/code>.<\/p>\n<p>Cosa sarebbe successo se ci fossimo dimenticati di assegnare la propriet\u00e0 <code>clear<\/code> al nostro footer? Date un&#8217;occhiata all&#8217;<a href=\"demo\/CSS_float\/esempio_g.html\">Esempio G<\/a>.<\/p>\n<p>Il nostro <code>#footer<\/code> \u00e8 scivolato verso l&#8217;alto sotto a <code>#navigation<\/code>. Questo accade perch\u00e9 c&#8217;\u00e8 spazio a sufficienza per ospitare il <code>#footer<\/code> sotto a <code>#navigation<\/code> e, dato che lavoriamo all&#8217;interno del flusso normale, questo \u00e8 effettivamente il comportamento corretto. Ma decisamente non \u00e8 quello che cerchiamo, vero? State cominciando a capire l&#8217;interazione tra le propriet\u00e0 <code>float<\/code> e <code>clear<\/code> e in che modo si completano l&#8217;una con l&#8217;altra.<\/p>\n<p>Se avete il disturbo ossessivo-compulsivo, come me, potreste notare che nell&#8217;<a href=\"demo\/CSS_float\/esempio_f.html\">Esempio F<\/a> <code>#content<\/code> e <code>#navigation<\/code> hanno altezze diverse: ci sono molti modi per gestire questa situazione, ma esulano dallo scopo di questo articolo. Vi suggerisco caldamente di leggere <a href=\"http:\/\/www.alistapart.com\/articles\/fauxcolumns\/\">Faux Columns<\/a> di Dan Cederholm per imparare come fare in modo che le altezze sembrino uguali, indipendentemente dal contenuto.<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2>Prima il float<\/h2>\n<p>Fino ad ora abbiamo visto degli esempi piuttosto semplici che non creano troppi mal di testa. Ci sono tuttavia dei <a href=\"http:\/\/it.wikipedia.org\/wiki\/Gotcha\">gotcha<\/a> a cui dobbiamo prestare attenzione quando lavoriamo con la propriet\u00e0 float. Sorprendentemente, uno dei pi\u00f9 grossi gotcha non sta nel CSS ma in HTML: il posto in cui inserite l&#8217;elemento a cui si applica il float nel HTML pu\u00f2 causare risultati differenti. Provate a guardare l&#8217;<a href=\"demo\/CSS_float\/esempio_h.html\">Esempio H<\/a>.<\/p>\n<p>Qui c&#8217;\u00e8 un piccolo e grazioso quadrato che ha un immagine a cui \u00e8 applicato un float a destra e del testo attorno a questa. Il nostro CSS \u00e8 elementare:<\/p>\n<pre><code> \n#container {\n  width: 280px;\n  margin: 0 auto;\n  padding: 10px;\n  background: #aaa;\n  border: 1px solid #999;\n}\n \nimg {\n  float: right;\n} \n<\/code><\/pre>\n<p>Il nostro elemento padre, <code>#container<\/code> ha una larghezza scarsa che mantiene il nostro elemento a cui \u00e8 applicato il float, l&#8217;<code>img<\/code>, all&#8217;interno dei suoi margini. Il nostro HTML sar\u00e0 cos\u00ec:<\/p>\n<pre> \n<code> \n&lt;div id=\"container\"&gt;\n  &lt;img src=\"image.gif\" \/&gt;\n  &lt;p&gt;This is some text contained within a \nsmall-ish box. I'm using it as an example\nof how placing your floated elements in different \norders in your HTML can affect your layouts. For\nexample, take a look at this great photo \nplaceholder that should be sitting on the right.&lt;\/p&gt;\n&lt;\/div&gt;\n \n<\/code> \n<\/pre>\n<p>Questo concetto base ci d\u00e0 il risultato desiderato, ma cosa succederebbe se prendessimo questo stesso esempio e riarrangiassimo leggermente il codice HTML? Nell&#8217;<a href=\"demo\/CSS_float\/esempio_i.html\">Esempio I<\/a> sposteremo l&#8217;<code>img<\/code> in modo tale che appaia dopo il nostro paragrafo di testo:<\/p>\n<pre> \n<code> \n&lt;div id=\"container\"&gt;\n  &lt;p&gt;This is some text contained within a\nsmall-ish box. I'm using it as an example\nof how placing your floated elements in different \norders in your HTML can affect your layouts. For\nexample, take a look at this great photo \nplaceholder that should be sitting on the right.&lt;\/p&gt;\n  &lt;img src=\"image.gif\" \/&gt;\n&lt;\/div&gt;\n \n<\/code> \n<\/pre>\n<p>Il nostro risultato \u00e8 meno che desiderabile. La nostra immagine si \u00e8 spostata a destra, ma non \u00e8 pi\u00f9 nell&#8217;angolo in alto a destra dove la volevamo: \u00e8 finita sotto al nostro paragrafo di testo. Peggio ancora, sembra che esca dal bordo inferiore dell&#8217;elemento padre <code>#container<\/code>. Cosa sta succedendo? Per prima cosa, una regola che ho visto che funziona bene per i miei layout \u00e8 quella di mettere <em>prima il float<\/em>. Ossia, nel mio HTML, metto quasi sempre prima nel markup gli elementi a cui devo applicare il float e li metto anche prima di qualsiasi elemento a cui non viene applicato il float ma che interagir\u00e0 con quelli, come il paragrafo nell&#8217;esempio di cui sopra. La maggior parte delle volte, ottengo cos\u00ec il risultato sperato. In secondo luogo, la ragione per cui l&#8217;immagine sembra che stia a cavallo del bordo inferiore dell&#8217;elemento <code>#container<\/code> ha a che fare con una cosa chiamata \u201ccollapsing\u201d. Vediamo che cosa \u00e8 il collapsing e come possiamo gestirlo al meglio.<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2>Collapsing<\/h2>\n<p>Il collapsing avviene quando un elemento padre che contiene un numero qualsiasi di elementi a cui \u00e8 applicato il float non si espande fino a contenerli interamente, come farebbe se agli elementi non fosse applicato il float. Nell&#8217;Esempio I di cui sopra, il nostro elemento padre, <code>#container<\/code>, \u00e8 \u201ccollassato\u201d come se l&#8217;elemento <code>img<\/code> a cui \u00e8 stato applicato il float non si trovasse nemmeno l\u00ec. Questo non \u00e8 un bug del browser, al contrario \u00e8 un comportamento atteso ed appropriato. Dal momento che l&#8217;elemento con il float era stato originariamente calcolato nel flusso normale e poi <em>rimosso<\/em>, l&#8217;elemento <code>#container<\/code> non lo considera all&#8217;interno dei suoi confini e pertanto si comporta come se non ci fosse nemmeno. Nota: Eric Meyer ha scritto un bellissimo articolo su questo argomento, intitolato <a href=\"http:\/\/complexspiral.com\/publications\/containing-floats\">Containing Floats<\/a>, nel quale va molto pi\u00f9 a fondo della questione. E&#8217; una risorsa molto utile. La buona notizia \u00e8 che possiamo porre rimedio a questa situazione in svariati modi: se vi state chiedendo se ha a che fare con la propriet\u00e0 <code>clear<\/code> allora siete sulla buona strada.<\/p>\n<p>Uno dei modi pi\u00f9 comuni per sistemare un elemento padre collassato \u00e8 di piazzare un elemento con la propriet\u00e0 <code>clear<\/code> dopo l&#8217;elemento a cui abbiamo applicato il float. Questo obbligher\u00e0 il padre ad iniziare a rifluire dopo l&#8217;elemento con il float. Forse \u00e8 pi\u00f9 semplice mostrarvi ci\u00f2 in azione. Considerate lo HTML dell&#8217;<a href=\"demo\/CSS_float\/esempio_j.html\">Esempio J<\/a> che \u00e8 lo stesso dell&#8217;esempio precedente ma con un elemento in pi\u00f9:<\/p>\n<pre> \n<code> \n&lt;div id=\"container\"&gt;\n  &lt;p&gt;This is some text contained within a \nsmall-ish box. I'm using it as an example\nof how placing your floated elements in different\norders in your HTML can affect your layouts. For \nexample, take a look at this great photo \nplaceholder that should be sitting on the right.&lt;\/p&gt;\n  &lt;img src=\"image.gif\" \/&gt;\n  &lt;div style=\"clear: right;\"&gt;&lt;\/div&gt;\n&lt;\/div&gt;\n \n<\/code> \n<\/pre>\n<p>Piazzando un <code>div<\/code> con uno stile inline <code>clear: right<\/code> abbiamo fatto in modo che il nostro <code>#container<\/code> liberi la nostra immagine con il float facendogli ricalcolare la sua altezza ora che c&#8217;\u00e8 un elemento sotto ad essa. Sebbene questa soluzione funzioni, potrebbe non essere la pi\u00f9 elegante perch\u00e9 dobbiamo aggiungere del markup extra al nostro documento. Sarebbe stato pi\u00f9 intrigante gestire ci\u00f2 tramite CSS. Ci sono alcuni modi per farlo, pertanto esaminiamone uno di questi.<\/p>\n<p>Prendete questo esempio: un elemento padre che contiene tre immagini a cui \u00e8 applicato un float. IL nostro HTML \u00e8 come segue:<\/p>\n<pre> \n<code> \n&lt;div id=\"container\"&gt;\n  &lt;img src=\"image.gif\" \/&gt;\n  &lt;img src=\"image.gif\" \/&gt;\n  &lt;img src=\"image.gif\" \/&gt;\n&lt;\/div&gt;\n \n<\/code> \n<\/pre>\n<p>Ed il nostro CSS \u00e8 cos\u00ec:<\/p>\n<pre> \n<code> \n#container {\n  width: 260px;\n  margin: 0 auto;\n  padding: 10px 0 10px 10px;\n  background: #aaa;\n  border: 1px solid #999;\n}\n \nimg {\n  float: left;\n  margin: 0 5px 0 0;\n}\n \n<\/code> \n<\/pre>\n<p>Quando guarderete questo esempio in azione, realizzerete rapidamente che il nostro elemento padre non contiene le immagini con il float. Di nuovo, questo \u00e8 un comportamento atteso perch\u00e9 gli elementi con il float vengono rimossi dal flusso. Pertanto, in accordo con il nostro elemento padre, <code>#container<\/code>, \u00e8 vuoto. Osservate ci\u00f2 nell&#8217;<a href=\"demo\/CSS_float\/esempio_k.html\">Esempio K<\/a>.<\/p>\n<p>Adesso proviamo a rimediarvi con i CSS invece che aggiungendo del markup HTML al nostro documento, come avevamo fatto precedentemente. C&#8217;\u00e8 un metodo che permette ad un elemento padre di liberarsi di qualunque elemento con il float al suo interno. Usa una propriet\u00e0 CSS chiamata <code>overflow<\/code> con il valore <code>hidden<\/code>. Si noti che la propriet\u00e0 <code>overflow<\/code> non era stata creata per questo utilizzo e potrebbe dare dei problemi quali nascondere del contenuto o far apparire delle barre di scorrimento non desiderate. Potete approfondire l&#8217;argomento leggendo <a href=\"http:\/\/www.mezzoblue.com\/archives\/2005\/03\/03\/clearance\/\">questo articolo<\/a> e <a href=\"http:\/\/www.quirksmode.org\/blog\/archives\/2005\/03\/clearing_floats.html\">quest&#8217;altro<\/a>. Tuttavia, ai fini del nostro esempio, applicheremo la propriet\u00e0 <code>overflow: hidden<\/code> al nostro elemento padre <code>#container<\/code>:<\/p>\n<pre> \n<code> \n#container {\n  overflow: hidden;\n  width: 260px;\n  margin: 0 auto;\n  padding: 10px 0 10px 10px;\n  background: #aaa;\n  border: 1px solid #999;\n}\n \n<\/code> \n<\/pre>\n<p>Il nostro risultato si trova nell&#8217;<a href=\"demo\/CSS_float\/esempio_l.html\">Esempio L<\/a>. Piuttosto forte, vero? Un altro metodo che d\u00e0 risultati simili ma con minori caveat usa lo pseudo-selettore <code>:after<\/code>. Utilizzando il nostro esempio, il codice sar\u00e0:<\/p>\n<pre> \n<code> \n#container:after {\n  content: \".\";\n  display: block;\n  height: 0;\n  clear: both;\n  visibility: hidden;\n}\n \n<\/code> \n<\/pre>\n<p>In questo caso, il CSS sta piazzando un nuovo elemento dopo il nostro elemento <code>#container<\/code>, con del contenuto al suo interno (in questo caso, un punto) a cui imposta la visibilit\u00e0 a hidden e senza altezza. Potete trovare una panoramica completa e dettagliata di questa tecnica su <a href=\"http:\/\/www.positioniseverything.net\/easyclearing.html\">Position is Everything<\/a>.<\/p>\n<p>Infine, Eric Meyer spiega un terzo modo per gestire questo problema nel suo articolo citato sopra, <a href=\"http:\/\/complexspiral.com\/publications\/containing-floats\/\">Containing Floats<\/a>. Secondo la Specifica 2.1 di CSS:<\/p>\n<blockquote>\n<p>un elemento a cui \u00e8 applicato float si espander\u00e0 fino a contenere gli elementi che discendono da esso.<\/p>\n<\/blockquote>\n<p>Quindi, in questo caso, applicare il float al nostro elemento contenitore causer\u00e0 l&#8217;espansione di questo fino a contenere la nostra immagine ed il nostro paragrafo in maniera equivalente ai metodi descritti sopra.<\/p>\n<p>Fondamentalmente, tutte queste soluzioni fanno la stessa cosa: stanno facendo in modo che gli elementi padre rispettino il flusso dei loro figli con il float. Ciascuno ha i suoi meriti e la sua utilit\u00e0. Dovrete impararli tutti e poi applicare quello che funziona meglio nel vostro caso specifico.<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2>Cose che possono causare una rapida perdita di capelli<\/h2>\n<p>Credeteci o meno, ma ci sono alcuni bug dei browser che gli elementi con il float possono sollevare, come il <a href=\"http:\/\/www.positioniseverything.net\/explorer\/doubled-margin.html\">double margin bug<\/a> ed il <a href=\"http:\/\/www.positioniseverything.net\/explorer\/threepxtest.html\">3px Text-Jog<\/a>. Entrambe esulano dallo scopo di questo articolo, ma state tranquilli che per tutti e due ci sono dei semplici rimedi, se volete supportare i vecchi browser.<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2>Conclusioni<\/h2>\n<p>Utilizzando la propriet\u00e0 <code>float<\/code> potete riempire la vostra cassetta degli attrezzi per i layout in modi piuttosto forti e \u201cresponsive\u201d. Comprendere come funziona ed i principi che la regolano vi dar\u00e0 una base solida per l&#8217;utilizzo efficace del float.<\/p>\n<p>Illustrazioni: {carlok}<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>La propriet\u00e0 float \u00e8 una risorsa molto utile e potente a disposizione dei web designer\/developer che lavorano con HTML e CSS. Purtroppo per\u00f2, pu\u00f2 anche causare frustrazione e confusione se non si comprende appieno il suo funzionamento. Mettete alla prova la vostra conoscenza o fate un ripasso con Noah Stokes, che esplora la teoria ed il comportamento del float e ci guida attraverso  le insidie correlate all&#8217;uso di float.<\/p>\n","protected":false},"author":818,"featured_media":7000613,"comment_status":"open","ping_status":"open","template":"","categories":[244,247,272,40],"tags":[],"coauthors":[315],"class_list":["post-154","article","type-article","status-publish","has-post-thumbnail","hentry","category-css","category-html","category-layout-and-grids","category-numero-26-22-marzo-2011"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/article\/154","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/article"}],"about":[{"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/types\/article"}],"author":[{"embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/users\/818"}],"replies":[{"embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/comments?post=154"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/media\/7000613"}],"wp:attachment":[{"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/media?parent=154"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/categories?post=154"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/tags?post=154"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/coauthors?post=154"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}