Digamos que tienes un div
, dale un definido width
y ponle elementos, en mi caso uno img
y otro div
.
La idea es que el contenido del contenedor div
hará que el contenedor se div
estire y sea un fondo para el contenido. Pero cuando hago esto, el contenido se div
contrae para adaptarse a los objetos no flotantes, y los objetos flotantes estarán completamente hacia afuera, o hacia la mitad, hacia la mitad, y no tendrán ninguna relación con el tamaño de lo grande div
.
¿Por qué es esto? ¿Hay algo que me falta y cómo puedo obtener elementos flotantes para estirar el height
contenido div
?
overflow:hidden
Obliga al navegador lo mejor que puede a contener los elementos secundarios de los padres. Es por eso que lo soluciona.overflow: hidden
está aquí: enlace . Y muchas gracias, funcionó para míoverflow: hidden
solo ocultará cualquier parte de un elemento que fluya fuera del contenedor principal. Para mí, esto causó que ciertos fragmentos de texto se volvieran ilegibles.Razón
El problema es que los elementos flotantes están fuera de flujo :
Por lo tanto, no impactan los elementos circundantes como lo haría un elemento en flujo .
Esto se explica en 9.5 Flotadores :
Mostrar fragmento de código
Esto también se especifica en 10.6 Cálculo de alturas y márgenes . Para bloques "normales" ,
Mostrar fragmento de código
Solución de Hacky: despacho
Una forma de resolver el problema es forzar a colocar un elemento en flujo debajo de todos los flotadores. Luego, la altura del padre crecerá para envolver ese elemento (y, por lo tanto, los flotadores también).
Esto se puede lograr usando la
clear
propiedad :Mostrar fragmento de código
Entonces, una solución es agregar un elemento vacío con
clear: both
el último hermano de los flotadoresSin embargo, eso no es semántico. Por lo tanto, es mejor generar un pseudo-elemento al final del padre:
Existen múltiples variantes de este enfoque, por ejemplo, usar la sintaxis de dos puntos desaprobada
:after
para admitir navegadores antiguos, o usar otras pantallas de nivel de bloque comodisplay: table
.Solución: raíces BFC
Hay una excepción al comportamiento problemático definido al principio: si un elemento de bloque establece un Contexto de formato de bloque (es una raíz BFC), entonces también envolverá su contenido flotante.
De acuerdo con las alturas 'Auto' 10.6.7 para raíces de contexto de formato de bloque ,
Mostrar fragmento de código
Además, como se explica en 9.5 Flotadores , las raíces BFC también son útiles debido a lo siguiente:
Mostrar fragmento de código
Un contexto de formato de bloque es establecido por
Bloquear cajas con
overflow
otras quevisible
, p. Ej.hidden
Bloque de contenedores que no son cajas de bloque: cuando
display
se establece eninline-block
,table-cell
otable-caption
.Elementos flotantes: cuando
float
se establece enleft
oright
.Elementos posicionados absolutamente: cuando
position
se establece enabsolute
ofixed
.Tenga en cuenta que pueden tener efectos colaterales no deseados, como recortar contenido desbordado, calcular anchos automáticos con el algoritmo de reducción o ajuste o quedar fuera de flujo. Entonces, el problema es que no es posible tener un elemento de nivel de bloque en flujo con desbordamiento visible que establezca un BFC.
La pantalla L3 aborda estos problemas:
Lamentablemente, todavía no hay soporte para el navegador. Eventualmente podremos usar
fuente
Pon tu flotante
div(s)
endiv
ay CSS, dale queoverflow:hidden;
funcionará bien.
fuente
Recomendación de W3Schools:
poner
overflow: auto
el elemento primario y "coloreará" todo el fondo, incluidos los márgenes de los elementos. También los elementos flotantes permanecerán dentro del borde.http://www.w3schools.com/css/tryit.asp?filename=trycss_layout_clearfix
fuente
No falta nada. Float fue diseñado para el caso en el que desea que una imagen (por ejemplo) se asiente junto a varios párrafos de texto, de modo que el texto fluya alrededor de la imagen. Eso no sucedería si el texto "estirara" el contenedor. Su primer párrafo terminaría, y luego su próximo párrafo comenzaría debajo de la imagen (posiblemente varios cientos de píxeles debajo).
Y es por eso que estás obteniendo el resultado que eres.
fuente
En algunos casos, es decir, cuando (si) solo está usando
float
para que los elementos fluyan en la misma "línea", puede usaren vez de
De lo contrario, usar un
clear
elemento al final funciona, incluso si puede ir en contra de la necesidad de un elemento para hacer lo que debería ser el trabajo de CSS.fuente
Aquí hay un enfoque más moderno:
No más soluciones claras.
ps Uso de desbordamiento: oculto; oculta la sombra de la caja así que ...
fuente
Gracias LSerni lo resolviste por mí.
Lograr esto :
Tienes que hacer esto :
fuente
Como dice Lucas, lo que está describiendo es el comportamiento previsto para la propiedad flotante. Lo que confunde a muchas personas es que el flotador ha sido empujado más allá de su uso original previsto para compensar las deficiencias en el modelo de diseño CSS.
Eche un vistazo a Floatutorial si desea comprender mejor cómo funciona esta propiedad.
fuente
Puede hacerlo fácilmente, primero puede hacer que el div se flexione y aplique justificar el contenido hacia la derecha o hacia la izquierda y su problema está resuelto.
fuente