Eu tenho um elemento div na minha página com sua altura definida como 100%. A altura do corpo também é definida como 100%. A div interna tem um fundo e tudo isso e é diferente do fundo do corpo. Isso funciona para tornar a altura da div 100% da altura da tela do navegador, mas o problema é que tenho conteúdo dentro dessa div que se estende verticalmente além da altura da tela do navegador. Quando rolar para baixo, a div termina no ponto em que você teve que começar a rolar a página, mas o conteúdo excede o limite. Como faço para que a div sempre vá até o fundo para se ajustar ao conteúdo interno?
Aqui está uma simplificação do meu CSS:
body {
height:100%;
background:red;
}
#some_div {
height:100%;
background:black;
}
Depois de rolar a página, a escuridão termina e o conteúdo flui para o fundo vermelho. Não parece importar se eu definir a posição como relativa ou absoluta no #some_div, o problema ocorre de qualquer maneira. O conteúdo dentro do #some_div é praticamente absolutamente posicionado e é gerado dinamicamente a partir de um banco de dados, portanto, sua altura não pode ser conhecida antecipadamente.
Edit: Aqui está uma captura de tela do problema:
overflow: hidden;
,overflow: scroll;
, etc).Respostas:
Aqui está o que você deve fazer no estilo CSS, nos principais
div
E não toque
height
fonte
height: 100%
ahtml, body
ea div recipiente para torná-lo preencher a altura quando não havia conteúdo suficiente embora.display: block;
necessário? Divs já são elementos em nível de bloco.
remova-os. Tente também ajustar a altura da linha. Por exemplo, eu coloqueiline-height: 0
, porque não precisava de texto, apenas para mostrar uma imagem.Defina o
height
paraauto
emin-height
para100%
. Isso deve resolver a maioria dos navegadores.fonte
height
é100%
emin-height
éauto
- eu esperaria que eles fossem intercambiáveis nesse caso, mas parece que não são.Normalmente, esse problema surge quando os elementos filho de uma div principal são flutuados. Aqui está a solução mais recente do problema:
No seu arquivo CSS, escreva a seguinte classe chamada .clearfix junto com o pseudo-seletor : after
Em seguida, no seu HTML, adicione a classe .clearfix ao seu div. Por exemplo:
Deve funcionar sempre. Você pode chamar o nome da classe como .group vez de .clearfix , uma vez que irá tornar o código mais semântico. Observe que, não é necessário adicionar o ponto ou mesmo um espaço no valor do conteúdo entre aspas duplas "". Além disso, estouro: auto; pode resolver o problema, mas causa outros problemas, como mostrar a barra de rolagem, e não é recomendado.
Fonte: Blog de Lisa Catalano e Chris Coyier
fonte
Se você acabou de deixar o
height: 100%
e usedisplay:block;
odiv
terá tanto espaço quanto o conteúdo dentro dodiv
. Dessa forma, todo o texto ficará no fundo preto.fonte
display: block
? Não vejo isso na sua pergunta.float: none;
, useclear:both;
. Ele faz a mesma coisa, mas é mais cross-browser, @RonnieVDPoelEsta pergunta pode ser antiga, mas merece uma atualização. Aqui está outra maneira de fazer isso:
fonte
Tente o seguinte:
O IE6 e versões anteriores não suportam a propriedade min-height.
Acho que o problema é que, quando você diz ao corpo para ter uma altura de 100%, o fundo só pode ser tão alto quanto a altura de uma "janela de visualização" de um navegador (a área de visualização que exclui as barras de ferramentas, barras de status e barras de menus, e as bordas da janela). Se o conteúdo for mais alto que uma viewport, ele excederá a altura dedicada ao plano de fundo.
Essa propriedade de altura mínima no corpo deve forçar o plano de fundo a ter pelo menos a altura de uma janela de visualização se o conteúdo não preencher uma página inteira até a parte inferior, mas também deve permitir que ele cresça para baixo para abranger mais conteúdo interno.
fonte
Pergunta antiga, mas no meu caso, achei que o uso
position:fixed
resolveu para mim. Minha situação pode ter sido um pouco diferente. Eu tinha uma sobreposição semi-transparentediv
com uma animação de carregamento que precisava ser exibida enquanto a página estava carregando. Então, usandoheight:auto / 100%
oumin-height: 100%
ambos cheios da janela, mas não a área de off-screen. O usoposition:fixed
desse rolo de sobreposição com o usuário sempre cobriu a área visível e manteve minha animação de pré-carregamento centralizada na tela.fonte
Basta adicionar essas duas linhas no seu css id #some_div
Depois disso, você receberá o que está procurando!
fonte
Não tenho muita certeza de ter entendido a pergunta, porque esta é uma resposta bastante direta, mas aqui vai ... :)
Você tentou definir a propriedade overflow do contêiner para visível ou automático?
A adição disso deve empurrar o contêiner preto para o tamanho que seu contêiner dinâmico exigir. Prefiro visível ao automático porque o automático parece vir com barras de rolagem ...
fonte
Navegadores modernos suportam a unidade "altura da janela de exibição". Isso expandirá a div para a altura da viewport disponível. Acho mais confiável do que qualquer outra abordagem.
fonte
Até você pode fazer assim
Isso incluirá cada div dinâmico de acordo com o conteúdo. Suponha que, se você tem uma div em comum com a classe, ela aumentará a altura de cada div dinâmica de acordo com o conteúdo
fonte
Você também pode usar
o meu trabalhou com isso
fonte
OVERLAY SEM POSIÇÃO: FIXO
Uma maneira muito legal de descobrir isso em um menu recente foi definir o corpo para:
e defina sua classe de wrapper assim:
Isso significa que você não precisa definir a posição fixa e ainda pode permitir a rolagem. Eu usei isso para sobrepor menus realmente grandes.
fonte
use flex
fonte
Ok, eu tentei algo como isto:
corpo (normal)
Não é a maneira exata de escrevê-lo, mas se você exibir a div principal como uma tabela, ela se expandirá e eu implementei barras de rolagem.
fonte