Tengo el viejo problema de div
envolver un diseño de dos columnas. Mi barra lateral está flotando, por lo que mi contenedor div
no puede ajustar el contenido y la barra lateral.
<div id="container">
<div id="content"></div>
<div id="sidebar"></div>
</div>
Parece que existen numerosos métodos para corregir el error claro en Firefox:
<br clear="all"/>
overflow:auto
overflow:hidden
En mi situación, la única que parece funcionar correctamente es la <br clear="all"/>
solución, que es un poco desaliñada. overflow:auto
me da barras de desplazamiento desagradables y overflow:hidden
seguramente debe tener efectos secundarios. Además, IE7 aparentemente no debería sufrir este problema debido a su comportamiento incorrecto, pero en mi situación está sufriendo lo mismo que Firefox.
¿Qué método actualmente disponible para nosotros es el más robusto?
Respuestas:
Dependiendo del diseño que se esté produciendo, cada una de las siguientes soluciones de clearfix CSS tiene sus propios beneficios.
El clearfix tiene aplicaciones útiles, pero también se ha utilizado como hack. Antes de usar una solución clara, quizás estas soluciones css modernas puedan ser útiles:
Soluciones modernas de Clearfix
Contenedor con
overflow: auto;
La forma más sencilla de borrar elementos flotantes es usar el estilo
overflow: auto
en el elemento contenedor. Esta solución funciona en todos los navegadores modernos.Una desventaja, el uso de ciertas combinaciones de margen y relleno en el elemento externo puede hacer que aparezcan barras de desplazamiento, pero esto se puede resolver colocando el margen y el relleno en otro elemento que contiene el elemento principal.
El uso de 'overflow: hidden' también es una solución clara, pero no tendrá barras de desplazamiento, sin embargo, el uso
hidden
recortará cualquier contenido colocado fuera del elemento contenedor.Nota: El elemento flotante es una
img
etiqueta en este ejemplo, pero podría ser cualquier elemento html.Clearfix Reloaded
Thierry Koblentz en CSSMojo escribió: El último clearfix recargado . Señaló que al abandonar el soporte para oldIE, la solución se puede simplificar a una declaración css. Además, el uso
display: block
(en lugar dedisplay: table
) permite que los márgenes se contraigan correctamente cuando los elementos con clearfix son hermanos.Esta es la versión más moderna de clearfix.
⋮
⋮
Soluciones Clearfix anteriores
Las siguientes soluciones no son necesarias para los navegadores modernos, pero pueden ser útiles para apuntar a navegadores más antiguos.
Tenga en cuenta que estas soluciones dependen de errores del navegador y, por lo tanto, solo deben usarse si ninguna de las soluciones anteriores funciona para usted.
Se enumeran aproximadamente en orden cronológico.
"Beat That ClearFix", un clearfix para navegadores modernos
Thierry Koblentz 'de CSS Mojo ha señalado que al apuntar a los navegadores modernos, ahora podemos soltar los
zoom
y::before
/ propiedad / valores y simplemente usar:Esta solución no es compatible con IE 6/7 ... ¡a propósito!
Thierry también ofrece: " Una palabra de precaución : si comienza un nuevo proyecto desde cero, hágalo, pero no cambie esta técnica por la que tiene ahora, porque aunque no es compatible con oldIE, sus reglas existentes impiden márgenes de colapso ".
Micro Clearfix
La solución clearfix más reciente y adoptada a nivel mundial, la Micro Clearfix de Nicolas Gallagher .
Soporte conocido: Firefox 3.5+, Safari 4+, Chrome, Opera 9+, IE 6+
Propiedad de desbordamiento
Se prefiere este método básico para el caso habitual, cuando el contenido posicionado no se mostrará fuera de los límites del contenedor.
http://www.quirksmode.org/css/clearing.html : explica cómo resolver problemas comunes relacionados con esta técnica, a saber, la configuración
width: 100%
en el contenedor.En lugar de usar la
display
propiedad para establecer "hasLayout" para IE, se pueden usar otras propiedades para activar "hasLayout" para un elemento .Otra forma de borrar flotantes usando la
overflow
propiedad es usar el hack de subrayado . IE aplicará los valores prefijados con el guión bajo, otros navegadores no lo harán. Lazoom
propiedad desencadena hasLayout en IE:Si bien esto funciona ... no es ideal usar hacks.
PIE: Método de limpieza fácil
Este antiguo método "Easy Clearing" tiene la ventaja de permitir que los elementos posicionados cuelguen fuera de los límites del contenedor, a expensas de CSS más complicado.
Esta solución es bastante antigua, pero puede aprender todo acerca de Easy Clearing on Position Is Everything: http://www.positioniseverything.net/easyclearing.html
Elemento que usa la propiedad "clear"
La solución rápida y sucia (con algunos inconvenientes) para cuando estás abofeteando algo rápidamente:
Inconvenientes
<br style="clear: both" />
etiquetas que se encuentran alrededor del marcado.fuente
overflow: hidden
ooverflow: auto
no borra los flotadores (categorizarlo como "clearfix" es un nombre inapropiado); en su lugar, hace que un elemento cree un nuevo contexto de formato dentro del cual se pueden contener los flotantes. Esto hace que el contenedor se estire a la altura de los flotadores para contenerlos. No hay autorización en absoluto; dicho esto, aún puede elegir borrar o no borrar los flotadores dentro del contenedor, dependiendo de su diseño.¿Qué problemas estamos tratando de resolver?
Hay dos consideraciones importantes al flotar cosas:
Contiene flotadores descendientes. Esto significa que el elemento en cuestión se hace lo suficientemente alto como para envolver a todos los descendientes flotantes. (No cuelgan afuera)
Aislamiento de descendientes de flotadores externos. Esto significa que los descendientes dentro de un elemento deben poder usarlo
clear: both
y no interactuar con flotantes fuera del elemento.Contextos de formato de bloque
Solo hay una forma de hacer ambas cosas. Y eso es establecer un nuevo contexto de formato de bloque . Los elementos que establecen un contexto de formato de bloque son un rectángulo aislado en el que los flotadores interactúan entre sí. Un contexto de formato de bloque siempre será lo suficientemente alto como para envolver visualmente a sus descendientes flotantes, y ningún elemento flotante fuera de un contexto de formato de bloque puede interactuar con elementos en su interior. Este aislamiento de dos vías es exactamente lo que quieres. En IE, este mismo concepto se llama hasLayout , que se puede configurar a través de
zoom: 1
.Hay varias formas de establecer un contexto de formato de bloque, pero la solución que recomiendo es
display: inline-block
conwidth: 100%
. (Por supuesto, existen las advertencias habituales con el usowidth: 100%
, por lo que su usobox-sizing: border-box
o PUTpadding
,margin
yborder
en un elemento diferente.)La solución más robusta.
Probablemente la aplicación más común de flotadores es el diseño de dos columnas. (Se puede extender a tres columnas).
Primero la estructura de marcado.
Y ahora el CSS.
Inténtalo tú mismo
Vaya a JS Bin para jugar con el código y ver cómo se construye esta solución desde cero.
Los métodos tradicionales de clearfix se consideran dañinos.
El problema con las soluciones tradicionales de clearfix es que usan dos conceptos de representación diferentes para lograr el mismo objetivo para IE y todos los demás. En IE usan hasLayout para establecer un nuevo contexto de formato de bloque, pero para todos los demás usan cajas generadas ( ) con , lo que no establece un nuevo contexto de formato de bloque. Esto significa que las cosas no se comportarán igual en todas las situaciones. Para obtener una explicación de por qué esto es malo, consulte Todo lo que sabe sobre Clearfix es incorrecto .
:after
clear: both
fuente
width: 100%
"? Además, ¿sugieres usarzoom: 1
en ¶1 de §2?overflow: hidden
concepto de representación que invoca? ¿Y cómo puede ser diferente ahasLayout
?position: absolute
, ¿está bien y formará parte del mismo concepto de renderizado?overflow: hidden
impone algo que difiere de lo que hace Layout?hasLayout
en stackoverflow.com/questions/1794350/what-is-haslayout . Creo que es sinónimo de establecer un nuevo contexto de formato de bloque. Los elementos que hacen esto son esencialmente responsables del diseño de todos sus elementos descendientes. Un resultado de esto es que los elementos que establecen un nuevo contexto de formato de bloque contienen descendientes flotantes y los flotantes fuera del elemento no interactúan con losclear: left|right|both
elementos dentro. (Esto está en la respuesta anterior.)El nuevo estándar, utilizado por Inuit.css y Bourbon , dos marcos CSS / Sass muy utilizados y bien mantenidos:
Notas
Tenga en cuenta que las soluciones claras son esencialmente un truco para lo que los diseños de flexbox ahora pueden proporcionar de una manera mucho más inteligente . Los flotadores CSS se diseñaron originalmente para que el contenido en línea fluyera, como imágenes en un artículo de texto largo, y no para diseños de cuadrícula y similares. Si sus navegadores de destino son compatibles con flexbox , vale la pena investigarlo.
Esto no es compatible con IE7. No deberías apoyar IE7. Hacerlo continúa exponiendo a los usuarios a vulnerabilidades de seguridad no fijadas y dificulta la vida de todos los demás desarrolladores web, ya que reduce la presión sobre los usuarios y las organizaciones para cambiar a los navegadores modernos.
Este clearfix fue anunciado y explicado por Thierry Koblentz en julio de 2012. Elimina el peso innecesario del micro-clearfix 2011 de Nicolas Gallagher . En el proceso, libera un pseudo-elemento para su propio uso. Esto se ha actualizado para usar en
display: block
lugar dedisplay: table
(nuevamente, crédito a Thierry Koblentz).fuente
Recomiendo usar lo siguiente, que está tomado de http://html5boilerplate.com/
fuente
La propiedad de desbordamiento se puede usar para borrar flotadores sin marcas adicionales:
Esto funciona para todos los navegadores, excepto IE6, donde todo lo que necesita hacer es habilitar hasLayout (el zoom es mi método preferido):
http://www.quirksmode.org/css/clearing.html
fuente
overflow:hidden
tiene el efecto de recortar el contenido; tiene el efecto secundario de limpiar el contenedor ;-)Encontré un error en el método oficial CLEARFIX: el DOT no tiene un tamaño de fuente. Y si configura
height = 0
y el primer Elemento en su DOM-Tree tiene la clase "clearfix", siempre tendrá un margen en la parte inferior de la página de 12px :)Tienes que arreglarlo así:
Ahora es parte del diseño YAML ... Solo échale un vistazo, ¡es muy interesante! http://www.yaml.de/en/home.html
fuente
Esta es una solución bastante ordenada:
De http://nicolasgallagher.com/micro-clearfix-hack/
fuente
overflow: hidden
).Clearfix de bootstrap:
fuente
Solo uso: -
Funciona mejor y es compatible con IE8 + :)
fuente
Dada la gran cantidad de respuestas que no iba a publicar. Sin embargo, este método puede ayudar a alguien, ya que me ayudó.
Manténgase alejado de las carrozas siempre que sea posible
Vale la pena mencionar que evito las carrozas como el ébola. Hay muchas razones y no estoy solo; Lea la respuesta de Rikudo sobre qué es un clearfix y verá lo que quiero decir. En sus propias palabras:
...the use of floated elements for layout is getting more and more discouraged with the use of better alternatives...
Existen otras opciones buenas (y a veces mejores) que no sean flotantes. A medida que la tecnología avanza y mejora, flexbox (y otros métodos) serán ampliamente adoptados y los flotadores se convertirán en un mal recuerdo. Tal vez un CSS4?
Mala conducta del flotador y borrado fallido
En primer lugar, a veces, puede pensar que está a salvo de flotadores hasta que se perfora su salvavidas y su flujo html comienza a hundirse:
En el codepen http://codepen.io/omarjuvera/pen/jEXBya a continuación, la práctica de limpiar un flotador con
<div classs="clear"></div>
(u otro elemento) es común pero desaprobada y antisentica .CSS
Sin embargo , justo cuando pensabas que tu flotador es digno de navegar ... ¡boom! A medida que el tamaño de la pantalla se hace cada vez más pequeño, verá comportamientos extraños como en el gráfico a continuación (Mismo http://codepen.io/omarjuvera/pen/jEXBya ):
¿Por qué te debe importar? No estoy seguro de la cifra exacta, pero aproximadamente el 80% (o más) de los dispositivos utilizados son dispositivos móviles con pantallas pequeñas. Las computadoras de escritorio / portátiles ya no son el rey.
Esto no acaba ahí
Este no es el único problema con las carrozas. Hay muchos, pero en este ejemplo, algunos pueden decir
all you have to do is to place your floats in a container
. Pero como puedes ver en el codepen y el gráfico, ese no es el caso. Aparentemente empeoró las cosas:HTML
CSS
¿En cuanto al resultado?
¡Es lo mismo!
Al menos ya sabes, comenzarás una fiesta CSS, invitando a todo tipo de selectores y propiedades a la fiesta; haciendo un desorden más grande de tu CSS que con lo que comenzaste. Solo para arreglar tu flotador.
CSS Clearfix al rescate
Esta pieza simple y muy adaptable de CSS es una belleza y un "salvador":
¡Eso es! Realmente funciona sin romper la semántica y ¿mencioné que funciona? :
De la misma muestra ... HTML
CSS
Ahora ya no necesitamos
<div classs="clear"></div> <!-- Acts as a wall -->
y mantenemos contenta a la policía semántica. Este no es el único beneficio. Este clearfix responde a cualquier tamaño de pantalla sin el uso de@media
su forma más simple. En otras palabras, mantendrá su contenedor de flotador bajo control y evitará inundaciones. Por último, proporciona soporte para navegadores antiguos, todo en un pequeño karate chop =)Aquí está el clearfix nuevamente
fuente
clear
nombre de la clase no funciona es que su atributoclass
es incorrecto. Lo que escribiste esclasss
, con un adicionals
.Siempre floto las secciones principales de mi cuadrícula y aplico
clear: both;
al pie de página. Eso no requiere un div o clase extra.fuente
honestamente; todas las soluciones parecen ser un truco para corregir un error de renderizado ... ¿estoy equivocado?
He encontrado
<br clear="all" />
que es el más fácil, el más simple. ver enclass="clearfix"
todas partes no puede afectar la sensibilidad de alguien que se opone a elementos de marketing extraños, ¿verdad? solo estás pintando el problema en un lienzo diferente.También uso la
display: hidden
solución, que es excelente y no requiere declaraciones de clase adicionales o marcado html ... pero a veces necesitas los elementos para desbordar el contenedor, por ejemplo. bonitas cintas y fajasfuente
overflow: hidden
Creo que quieres decirfuente
He probado todas estas soluciones, se agregará un gran margen al
<html>
elemento automáticamente cuando use el siguiente código:Finalmente, resolví el problema del margen agregando
font-size: 0;
al CSS anterior.fuente
.
, solo usacontent: ""
Con SASS, el clearfix es:
y se usa como:
si quieres el nuevo clearfix:
fuente
Con LESS ( http://lesscss.org/ ), uno puede crear un útil ayudante clearfix:
Y luego úselo con contenedores problemáticos, por ejemplo:
fuente
Usar
overflow:hidden
/auto
y height para ie6 será suficiente si el contenedor flotante tiene un elemento padre.Cualquiera de las #test podría funcionar, para el HTML indicado a continuación para borrar flotantes.
En los casos en que esto se niegue a trabajar con ie6, simplemente flote al padre para borrar el flotador.
Nunca realmente necesité ningún otro tipo de limpieza todavía. Tal vez es la forma en que escribo mi HTML.
fuente
Un nuevo valor de visualización parece al trabajo en una línea.
De la especificación W3: "El elemento genera una caja de contenedor de bloques y presenta su contenido utilizando el diseño de flujo. Siempre establece un nuevo contexto de formato de bloque para sus contenidos".
Información: https://www.w3.org/TR/css-display-3/#valdef-display-flow-root https://www.chromestatus.com/feature/5769454877147136
※ Como se muestra en el enlace anterior, el soporte actualmente es limitado, por lo que el soporte de respaldo como el siguiente puede ser útil: https://github.com/fliptheweb/postcss-flow-root
fuente
También flotaría
#content
, de esa manera ambas columnas contienen flotadores. También porque le permitirá borrar elementos dentro#content
sin borrar la barra lateral.Lo mismo con el contenedor, necesitaría convertirlo en un contexto de formato de bloque para ajustar las dos columnas.
Este artículo menciona algunos desencadenantes que puede usar: contextos de formato de bloque .
fuente
Un clearfix es una forma en que un elemento se borra automáticamente después de sí mismo, por lo que no necesita agregar un marcado adicional.
Normalmente debería hacer algo de la siguiente manera:
Con clearfix, solo necesitas
fuente
¿Por qué tratar de usar css hack para hacer lo que 1 línea de HTML hace el trabajo? ¿Y por qué no utilizar html semántico tu put break para volver a la línea?
Para mí es realmente mejor usar:
Y si no quieres ningún estilo en tu html, solo tienes que usar class para tu descanso y poner
.clear { clear:both; }
tu CSS.Ventaja de esto:
fuente
Suponiendo que esté utilizando esta estructura HTML:
Aquí está el CSS que usaría:
Uso este conjunto todo el tiempo y funciona bien para mí, incluso en IE6.
fuente
A diferencia de otras soluciones claras, aquí hay una abierta sin contenedores
Otras soluciones claras requieren que el elemento flotante esté en un contenedor bien marcado o necesitan un extra, semánticamente vacío
<div>
. Por el contrario, la separación clara de contenido y marcado requiere una solución CSS estricta para este problema.El mero hecho de que uno necesite marcar el final de un flotante, no permite la composición de tipo CSS desatendida .
Si este último es su objetivo, el flotador debe dejarse abierto para cualquier cosa (párrafos, listas ordenadas y no ordenadas, etc.) para envolverlo, hasta que se encuentre un "clearfix". Por ejemplo, el clearfix puede establecerse con un nuevo encabezado.
Es por eso que uso el siguiente clearfix con nuevos encabezados:
Esta solución se utiliza ampliamente en mi sitio web para resolver el problema: el texto al lado de una miniatura flotante es corto y no se respeta el margen superior del siguiente objeto de limpieza.
También evita cualquier intervención manual al generar automáticamente archivos PDF desde el sitio. Aquí hay una página de ejemplo .
fuente
Siempre uso el micro-clearfix :
En Cascade Framework , incluso lo aplico por defecto en elementos de nivel de bloque. En mi opinión, aplicarlo de forma predeterminada en elementos de nivel de bloque proporciona a los elementos de nivel de bloque un comportamiento más intuitivo que su comportamiento tradicional. También me hizo mucho más fácil agregar soporte para navegadores antiguos a Cascade Framework (que es compatible con IE6-8 así como con navegadores modernos).
fuente
También podría poner esto en su CSS:
Y agregue la clase "cb" a su div padre:
No necesitará agregar nada más a su código original ...
fuente
fuente
¿Has probado esto?
No he tenido ningún problema con este método.
fuente
<div/>
es compatible con X (HT) ML, pero no es compatible con HTML , por lo que para los documentos servidos comotext/html
todos los navegadores lo tratarán como etiqueta no cerrada. Lamentablemente, no existen etiquetas de cierre automático paratext/html
documentos, independientemente del tipo de documento .Mi método favorito es crear una clase clearfix en mi documento css / scss como se muestra a continuación
Y luego llamarlo en mi documento html como se muestra a continuación
fuente
Es tan simple que clearfix aclara el problema cuando usamos las propiedades float dentro del elemento div. Si usamos dos elementos div, uno como flotante: left; y otro como flotador: derecho; podemos usar clearfix para el padre de los dos elementos div. Si nos negamos a usar clearfix, los espacios innecesarios se llenan con el contenido a continuación y la estructura del sitio se romperá.
fuente