clearfix Reloaded troppo pieno +: hidden Demystified

27 settembre 2010 alle 06:27 am da Thierry Koblentz | In CSS 101 | 12 commenti

Circa l'autore: Thierry Koblentz è un front-end ingegnere di Yahoo!
Possiede TJK Progettazione e ez-css.org . Puoi seguire Thierry su Twitter all'indirizzo @ thierrykoblentz .

clearfix e overflow : hidden possono essere le due tecniche più popolari per cancellare carri senza markup strutturale.

Questo breve articolo è su come migliorare il primo metodo e spargimento po 'di luce sul vero significato del secondo.

clearfix

In tutto quello che sai è sbagliato su clearfix spiego i problemi di questo metodo crea tutti i browser e suggerisco di utilizzare solo clearfix su elementi che non sono accanto al galleggianti (per esempio una finestra modale), anche se, come gli autori abbiamo ancora a che fare con il crollo dei margini . Questa pagina demo dimostra il problema.

Margin-crollo comportamento nelle prime due caselle mostra che è il contenuto generato (non-vuoto) che mantiene il margine inferiore all'interno della scatola (che ha perfettamente senso secondo spec ).

Così, per creare lo stesso layout casella di tutti i browser, possiamo migliorare il metodo originale di generazione di contenuti utilizzando sia gli pseudo-elementi :before e :after :

  . Clearfix: prima,
 . Clearfix: after {
   contenuto:; "."    
   display: block;    
   height: 0;    
   overflow: hidden;	
 }
 . Clearfix: dopo {clear: both;}
 . Clearfix {zoom: 1;} / * IE <8 * / 

Non è sufficiente sostituire le regole clearfix con questi nuovi progetti esistenti, anche se, come si può avere già problemi di patch relative al crollo dei margini con altri metodi.

overflow

Nella maggior parte delle discussioni sulla compensazione galleggia l' overflow:hidden metodo si avvicina, ed è sempre abbattuto da un " Se si sta posizionando gli elementi posizionati in modo assoluto all'interno del div, sarete tagliando questi elementi ". Ma questo non è necessario vero. overflow:hidden sempre ritagliare gli elementi posizionati in modo relativo, ma non sempre nascondere quelli posizionati in modo assoluto. Questo perché tutto dipende il blocco contenitore:

10.1 Definizione di "blocco contenitore":

4. Se l'elemento ha 'position: absolute', il blocco contenitore è stabilito dal più vicino antenato con una 'posizione' di 'assoluto', 'parente' o 'fixed', ...

Questo significa che gli elementi posizionati in modo assoluto mostrerà al di fuori di una scatola in stile con overflow:hidden meno che il loro blocco contenitore è la stessa scatola o un elemento all'interno della scatola detto.

È possibile controllare questa pagina demo per vedere come funzionano le cose.

Alternative migliori

Se è possibile applicare una larghezza dell'elemento contenente carri, quindi la scelta migliore è quella di utilizzare:

  display: inline-block;
 larghezza: <qualsiasi value> esplicito; 

Ulteriori letture

Condividi ed estendere: Segnalibro con Del.icio.us | Digg it! | reddit!

12 commenti

  1. Grazie per la demistificazione di overflow: hidden. Io tendo ad usare overflow: hidden come il mio di default soluzione "clearfix", ma a volte ho dovuto scegliere un altro (o pensavo di avere a) a causa di elementi con posizionamento assoluto fuori dagli schemi. Ora so che è più sottile di quanto pensassi.

    display: table lavora troppo, ma poi non è possibile utilizzare position: relative a tale elemento.

    Commento di Florent V. - 27 Settembre, 2010 #

  2. Questo è un buon punto. Sono sicuro che molte persone che stanno usando display: table e display: table-cell non sono a conoscenza di questa limitazione.

    Grazie per il tuo feedback.

    Commento di Thierry Koblentz - 28 Settembre 2010 #

  3. Funziona il vostro 'un'alternativa migliore' in IE6, IE7, IE8?

    Commento di Jorge Epuñan - 30 Settembre 2010 #

  4. @ Jorge

    Sì lo fa, in realtà funziona in IE 5.0 +

    La logica è che in IE 5,6,7 della larghezza esplicita innesca hasLayout mentre "inline-block" crea un contesto di formattazione a blocchi in IE 8 e altri browsers moderni.

    La larghezza è la chiave per far funzionare le cose su tutta la linea, però, dal momento che, come scatole stile "inline-block" shrink-wrap.

    È per questo che l'articolo dice: "Se è possibile applicare una larghezza dell'elemento contenente carri ..."

    Commento di Thierry Koblentz - 1 ott 2010 #

  5. Giocato un po 'con l'utilizzo di display: inline-block e larghezza, ma ho trovato alcuni bug.

    Se vi è uno spazio tra i div si mostra come uno spazio tra i div.
    L'allineamento verticale è un inferno. @ Thierry come si usa?

    Date un'occhiata al mio tentativo qui http://jsfiddle.net/UZr7L/

    Commento di Michael Lajlev - 10 ottobre 2010 #

  6. @ Michael

    Io non lo uso su elementi che sono fratelli (almeno non per il layout), ma è da notare che quello che stai vivendo non sono dei bachi.
    YUI 3 offerte griglia con questo utilizzando letter-spacing e word-spacing (valori negativi).

    Commento di Thierry Koblentz - 11 Ottobre 2010 #

  7. In seguito a questo commento su Press deperibili , ho notato che avevo un errore di battitura in là quindi ho aggiornato la regola clearfix sopra.
    A differenza di altri metodi, utilizza overflow: hidden, non visibility: hidden.

    Grazie a Darren per sollevare la questione :)

    Commento di Thierry Koblentz - 22 ottobre 2010 #

  8. A quanto pare, con content: "020" per il clearfix è ancora meglio

    Commento di unwiredbrain - 28 Ottobre 2010 #

  9. Ouch! WordPress masticato il mio codice!

    E 'stato content: " backslash zero zero two zero "

    Commento di unwiredbrain - 28 Ottobre 2010 #

  10. @ Unwiredbrain

    Si fa riferimento a una tecnica che utilizza "visibility: hidden", ma quello che sto utilizzando è "overflow: hidden" quindi dovrebbe fare alcuna differenza.

    Grazie per il tuo feedback

    Commento di Thierry Koblentz - 28 ott 2010 #

  11. Oh. Devo aver confuso i due. Mi dispiace per questo.

    Commento di unwiredbrain - 28 Ottobre 2010 #

  12. Magistrale. Io lo uso su ogni progetto ora come parte del Testo Standard HTML5. Io non uso tutti i boilerplate, ma. Clearfix viene sempre a portata di mano. Grazie!

    Commento di YJ - 10 Maggio 2011 #

Siamo spiacenti, il commento forma è chiusa in questo momento.

Ospitato da Yahoo!

Copyright © 2006-2012 Yahoo! Inc. Tutti i diritti riservati. Privacy Policy - Termini di servizio

Powered by WordPress su Yahoo! Web Hosting .