Digamos que você tenha um div
, dê um definido width
e coloque elementos nele, no meu caso um img
e outro div
.
A ideia é que o conteúdo do contêiner div
faça com que ele div
se estique e seja um pano de fundo para o conteúdo. Mas quando faço isso, o conteúdo div
diminui para se ajustar aos objetos não flutuantes, e os objetos flutuantes ficam totalmente para fora, ou meio para fora, meio para dentro e não têm qualquer influência sobre o tamanho do grande div
.
Por que é isso? Há algo que está faltando e como posso obter itens flutuantes para esticar o height
conteúdo de um contêiner div
?
overflow:hidden
força o navegador da melhor maneira possível para conter os elementos filhos do pai. É por isso que o corrige.overflow: hidden
está aqui: link . E muito obrigado, ele trabalhou para mimoverflow: hidden
apenas ocultará qualquer parte de um elemento que flua para fora do contêiner pai. Para mim, isso fez com que certos pedaços de texto se tornassem ilegíveis.Razão
O problema é que os elementos flutuantes estão fora de fluxo :
Portanto, eles não impactam os elementos circundantes como um elemento em fluxo .
Isso é explicado em 9.5 flutuadores :
Mostrar snippet de código
Isso também é especificado em 10.6 Cálculo de alturas e margens . Para blocos "normais" ,
Mostrar snippet de código
Solução Hacky: autorização
Uma maneira de resolver o problema está forçando algum elemento em fluxo a ser colocado abaixo de todos os flutuadores. Então, a altura do pai aumentará para envolver esse elemento (e, portanto, os flutuadores também).
Isso pode ser alcançado usando a
clear
propriedade :Mostrar snippet de código
Portanto, uma solução é adicionar um elemento vazio
clear: both
como o último irmão dos carros alegóricosNo entanto, isso não é semântico. Então, gere melhor um pseudoelemento no final do pai:
Existem várias variantes dessa abordagem, por exemplo, usar a sintaxe de dois pontos obsoleta
:after
para oferecer suporte a navegadores antigos ou usar outras telas no nível de bloco, comodisplay: table
.Solução: raízes BFC
Há uma exceção ao comportamento problemático definido no início: se um elemento de bloco estabelecer um Contexto de Formatação de Bloco (é uma raiz BFC), ele também envolverá seu conteúdo flutuante.
De acordo com 10.6.7 alturas 'Auto' para raízes de contexto de formatação de bloco ,
Mostrar snippet de código
Além disso, conforme explicado 9.5 flutuadores , as raízes do BFC também são úteis devido ao seguinte:
Mostrar snippet de código
Um contexto de formatação de bloco é estabelecido por
Bloquear caixas com
overflow
outras que não sejamvisible
, por exemplo,hidden
Recipientes de bloco que não são bloqueiam caixas: quando
display
estiver definido parainline-block
,table-cell
outable-caption
.Elementos flutuantes: quando
float
está definido comoleft
ouright
.Elementos absolutamente posicionados: quando
position
está definido comoabsolute
oufixed
.Observe que eles podem ter efeitos colaterais indesejados, como recortar conteúdo excedente, calcular larguras automáticas com o algoritmo de encolher para ajustar ou ficar fora de fluxo. Portanto, o problema é que não é possível ter um elemento no nível do bloco em fluxo com estouro visível que estabelece um BFC.
A tela L3 soluciona esses problemas:
Infelizmente, ainda não há suporte para o navegador. Eventualmente, poderemos usar
fonte
Coloque o seu flutuante
div(s)
em umdiv
e em CSS, poisoverflow:hidden;
ele funcionará bem.
fonte
Recomendação do W3Schools:
coloque o
overflow: auto
elemento pai e "colorirá" todo o plano de fundo, incluindo as margens dos elementos. Os elementos flutuantes também permanecerão dentro da borda.http://www.w3schools.com/css/tryit.asp?filename=trycss_layout_clearfix
fonte
Não falta nada. O Float foi projetado para o caso em que você deseja que uma imagem (por exemplo) fique ao lado de vários parágrafos de texto, para que o texto flua ao redor da imagem. Isso não aconteceria se o texto "esticou" o contêiner. Seu primeiro parágrafo terminaria e, em seguida, seu próximo parágrafo começaria sob a imagem (possivelmente várias centenas de pixels abaixo).
E é por isso que você está obtendo o resultado que é.
fonte
Em alguns casos, ou seja, quando (se) você está apenas usando
float
para que os elementos fluam na mesma "linha", você pode usarao invés de
Caso contrário, o uso de um
clear
elemento no final funcionará, mesmo que ele vá contra a granulação para precisar de um elemento para fazer o que deveria ser um trabalho CSS.fonte
Aqui está uma abordagem mais moderna:
Não há mais correções.
ps Usando estouro: oculto; esconde a sombra da caixa tão ...
fonte
Obrigado LSerni, você resolveu isso para mim.
Para alcançar isto :
Você tem que fazer isso :
fonte
Como Lucas diz, o que você está descrevendo é o comportamento pretendido para a propriedade float. O que confunde muitas pessoas é que o float foi muito além do uso original pretendido para compensar as deficiências no modelo de layout CSS.
Dê uma olhada no Floatutorial se quiser entender melhor como essa propriedade funciona.
fonte
Você pode fazer facilmente com o primeiro, você pode flexionar a div e aplicar o conteúdo justificado à direita ou à esquerda e seu problema está resolvido.
fonte