Eu tenho um layout simples de 2 colunas com um rodapé que limpa a div direita e esquerda na minha marcação. Meu problema é que não consigo fazer com que o rodapé fique na parte inferior da página em todos os navegadores. Funciona se o conteúdo empurra o rodapé para baixo, mas nem sempre é esse o caso.
css
html
footer
sticky-footer
Bill the Lizard
fonte
fonte
Respostas:
Para obter um rodapé fixo:
Tenha um
<div>
com oclass="wrapper"
seu conteúdo.Logo antes do fechamento
</div>
dowrapper
local, o<div class="push"></div>
.Logo após o fechamento
</div>
dowrapper
local o<div class="footer"></div>
.fonte
Use unidades CSS vh!
Provavelmente, a maneira mais óbvia e não-hacky de percorrer um rodapé fixo seria usar as novas unidades de viewport css .
Tomemos, por exemplo, a seguinte marcação simples:
Se o cabeçalho tem 80px de altura e o rodapé 40px de altura, podemos criar nosso rodapé fixo com uma única regra na div de conteúdo:
O que significa: permita que a altura da div de conteúdo seja pelo menos 100% da altura da janela de visualização menos as alturas combinadas do cabeçalho e rodapé.
É isso aí.
Mostrar snippet de código
... e veja como o mesmo código funciona com muito conteúdo na div content:
Mostrar snippet de código
NB:
1) A altura do cabeçalho e rodapé deve ser conhecida
2) As versões antigas do IE (IE8-) e Android (4.4-) não suportam unidades de janela de visualização. ( caniuse )
3) Era uma vez um webkit com problemas nas unidades de janela de visualização dentro de uma regra de cálculo. Isso realmente foi corrigido ( veja aqui ), então não há problema nisso. No entanto, se você quiser evitar o uso do calc por algum motivo, pode contornar isso usando margens negativas e preenchimento com o tamanho da caixa -
Igual a:
Mostrar snippet de código
fonte
Rodapé pegajoso com
display: flex
Solução inspirada no rodapé de Philip Walton .
Explicação
Esta solução é válida apenas para :
É baseado na
flex
exibição , aproveitando aflex-grow
propriedade, que permite que um elemento cresça em altura ou largura (quandoflow-direction
definido como umcolumn
ourow
respectivamente), para ocupar o espaço extra no contêiner.Vamos alavancar também a
vh
unidade, onde1vh
é definida como :Portanto, uma altura
100vh
é uma maneira concisa de dizer a um elemento para abranger toda a altura da janela de exibição.É assim que você estruturaria sua página da web:
Para que o rodapé fique na parte inferior da página, você deseja que o espaço entre o corpo e o rodapé cresça o suficiente para empurrar o rodapé na parte inferior da página.
Portanto, nosso layout se torna:
Implementação
Você pode jogar com ele no JSFiddle .
Peculiaridades do Safari
Esteja ciente de que o Safari possui uma implementação incorreta da
flex-shrink
propriedade , que permite que os itens diminuam mais do que a altura mínima necessária para exibir o conteúdo. Para corrigir esse problema, você precisará definirflex-shrink
explicitamente a propriedade como 0.content
comofooter
no exemplo acima:fonte
.Site-content
elemento da solução de Walton desempenha o mesmo papel quespacer
. É apenas chamado de forma diferente..Site-content
tem um análogo.content
neste marcação .. mas deixa pra lá, eu perguntei para o caso gcedo tem alguma ideia concreta sobre isso, não há necessidade de adivinharVocê pode usar o
position: absolute
seguinte para colocar o rodapé na parte inferior da página, mas verifique se as duas colunas têm o apropriadomargin-bottom
para que nunca sejam obstruídas pelo rodapé.fonte
0px
s em todas as folhas de estilo que vi devem ser justos0
.Aqui está uma solução com jQuery que funciona como um encanto. Ele verifica se a altura da janela é maior que a altura do corpo. Se for, altera a margem superior do rodapé para compensar. Testado no Firefox, Chrome, Safari e Opera.
Se seu rodapé já tiver uma margem superior (de 50 pixels, por exemplo), será necessário alterar a última parte para:
fonte
Defina o CSS para
#footer
:Você precisará adicionar um
padding
oumargin
à parte inferior do seu#sidebar
e,#content
para coincidir com a altura#footer
ou quando eles se sobrepuserem, o#footer
cobrirá.Além disso, se bem me lembro, o IE6 tem um problema com o
bottom: 0
CSS. Pode ser necessário usar uma solução JS para o IE6 (se você se importa com o IE6).fonte
Uma solução semelhante ao @gcedo, mas sem a necessidade de adicionar um conteúdo intermediário para empurrar o rodapé para baixo. Podemos simplesmente adicionar
margin-top:auto
ao rodapé e ele será empurrado para a parte inferior da página, independentemente da altura ou do conteúdo acima.fonte
.content
flex: 1 0 auto;
para torná-lo cultivável e não-shinkable, masmargin-top: auto;
é um bom truque que envolve o rodapé de estilo, e não "não-relacionado", o.content
que é bom. Na verdade, eu me pergunto por que o Flex é necessário nesta abordagem ..display:flex
não vai funcionar, você terá um elemento de bloco fluxo normalmargin:0 auto
elemento central do bloco) MAS não temos nenhuma direção de coluna, portanto, não há margem automático com superior / inferior. O Flexbox possui a direção de linha / coluna;). Essa é a pequena diferença, mas a margem também é usada dentro do flexbox para alinhar o elemento. Assim, mesmo na direção de uma linha, você pode usar a margem superior / inferior automática para alinhar verticalmente. Você pode ler mais aqui: w3.org/TR/css- flexbox-1 / # auto-marginsindex.html:
main.css:
Fonte: https://www.freecodecamp.org/news/how-to-keep-your-footer-where-it-belongs-59c6aa05c59c/
fonte
Às vezes, lutei com isso e sempre achei que a solução com todas essas divs uma dentro da outra era uma solução confusa. Eu apenas brinquei um pouco com isso, e eu pessoalmente descobri que isso funciona e certamente é uma das maneiras mais simples:
O que eu gosto sobre isso é que nenhum HTML extra precisa ser aplicado. Você pode simplesmente adicionar este CSS e depois escrever seu HTML como sempre
fonte
Como a solução Grid ainda não foi apresentada, aqui está, com apenas duas declarações para o elemento pai , se tomarmos o
height: 100%
emargin: 0
como garantido:align-content: space-between
fonte
CSS:
HTML:
Isso deve funcionar quando você procura um rodapé responsivo alinhado na parte inferior da página, que sempre mantém uma margem superior de 80% da altura da janela de exibição.
fonte
Use o posicionamento absoluto e o índice z para criar uma div de rodapé permanente em qualquer resolução, usando as seguintes etapas:
position: absolute; bottom: 0;
e a altura desejadadiv
que agrupe o conteúdo do corpo composition: relative; min-height: 100%;
div
igual à altura mais o preenchimento do rodapéz-index
rodapé maior que o contêinerdiv
se o rodapé estiver cortadoAqui está um exemplo:
fonte
Para esta pergunta, muitas das respostas que eu vi são desajeitadas, difíceis de implementar e ineficientes, então pensei em tentar e criar minha própria solução, que é apenas um pouquinho de css e html
isso funciona definindo a altura do rodapé e, em seguida, usando css calc para calcular a altura mínima que a página pode ter com o rodapé ainda na parte inferior, espero que isso ajude algumas pessoas :)
fonte
Uma solução seria definir a altura mínima para as caixas. Infelizmente, parece que não é bem suportado pelo IE (surpresa).
fonte
Nenhuma dessas soluções css puras funciona corretamente com o redimensionamento dinâmico do conteúdo (pelo menos no firefox e Safari). Por exemplo, se você tiver um plano de fundo definido na div do contêiner, a página e redimensione (adicionando algumas linhas) a tabela dentro da div, o A tabela pode ficar na parte inferior da área estilizada, ou seja, você pode ter metade da tabela em branco sobre o tema preto e metade da tabela em branco completo, porque a cor da fonte e a cor de fundo são brancas. É basicamente impossível de fixar nas páginas do carrinho de compras.
O layout de várias colunas div aninhadas é um truque feio e a div de corpo / contêiner de 100% de altura mínima para colar o rodapé é um truque mais feio.
A única solução sem script que funciona em todos os navegadores que experimentei: uma tabela muito mais simples / mais curta com thead (para cabeçalho) / tfoot (para rodapé) / tbody (td para qualquer número de colunas) e 100% de altura. Mas isso percebeu desvantagens semânticas e de SEO (o pé deve aparecer antes de todo mundo. As funções da ARIA podem ajudar os mecanismos de busca decentes).
fonte
Várias pessoas colocaram a resposta para esse problema simples aqui, mas tenho uma coisa a acrescentar, considerando o quão frustrada fiquei até descobrir o que estava fazendo de errado.
Como mencionado, a maneira mais direta de fazer isso é assim ..
No entanto, a propriedade não mencionada nas mensagens, presumivelmente porque geralmente é o padrão, é a posição: static na tag body. A posição relativa não funcionará!
Meu tema wordpress substituiu a exibição padrão do corpo e me confundiu por um longo tempo desagradável.
fonte
Um tópico antigo que eu conheço, mas se você estiver procurando uma solução responsiva, essa adição ao jQuery ajudará:
Guia completo pode ser encontrado aqui: https://pixeldesigns.co.uk/blog/responsive-jquery-sticky-footer/
fonte
Eu criei uma biblioteca muito simples https://github.com/ravinderpayal/FooterJS
É muito simples de usar. Após incluir a biblioteca, basta chamar esta linha de código.
Os rodapés podem ser alterados dinamicamente, recuperando a função acima com parâmetro / ID diferente.
Nota: - Você não precisa alterar ou adicionar nenhum CSS. A biblioteca é dinâmica, o que implica que, mesmo que a tela seja redimensionada após o carregamento da página, ela redefinirá a posição do rodapé. Eu criei esta biblioteca, porque o CSS resolve o problema por um tempo, mas quando o tamanho da tela muda significativamente, da área de trabalho para o tablet ou vice-versa, eles se sobrepõem ao conteúdo ou não ficam mais visíveis.
Outra solução são as CSS Media Queries, mas você precisa escrever manualmente diferentes estilos CSS para diferentes tamanhos de tela, enquanto essa biblioteca faz seu trabalho automaticamente e é suportada por todos os navegadores básicos de JavaScript.
Edite a solução CSS:
Agora, se a altura da exibição for maior que o tamanho do seu conteúdo, colocaremos o rodapé fixo na parte inferior e, caso contrário, ele aparecerá automaticamente no final da exibição, conforme for necessário rolar para visualizá-lo.
E, parece uma solução melhor que a JavaScript / biblioteca.
fonte
Eu não estava tendo sorte com as soluções sugeridas nesta página antes, mas finalmente este pequeno truque funcionou. Vou incluí-lo como outra solução possível.
fonte
Solução Flexbox
O layout flexível é preferido para alturas naturais de cabeçalho e rodapé. Essa solução flex é testada em navegadores modernos e realmente funciona :) no IE11.
Veja JS Fiddle .
HTML
CSS
fonte
Para mim, a maneira mais legal de exibi-lo (o rodapé) é grudar no fundo, mas não cobrir o conteúdo o tempo todo:
fonte
jQuery CROSS BROWSER PLUGIN PERSONALIZADO - $ .footerBottom ()
Ou use o jQuery como eu e defina a altura do rodapé para
auto
ou parafix
, o que você quiser, funcionará de qualquer maneira. esse plug-in usa seletores jQuery, para que funcione, você precisará incluir a biblioteca jQuery no seu arquivo.Aqui está como você executa o plugin. Importe o jQuery, copie o código deste plugin personalizado do jQuery e importe-o após a importação do jQuery! É muito simples e básico, mas importante.
Quando você faz isso, tudo o que você precisa fazer é executar este código:
não há necessidade de colocá-lo dentro do evento pronto para documento. Vai correr bem como está. Ele recalcula a posição do rodapé quando a página é carregada e quando a janela é redimensionada.
Aqui está o código do plugin que você não precisa entender. Apenas saiba como implementá-lo. Faz o trabalho para você. No entanto, se você quiser saber como ele funciona, basta ler o código. Deixei comentários para você.
fonte
As soluções flex funcionaram para mim na medida em que o rodapé fica grudento, mas, infelizmente, mudar o corpo para usar o layout flexível fez com que alguns layouts de página mudassem, e não para melhor. O que finalmente funcionou para mim foi:
Eu obtive isso da resposta do ctf0 em https://css-tricks.com/couple-takes-sticky-footer/
fonte
fonte
Se você não quiser usar a posição fixa e segui-lo irritantemente no celular, isso parece estar funcionando para mim até agora.
Basta definir o html para
min-height: 100%;
eposition: relative;
,position: absolute; bottom: 0; left: 0;
em seguida, no rodapé. Depois, verifiquei se o rodapé era o último elemento do corpo.Deixe-me saber se isso não funciona para mais ninguém e por quê. Eu sei que esses hacks de estilo tedioso podem se comportar estranhamente em várias circunstâncias em que eu não tinha pensado.
fonte
Tente colocar uma div de contêiner (com estouro: automático) ao redor do conteúdo e da barra lateral.
Se isso não funcionar, você tem capturas de tela ou links de exemplo em que o rodapé não é exibido corretamente?
fonte