Recientemente estaba buscando el código de un sitio web y vi que todos <div>
tenían una clase clearfix
.
Después de una búsqueda rápida en Google, aprendí que a veces es para IE6, pero ¿qué es realmente un clearfix?
¿Podría proporcionar algunos ejemplos de un diseño con clearfix, en comparación con un diseño sin clearfix?
div
se expandirá completamente a la altura adecuada para encerrar a sus hijos flotantes. webtoolkit.info/css-clearfix.htmlRespuestas:
Si no necesita admitir IE9 o inferior, puede usar flexbox libremente, y no necesita usar diseños flotantes.
Vale la pena señalar que hoy en día, el uso de elementos flotantes para el diseño se desalienta cada vez más con el uso de mejores alternativas.
display: inline-block
- MejorFlexbox es compatible con Firefox 18, Chrome 21, Opera 12.10 e Internet Explorer 10, Safari 6.1 (incluido Mobile Safari) y el navegador predeterminado de Android 4.4.
Para obtener una lista detallada del navegador, consulte: https://caniuse.com/flexbox .
(Quizás una vez que su posición se haya establecido por completo, puede ser la forma absolutamente recomendada de diseñar elementos).
Un clearfix es una forma en que un elemento borra automáticamente sus elementos secundarios , de modo que no necesita agregar un marcado adicional. Generalmente se usa en diseños de flotación donde los elementos flotan para apilarse horizontalmente.
El clearfix es una forma de combatir el problema del contenedor de altura cero para elementos flotantes
Un clearfix se realiza de la siguiente manera:
O, si no necesita soporte para IE <8, lo siguiente también está bien:
Normalmente debería hacer algo de la siguiente manera:
Con clearfix, solo necesita lo siguiente:
Lea sobre esto en este artículo - por Chris Coyer @ CSS-Tricks
fuente
content: "\00A0";
el \ 00A0 representa un espacio en blanco, un espacio en blanco simple no funciona bien :) lo siento. :)display: inline-block
sea mejor que los flotantes para el diseño basado en bloques Los bloques en línea son, como su nombre lo indica, colocados en línea : la mayoría de los diseños se basan en bloques y hacer que estos bloques se coloquen en un contexto de formato en línea simplemente no tiene sentido. También tiene que lidiar con varios problemas asociados con el formato en línea, como el espacio en blanco entre elementos, otros elementos en línea, el tamaño, la alineación, etc., como han señalado muchos otros. Por supuesto, los diseños de flotador tampoco tienen mucho sentido, pero al menos los flotadores tienen la ventaja de estar basados en bloques.Las otras respuestas son correctas. Pero quiero agregar que es una reliquia de la época en que las personas aprendían CSS por primera vez, y abusaron
float
de hacer todo su diseño.float
está destinado a hacer cosas como imágenes flotantes junto a largos tramos de texto, pero mucha gente lo usó como su mecanismo de diseño principal. Como en realidad no estaba destinado a eso, necesitas trucos como "clearfix" para que funcione.En estos días
display: inline-block
es una alternativa sólida (a excepción de IE6 e IE7 ), aunque los navegadores más modernos vienen con mecanismos de diseño aún más útiles bajo nombres como flexbox, diseño de cuadrícula, etc.fuente
inline-block
no es una mejora estricta sobre los flotantes debido al problema de espacio entre bloques , donde el espacio en blanco en el HTML se traduce en caracteres de espacio que separan los bloques.inline-block
requiere soluciones propias , al igual quefloat
requiere clearfix.El
clearfix
permite que un recipiente para envolver sus hijos flotaban. Sin unclearfix
estilo o equivalente, un contenedor no se enrolla alrededor de sus elementos flotantes y se derrumba, como si sus elementos flotantes estuvieran posicionados de manera absoluta.Hay varias versiones del clearfix, con Nicolas Gallagher y Thierry Koblentz como autores clave.
Si desea soporte para navegadores antiguos, es mejor usar este clearfix:
En SCSS, puede usar la siguiente técnica:
Si no le importa admitir navegadores antiguos, hay una versión más corta:
fuente
div
envoltura sea los elementos flotantes. ¿Me pueden ayudar a visualizarlo?Ofrecer una actualización sobre la situación en el segundo trimestre de 2017.
Una nueva propiedad de visualización CSS3 está disponible en Firefox 53, Chrome 58 y Opera 45.
Verifique la disponibilidad de cualquier navegador aquí: http://caniuse.com/#feat=flow-root
El elemento (con una propiedad de visualización establecida en flow-root) genera un cuadro contenedor de bloques y presenta su contenido mediante el diseño de flujo. Siempre establece un nuevo contexto de formato de bloque para sus contenidos.
Lo que significa que si usa un div padre que contiene uno o varios hijos flotantes, esta propiedad garantizará que el padre incluya a todos sus hijos. Sin necesidad de un hack clearfix. En cualquier elemento secundario, ni siquiera en un último elemento ficticio (si estaba utilizando la variante clearfix con: before en los últimos elementos secundarios).
fuente
flow-root
es la solución real.En pocas palabras, clearfix es un truco .
Es una de esas cosas feas con las que todos tenemos que vivir, ya que es realmente la única forma razonable de garantizar que los elementos flotantes de los niños no desborden a sus padres. Existen otros esquemas de diseño, pero la flotación es demasiado común en el diseño / desarrollo web hoy en día como para ignorar el valor del hack de clearfix.
Personalmente me inclino hacia la solución Micro Clearfix (Nicolas Gallagher)
referencia
fuente
Una técnica comúnmente utilizada en diseños basados en flotante CSS es asignar un puñado de propiedades CSS a un elemento que sabe que contendrá elementos flotantes. La técnica, que comúnmente se implementa usando una definición de clase llamada
clearfix
, (generalmente) implementa los siguientes comportamientos CSS:El propósito de estos comportamientos combinados es crear un contenedor
:after
del elemento activo que contenga un solo '.' marcado como oculto, lo que borrará todos los flotantes preexistentes y restablecerá efectivamente la página para el siguiente contenido.fuente
La otra opción (y quizás la más simple) para obtener un clearfix es usar
overflow:hidden;
el elemento contenedor. Por ejemploPor supuesto, esto solo puede usarse en casos en los que nunca desee que el contenido se desborde.
fuente
Probé la respuesta aceptada pero aún tenía problemas con la alineación del contenido. Agregar un selector ": before" como se muestra a continuación solucionó el problema:
MENOS arriba se compilará a CSS a continuación:
fuente
Aquí hay un método diferente, lo mismo pero un poco diferente
la diferencia es el punto de contenido que se reemplaza con un
\00A0
==whitespace
Más sobre esto http://www.jqui.net/tips-tricks/css-clearfix/
Aquí hay una versión compacta de la misma ...
fuente
.clearfix {...}
,html[xmlns] .clearfix {...}
,* html .clearfix {...}
, Y.clearfix {...}
todas seleccionar la misma cosa y sobrescribir el uno al otro. Esto es un poco hacky y no es realmente necesario.\00A0
, creo que fue por la compatibilidad entre navegadores y el conocimiento de la época.