clearfix Reloaded + desbordamiento: oculto Demystified

27 de septiembre 2010 a las 6:27 am por Thierry Koblentz | En CSS 101 | 12 comentarios

Sobre el autor: Thierry Koblentz es un ingeniero de front-end de Yahoo!
Él es dueño de TJK Diseño y css.org ez- . Puedes seguir Thierry en Twitter en @ thierrykoblentz .

clearfix y overflow : hidden puede ser las dos técnicas más populares para limpiar flota sin marcaje estructural.

Este breve artículo trata de mejorar el primer método y arrojar alguna luz sobre el verdadero significado de la segunda.

clearfix

En todo lo que sabes acerca clearfix está mal que explican los problemas que crea este método en todos los navegadores y le sugiero que utilice sólo clearfix sobre los elementos que no están al costado del flotante (por ejemplo, una ventana modal), aunque en calidad de autores que todavía tiene que lidiar con el colapso de los márgenes . Esta página de demostración demuestra el problema.

Margen de colapso de comportamiento en las dos primeras casillas demuestra que es el contenido generado (no vacío) que mantiene el margen inferior dentro de la caja (que tiene todo el sentido de acuerdo a las especificaciones ).

Así que, para crear el diseño de una misma caja a través de navegadores podemos mejorar el método original mediante la generación de contenidos con las dos pseudo-elementos :before y :after :

  . Clearfix: antes,
 . Clearfix: after {
   contenido:; "".    
   display: block;    
   altura: 0;    
   overflow: hidden;	
 }
 . Clearfix: after {clear: both;}
 . Clearfix {zoom: 1;} / * IE <8 * / 

No se limite a reemplazar sus normas clearfix con estos otros nuevos en los proyectos existentes, sin embargo, ya que puede tener problemas ya parcheado relacionados con el colapso de los márgenes a través de otros métodos.

overflow

En la mayoría de las discusiones sobre la eliminación de la flota overflow:hidden método aparece, y siempre es derribado por un " Si va a colocar elementos con posición absoluta dentro de la div, se le corte de estos elementos ". Pero esto no es necesario verdad. overflow:hidden siempre recortar los elementos en posición relativa, pero no siempre se esconden seres con posición absoluta. Esto es así porque todo depende del bloque de contención:

10.1 Definición de "bloque de contención":

4. Si el elemento tiene 'position: absolute', el bloque de contención es establecido por el antecesor más próximo con una "posición" de la 'absoluta', 'relativa' o 'fijo', ...

Esto significa que los elementos con posición absoluta se mostrará fuera de una caja con estilo overflow:hidden a menos que su bloque de contención es la propia caja o de un elemento dentro de la caja, dijo.

Puede consultar esta página de demostración para ver cómo funcionan las cosas.

Mejores alternativas

Si usted puede solicitar una anchura al elemento que contiene carrozas, entonces su mejor opción es usar:

  display: inline-block;
 Ancho: <valor explícita <cualquier; 

Para leer más

Compartir y ampliar: Marcar página con del.icio.us | Digg It! | reddit!

12 comentarios

  1. Gracias por el desbordamiento de desmitificación: ocultos. Yo tiendo a usar overflow: hidden como mi defecto "clearfix" solución, pero a veces tuviera que elegir otro (o yo pensaba que tenía que) a causa de elementos absolutamente posicionados fuera del área. Ahora sé que es más sutil de lo que pensaba.

    display: table trabaja demasiado, pero luego no se puede utilizar position: relative en ese elemento.

    Comentario por Florent V. - 27 de septiembre 2010 #

  2. Este es un buen punto. Estoy seguro de que mucha gente que está usando display: table o display: table-cell no son conscientes de esta limitación.

    Gracias por tus comentarios.

    Comentario por Thierry Koblentz - 28 de septiembre 2010 #

  3. Cómo funciona el "mejor alternativa" en IE6, IE7, IE8?

    Comentario por Jorge Epuñan - 30 de septiembre 2010 #

  4. @ Jorge

    Sí lo hace, en realidad funciona en IE 5.0 +

    La lógica es que en 5,6,7 es decir el ancho explícita desencadena hasLayout mientras que "inline-block", crea un contexto de formato de bloque en el IE 8, y otros navegadores modernos.

    La anchura es la clave para que las cosas funcionen en todos los ámbitos, sin embargo, desde cuadros de estilo como "inline-block" shrink-wrap.

    Por ello, el artículo dice: "Si se puede aplicar una anchura al elemento que contiene los flotadores ..."

    Comentario por Thierry Koblentz - 01 de octubre 2010 #

  5. Jugado en torno al uso de display: inline-block y ancho, pero he encontrado algunos errores.

    Si hay un espacio entre los divs que se mostró como un espacio entre los divs.
    La alineación vertical es un infierno. @ Thierry, ¿cómo lo uso?

    Echa un vistazo a mi intento aquí http://jsfiddle.net/UZr7L/

    Comentario por Michael Lajlev - 10 de octubre 2010 #

  6. @ Michael

    Yo no lo uso en elementos que son hermanos (al menos no por diseño), pero tenga en cuenta que lo que estás experimentando no son errores.
    YUI las 3 ofertas de la red con este mediante el uso de letter-spacing y word-spacing (valores negativos).

    Comentario por Thierry Koblentz - 11 de octubre 2010 #

  7. A raíz de este comentario de prensa perecederos , me di cuenta de que tenía un error tipográfico en allí, así que hemos actualizado la norma clearfix arriba.
    A diferencia de otros métodos, se utiliza overflow: hidden, no visibility: hidden.

    Gracias a Darren para plantear el tema :)

    Comentario por Thierry Koblentz - 22 de octubre 2010 #

  8. Al parecer, con content: "020" para el clearfix es aún mejor

    Comentario por unwiredbrain - 28 de octubre 2010 #

  9. ¡Ay! WordPress mordí el código!

    Fue content: " backslash zero zero two zero "

    Comentario por unwiredbrain - 28 de octubre 2010 #

  10. @ Unwiredbrain

    Usted se refiere a una técnica que utiliza "visibility: hidden", pero lo que estoy utilizando es "overflow: hidden" por lo que debe hacer ninguna diferencia.

    Gracias por sus comentarios

    Comentario por Thierry Koblentz - 28 de octubre 2010 #

  11. Oh. Debo haber confundido a los dos. Lo siento por eso.

    Comentario por unwiredbrain - 28 de octubre 2010 #

  12. Maestro. Yo uso esta en cada proyecto ahora como parte de el repetitivo HTML5. Yo no uso todo el repetitivo, pero. Clearfix siempre viene muy bien. Gracias!

    Comentario por YJ - 10 de mayo 2011 #

Disculpa, los comentarios están cerrados en este momento.

Presentado por Yahoo!

Copyright © 2006-2012 Yahoo! Inc. Todos los derechos reservados. Política de privacidad - Condiciones del servicio

Desarrollado por WordPress en Yahoo! Web Hosting .