Un problema comune che ho con le pagine web è flottante div che strisciano fuori dai loro contenitori.Perché overflow nascosto interrompe gli elementi mobili che sfuggono al loro contenitore?
#wrapper{
border:1px solid red;
}
#wrapper div{
float:left;
font-size: 3em;
}
...
<div id="wrapper">
<div>Hello World</div>
</div>
vivo esempio: http://jsfiddle.net/ugUVa/1/
Ci sono un sacco di modi di sporchi per risolvere questo problema (l'inserimento di un div con clear: both)
Una soluzione molto più elegante che ho visto è l'impostazione dei div involucro stile overflow per nascondere:
Esempio: http://jsfiddle.net/ugUVa/2/
Questo metodo funziona bene tutti i browser, bello e pulito senza markup addizionale. Sono felice, ma non ho idea di perché funzioni!
Tutta la documentazione che ho guardato indica overflow: hidden è per nascondere il contenuto, non il ridimensionamento di un genitore per adattare i suoi figli ...
Qualcuno può offrire una spiegazione per questo comportamento?
Grazie
Una volta che un elemento è flottato, viene essenzialmente rimosso dal flusso di documenti per i calcoli di dimensionamento. Poiché il contenitore è ora "vuoto", si riduce alla dimensione minima consentita. L'aggiunta dell'elemento di compensazione o l'impostazione di overflow costringe il contenitore a considerare tutto ciò che è all'interno per il ridimensionamento, compresi gli elementi flottati che altrimenti verrebbero ignorati. –
@MarcB dovrebbe essere una risposta. – Christoph
So che stai cercando una spiegazione, e non una soluzione, ma potresti anche usare l'hack della correzione. Fondamentalmente uguale a 'clear: both;' div, ma senza markup addizionale. Vedi il mio esempio: http://jsfiddle.net/TheNix/fSBhT/ e un articolo su di esso: http://nicolasgallagher.com/micro-clearfix-hack/ – Nix