Tenho a seguinte estrutura:
<body>
<div id="main-wrapper">
<header>
</header>
<nav>
</nav>
<article>
</article>
<footer>
</footer>
</div>
</body>
Eu carrego conteúdo dinamicamente no <article>
usando javascript. Por causa disso, a altura do <article>
bloco pode mudar.
Quero que o <footer>
bloco fique na parte inferior da página quando houver muito conteúdo, ou na parte inferior da janela do navegador quando houver apenas algumas linhas de conteúdo.
No momento, posso fazer um ou outro ... mas não ambos.
Então, alguém sabe como posso fazer isso - conseguir <footer>
que se fixe na parte inferior da página / conteúdo ou na parte inferior da tela, dependendo de qual estiver abaixo.
Respostas:
O rodapé pegajoso de Ryan Fait é muito bom, mas acho que sua estrutura básica está ausente *.
Versão Flexbox
Se você tiver a sorte de poder usar o flexbox sem precisar oferecer suporte a navegadores mais antigos, os rodapés fixos se tornam trivialmente fáceis e oferecem suporte a um rodapé de tamanho dinâmico.
O truque para fazer com que os rodapés fiquem fixos na parte inferior com o flexbox é ter outros elementos no mesmo contêiner flexíveis verticalmente. Tudo o que é necessário é um elemento wrapper de altura total com
CSS:display: flex
e pelo menos um irmão com umflex
valor maior que0
:Exibir trecho de código
Se você não pode usar o flexbox, minha estrutura base de escolha é:
O que não está tão longe de:
O truque para fazer o rodapé aderir é ter o rodapé ancorado no preenchimento inferior do elemento que o contém. Isso requer que a altura do rodapé seja estática, mas descobri que os rodapés normalmente têm uma altura estática.
HTML: CSS:Exibir trecho de código
Com o rodapé ancorado em
CSS:#main-wrapper
, agora você precisa#main-wrapper
ter pelo menos a altura da página, a menos que seus filhos sejam mais longos. Isso é feito criando#main-wrapper
ummin-height
de100%
. Você também deve lembrar que seus pais,html
ebody
precisam ser tão altos quanto a página também.Exibir trecho de código
Claro, você deve estar questionando meu julgamento, já que este código está fazendo com que o rodapé caia da parte inferior da página, mesmo quando não há conteúdo. O último truque é mudar o modelo de caixa utilizado pelo
CSS:#main-wrapper
modo que omin-height
de100%
inclui o100px
preenchimento.Exibir trecho de código
E aí está, um rodapé com sua estrutura HTML original. Apenas certifique-se de que o
footer
'sheight
é igual a#main-wrapper
' spadding-bottom
, e você deve estar configurado.* O motivo pelo qual encontro falhas na estrutura do Fait é porque ele define os elementos
.footer
e.header
em diferentes níveis hierárquicos enquanto adiciona um.push
elemento desnecessário .fonte
#main-wrapper *:first-child { margin-top: 0; }
, caso contrário, a página ficaria muito longa na margem superior do primeiro filho (causando uma barra de rolagem desnecessária em páginas curtas).O rodapé autocolante de Ryan Fait é uma solução simples que usei várias vezes no passado.
HTML básico :
CSS :
Traduzir isso para ser semelhante ao que você já tem resultados com algo neste sentido:
HTML :
CSS:
Só não se esqueça de atualizar o negativo na margem do wrapper para coincidir com a altura do seu rodapé e pressione div. Boa sorte!
fonte
Eu estava tentando resolver esse problema sem adicionar nenhuma marcação adicional, então acabei usando a seguinte solução:
Você tem que saber as alturas do cabeçalho, do nav e do rodapé para poder definir a altura mínima do artigo. Com isso, se o artigo tiver apenas poucas linhas de conteúdo, o rodapé ficará na parte inferior da janela do navegador, caso contrário, ficará abaixo de todo o conteúdo.
Você pode encontrar essa e outras soluções postadas acima aqui: https://css-tricks.com/couple-takes-sticky-footer/
fonte