logo Dove iniziare Linguaggi Aiuto Blog
Home Dove iniziare Linguaggi Aiuto e Supporto Info e Blog

La proprietà float in CSS

La proprietà float in CSS viene utilizzata per il posizionamento e il layout delle pagine web. Può essere usata per spostare un elemento a destra o a sinistra all'interno dell'elemento che lo contiene.

PersonaL'immagine qui a sinistra ha la proprietà float:left, quindi viene inserita accanto a questo testo.

I valori possibili di float

La proprietà float può assumere i seguenti valori:

  • left: l'elemento viene posizionato a sinistra nell'elemento contenitore, e gli altri contenuti si dispongono attorno sulla destra.
  • right: l'elemento viene posizionato a destra nell'elemento contenitore, e gli altri contenuti si dispongono attorno sulla sinistra.
  • none: l'elemento non ha un allineamento specificato (valore predefinito).
  • inline-start: l'elemento si allinea all'inizio della direzione del testo, che può essere a sinistra o a destra a seconda della lingua (sinistra per lingue come l'italiano, destra per lingue come l'arabo).
  • inline-end: l'elemento si allinea alla fine della direzione del testo, che può essere a destra o a sinistra a seconda della lingua.

Vediamo un esempio con float:

<img src="foto.jpg">
<p>Lorem ipsum odor amet, consectetuer adipiscing elit. Tristique commodo sem rhoncus non iaculis
torquent magna. Suscipit quisque tempor erat amet in erat. Ut taciti aliquet feugiat libero amet
donec. Porta phasellus nulla ex hendrerit sed dictum purus lacinia. Interdum vel viverra aliquet vel
netus; augue pharetra.</p>

<style>
img {
  float: right;
  margin: 10px;
}
</style>

Nell'esempio, l'immagine si trova a destra del testo. Apparirebbe in questo modo:

MontagneLorem ipsum odor amet, consectetuer adipiscing elit. Tristique commodo sem rhoncus non iaculis torquent magna. Suscipit quisque tempor erat amet in erat. Ut taciti aliquet feugiat libero amet donec. Porta phasellus nulla ex hendrerit sed dictum purus lacinia. Interdum vel viverra aliquet vel netus; augue pharetra. Sollicitudin facilisi mus sodales euismod quisque laoreet conubia.

Se invece impostiamo float:none, vedremo questo tipo di problema (non molto gradevole graficamente):

Lorem ipsum odor amet, consectetuer adipiscing elit. Tristique commodo sem rhoncus non iaculis torquent magna. Suscipit quisque tempor erat amet in erat. Ut taciti aliquet feugiat libero amet donec. Porta phasellus nulla ex hendrerit sed dictum purus lacinia.

Più elementi insieme

Possiamo allineare più elementi, uno a destra e uno a sinistra, nello stesso elemento contenitore. Ad esempio, possiamo allineare due blocchi che contengono del testo in questo modo:

Lorem ipsum odor amet, consectetuer adipiscing elit. Tristique commodo sem rhoncus non iaculis torquent magna. Suscipit quisque tempor erat amet in erat.
Lorem ipsum odor amet, consectetuer adipiscing elit. Tristique commodo sem rhoncus non iaculis torquent magna. Suscipit quisque tempor erat amet in erat.

<div class="elemento1">Lorem ipsum odor amet...</div>
<div class="elemento2">Lorem ipsum odor amet...</div>

<style>
.elemento1 {
  float: left;
  width: 48%;
}
.elemento2 {
  float: right;
  width: 48%;
}
</style>

Risolvere i problemi di float

Usare la proprietà float potrebbe comportare dei problemi. Proprio come dice il nome, gli elementi con float "galleggiano" nell'elemento che li contiene. Sono presenti nella pagina, ma le loro dimensioni non contano. Per capire meglio, guarda cosa accade con una semplice immagine con float:left:

Come avviene il problema di float e come risolverlo con "clear:both"

L'elemento contenitore (quello con il bordo grigio) non tiene conto delle dimensioni dell'immagine, perché è stato impostato l'attributo CSS float.

Per risolvere questo problema, esistono due metodi principali.

Utilizzare l'attributo overflow

Se imposti l'attributo overflow (che vedremo nella lezione su overflow) con valore auto o hidden, le dimensioni dell'elemento contenitore verranno automaticamente aumentate per contenere anche gli elementi con float.

<div><img src="foto.png"></div>

<style>
div {
  overflow: auto;
}
img {
  float: right;
}
</style>

Considera, tuttavia, che overflow non è specifico per risolvere il problema di float. Il suo utilizzo potrebbe modificare il comportamento degli elementi senza volerlo, come vedremo nella prossima lezione.

Utilizzare il clearfix specifico

Esiste uno specifico metodo, chiamato "clearfix", nato proprio per evitare che elementi con float causassero problemi grafici nelle pagine web. L'attributo da usare si chiama clear e deve essere inserito, normalmente, in un elemento al di sotto dell'elemento che ha float (guarda l'esempio di codice CSS che segue per capire meglio).

L'attributo clear accetta i seguenti valori:

  • none, che non attua alcuna modifica.
  • left, che riempie gli spazi solo degli elementi con float:left.
  • right, che riempie gli spazi solo degli elementi con float:right.
  • both, che riempie gli spazi di tutti gli elementi con float.

Vediamo il funzionamento di base di clear:

<div>
  <div class="float">Elemento con float</div>
  <div class="clearfix"></div> <!-- Ridimensiona correttamente il div contenitore -->
</div>

<style>
div.float {
  float: left;
}
.clearfix {
  clear: both;
}
</style>

Non sempre è possibile aggiungere un <div> all'interno della pagina, e può rendere meno ordinato il codice HTML. Per questo, un trucco che si usa spesso (e che ti consigliamo) è questo:

<div class="clearfix">
  <div class="float">Elemento con float</div>
  <!-- Nessun div necessario -->
</div>

<style>
div.float {
  float: left;
}
.clearfix::after {
  content: "";
  display: table;
  clear: both;
}
</style>

In questo caso si usa lo pseudo-elemento ::after, che vedremo in dettaglio nella lezione degli pseudo-elementi.

Prova!Completa gli spazi vuoti con il testo appropriato.
/* Allinea con float l'elemento verso destra */
div {
  float: ;
}

Prova!Scegli l'opzione corretta tra quelle elencate.
/* Imposta un clearfix per un elemento che contiene un elemento float */
div.contenitore::after {
  content: "";
  display: table;
  _____________;
}