[HTML] Comportamento di due elementi block level flottanti

sass

Nuovo Utente
3 Ago 2017
3
1
3
Buonasera a tutti,
avrei cortesemente bisogno di un chiarimento sul comportamento di due elementi block level quando ad uno di essi viene applicata la proprietà float con valore left o right.
Io ho il seguente codice html/css con due semplici paragrafi, i quali, come è noto, sono elementi a livello di blocco e dunque elementi che si dispongono verticalmente uno sopra l'altro, occupando lo spazio necessario. Se applico al secondo paragrafo la proprietà float: left, questa non ha effetto poiché allungando il testo del primo si ha come risultato lo scivolamento più in basso del secondo, senza che il primo paragrafo fluisca attorno al secondo. Se tramite CSS uso display: inline per il primo paragrafo allora sì che il testo fluisce attorno al testo che segue. Dunque voglio chiedervi: gli elementi block level si dispongono sempre uno sopra l'altro a prescindere dalla proprietà float? E poi gli elementi flottanti non vengono estratti dal normale flusso come gli elementi posizionati in modo assoluto?

Di seguito il codice:
HTML:
<!DOCTYPE html>
<html lang="it">

    <head>
        <meta charset="utf-8">
        <title>Training Page</title>
        <link rel="stylesheet" href="training.css">
    </head>

    <body>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
        <p class="push-left">At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat</p>
    </body>

</html>
Codice:
.push-left
{
    float: left;
    border: 0.5em solid red; /* per facilitare la comprensione */
    width: 50%;
    margin: 0 0;
}
 

f107

Utente Attivo
7 Ago 2012
181
4
18
Roma
Ciao!
Prima di tutto la proprietà float dovrebbe essere applicata ad entrambi gli elementi che devono "galleggiare".

Inoltre attenzione, in quanto avendo un bordo due elementi con larghezza 50% non potranno mai essere allineati.

Qui un esempio funzionante:
https://jsfiddle.net/tzgs4axw/1/
In rosso ho lasciato il float, in blu il display: inline-block, in fondo un esempio float con la lettera gigante :O

Per rispondere alle tue domande:
1- Gli elementi p hanno una larghezza di default del 100%, quindi sono sempre uno sopra l'altro verticalmente.
2- No, sono nella normale "griglia" di visualizzazione,
Inoltre ti lascio una lettura interessante per capire subito quando usare float e quando usare display: inline-block.
https://www.ternstyle.us/blog/float-vs-inline-block

Fammi sapere se hai altri dubbi o se non ho capito bene la richiesta.