Eu tinha a seguinte página (deadlink:) http://www.workingstorage.com/Sample.htm
que tem um rodapé que não consigo sentar na parte inferior da página.
Eu quero que o rodapé
- grude na parte inferior da janela quando a página for curta e a tela não estiver cheia e
- fique no final do documento e desça normalmente quando houver mais de uma tela cheia de conteúdo (em vez de sobrepor o conteúdo).
O CSS é herdado e me confunde; Não consigo alterá-lo corretamente para colocar uma altura mínima no conteúdo ou fazer o rodapé ir para o fundo.
flexbox
.Respostas:
Um método simples é fazer com que o corpo
100%
da sua página, com ummin-height
dos100%
demais. Isso funciona bem se a altura do rodapé não mudar.Dê ao rodapé um margem superior negativa:
fonte
box-sizing: border-box;
para o corpo [e o#container
].Eu desenvolvi um método bastante fácil de colocar o rodapé na parte inferior, mas como os métodos mais comuns, você precisará ajustá-lo para se ajustar à altura do rodapé.
VER DEMO
Método Flexbox:
Este método abaixo usa um "truque" colocando um
::after
pseudo-elemento nobody
e define-o para ter a altura exata do rodapé, para que ele ocupe exatamente o mesmo espaço que o rodapé, portanto, quando o rodapé estiverabsolute
posicionado sobre ele, parece que o rodapé está realmente ocupando espaço e eliminando os efeitos negativos de seu posicionamento absoluto (por exemplo, analisando o conteúdo do corpo)position:absolute
método: (não permite altura dinâmica do rodapé)Método de layout da tabela:
fonte
display: table
display: table-row
display:table-cell
. No entanto, eu achei que precisava adicionarbody {margin-top: 0; padding-top: 0; margin-bottom: 0; padding-bottom: 0;}
para evitar uma barra de rolagem. Você pode atender a isso ajustando o,body:after height
mas estou especificando o meu em rem not px, para que se torne problemático.flexbox
Uma abordagem muito simples que funciona muito bem entre navegadores é a seguinte:
http://matthewjamestaylor.com/blog/keeping-footers-at-the-bottom-of-the-page
fonte
Eu usei isso para colocar meu rodapé no fundo e funcionou para mim:
HTML
Essa é a única modificação que você precisa fazer no HTML; adicione-
div
a à"allButFooter"
classe. Fiz isso com todas as páginas, tão curtas que sabia que o rodapé não grudaria no fundo e também páginas longas o suficiente para que eu já sabia que tinha que rolar. Eu fiz isso, para que eu pudesse ver se funciona corretamente no caso de o conteúdo de uma página ser dinâmico.CSS
A
"allButFooter"
classe tem ummin-height
valor que depende da altura da viewport (100vh
significa 100% da altura da viewport) e da altura do rodapé, que eu já sabia que era40px
.Foi tudo o que fiz e funcionou perfeitamente para mim. Eu não tentei em todos os navegadores, apenas no Firefox, Chrome e Edge, e os resultados foram os que eu queria. O rodapé fica na parte inferior e você não precisa mexer no índice z, na posição ou em outras propriedades. A posição de cada elemento no meu documento era a posição padrão, não a mudei para absoluta ou fixa, nem nada.
Trabalhando com design responsivo
Aqui está algo que eu gostaria de esclarecer. Esta solução, com o mesmo rodapé com 40px de altura, não funcionou como eu esperava quando estava trabalhando em um design responsivo
Twitter-Bootstrap
. Eu tive que modificar o valor que eu estava subtraindo na função:Provavelmente porque
Twitter-Bootstrap
vem com margens e preenchimentos próprios, por isso tive que ajustar esse valor.Espero que isso seja útil para vocês! Pelo menos, é uma solução simples de tentar e não envolve grandes alterações em todo o documento.
fonte
display: none
Obrigado. É bom e simples também.position: fixed; bottom: 0
e este. Essa solução é a melhor porque o rodapé não fica na parte inferior, mas permanece no final da página rolável..footer {max-height: calc(100vh+40px); position: absolute}
. Como também funciona, você deve saber apenas o tamanho do seu corpo.A partir do IE7, você pode simplesmente usar
Veja caniuse para suporte.
fonte
Uma solução simples que eu uso, funciona a partir do IE8 +
Forneça min-height: 100% em html, para que, se o conteúdo for menor, a página parada ocupe a altura total da porta de visualização e o rodapé na parte inferior da página. Quando o conteúdo aumenta, o rodapé muda para baixo com o conteúdo e continua grudado no fundo.
JS fiddle working Demo: http://jsfiddle.net/3L3h64qo/2/
Css
Html
fonte
No entanto, outra solução realmente simples é esta:
jsFiddle
O truque é usar um
display:table
para todo o documento edisplay:table-row
comheight:0
para o rodapé.Como o rodapé é o único filho do corpo que tem uma exibição como
table-row
, ele é renderizado na parte inferior da página.fonte
height: 100%
verdade, ele deve ser 100% quando a taxa de exibição é de 1/1 (quadrado). Quando a janela de visualização aumentar, a altura (paisagem) será superior a 100% e, se mais estreita (retrato), menor que 100%. Portanto, a altura é proporcional à largura da janela. Tentei resolvê-lo com outro invólucro, mas isso não funcionou. Alguém tem uma solução ou pelo menos uma dica ???Uma solução flexível muito simples que não assume alturas fixas ou muda de posição dos elementos.
HTML
CSS
Suporte do navegador
Todos os principais navegadores, exceto IE11 e abaixo.
Certifique-se de usar o Autoprefixer para prefixos apropriados.
Mostrar snippet de código
fonte
Uma coisa a ser cautelosa são os dispositivos móveis, pois eles implementam a ideia da viewport de uma maneira 'incomum':
http://developer.apple.com/library/ios/#documentation/AppleApplications/Reference/SafariWebContent/UsingtheViewport/UsingtheViewport.html#//apple_ref/doc/uid/TP40006509-SW25
Como tal, usando
position: fixed;
(como já vi recomendado em outros lugares) geralmente não é o caminho a percorrer. Claro, isso depende do comportamento exato que você procura.O que eu usei e funcionou bem em computadores e dispositivos móveis é:
com
fonte
Faça isso
Você também pode ler sobre o Flex, suportado por todos os navegadores modernos
Atualização : Eu li sobre o flex e tentei. Funcionou para mim. Espero que faça o mesmo por você. Aqui está como eu implementei. Aqui principal não é o ID, é o div
Aqui você pode ler mais sobre o flex https://css-tricks.com/snippets/css/a-guide-to-flexbox/
Lembre-se de que ele não é suportado por versões mais antigas do IE.
fonte
flex-grow: 1
algo acima do rodapé manterá o rodapé na parte inferior corretamente.Acabei de responder como pergunta semelhante aqui:
Posicione o rodapé na parte inferior da página com o cabeçalho fixo
Sou bastante novo em desenvolvimento web, e sei que isso já foi respondido, mas essa é a maneira mais fácil de encontrar para resolvê-lo e acho que de alguma forma é diferente. Eu queria algo flexível, porque o rodapé do meu aplicativo da web tem uma altura dinâmica, acabei usando o FlexBox e um espaçador.
Estou assumindo um
column
comportamento para o nosso aplicativo, caso você precise adicionar um cabeçalho, herói ou qualquer conteúdo alinhado verticalmente.Você pode jogar aqui https://codepen.io/anon/pen/xmGZQL
fonte
Isso é conhecido como rodapé fixo. Uma pesquisa no google para ele traz muitos resultados. Um rodapé fixo de CSS é o que eu usei com sucesso. Mas tem mais.
Fonte para este código
fonte
Meu método jquery, este coloca o rodapé na parte inferior da página se o conteúdo da página for menor que a altura da janela ou apenas o rodapé após o conteúdo:
Além disso, manter o código em seu próprio gabinete antes de outro código reduzirá o tempo necessário para reposicionar o rodapé.
fonte
Eu mesmo estive investigando esse problema. Eu já vi algumas soluções e cada uma delas teve problemas, geralmente envolvendo alguns números mágicos.
Então, usando as práticas recomendadas de várias fontes, eu vim com esta solução:
http://jsfiddle.net/vfSM3/248/
O que eu queria alcançar especificamente aqui era fazer o conteúdo principal rolar entre o rodapé e o cabeçalho dentro da área verde.
aqui está um css simples:
fonte
Foi assim que resolvi o mesmo problema
fonte
Isso funciona bem
fonte
Basta personalizar a seção de rodapé
fonte
aqui estão meus dois centavos. Em comparação com outras soluções, não é necessário adicionar contêineres extras. Portanto, esta solução é um pouco mais elegante. Abaixo do exemplo de código, explicarei por que isso funciona.
Portanto, a primeira coisa que fazemos é tornar o maior contêiner (html) 100%. A página html é tão grande quanto a própria página. Em seguida, definimos a altura do corpo, que pode ser maior que 100% da tag html, mas deve ser pelo menos tão grande, portanto usamos 100% de altura mínima.
Também tornamos o corpo relativo. Relativo significa que você pode mover o elemento do bloco em relação à sua posição original. Nós não usamos isso aqui, no entanto. Porque parente tem um segundo uso. Qualquer elemento absoluto é absoluto para a raiz (html) ou para o primeiro pai / avô relativo. É isso que queremos, queremos que o rodapé seja absoluto, relativo ao corpo, ou seja, o fundo.
O último passo é definir o rodapé para absoluto e inferior: 0, que o move para a parte inferior do primeiro pai / avô que é relativo (corpo do curso).
Agora ainda temos um problema para corrigir: quando preenchemos a página completa, o conteúdo fica abaixo do rodapé. Por quê? bem, porque o rodapé não está mais dentro do "fluxo html", porque é absoluto. Então, como podemos corrigir isso? Adicionaremos o fundo de preenchimento ao corpo. Isso garante que o corpo seja realmente maior do que o conteúdo.
Espero ter deixado muito claro para vocês.
fonte
Um liner dinâmico usando jQuery
Todos os métodos CSS que encontrei são muito rígidos. Além disso, definir o rodapé como
fixed
não é uma opção se isso não fizer parte do design.Testado em:
Supondo esse layout:
Use a seguinte função jQuery:
O que isso faz é definir o
min-height
para#content
a altura da janela - a altura do rodapé que sempre que pode ser no momento.Como usamos
min-height
, se a#content
altura excede a altura da janela , a função é degradada normalmente e não afeta nada, pois não é necessária.Veja em ação:
Mesmo trecho no JsFiddle
Bônus:
Podemos levar isso adiante e fazer com que essa função se adapte à altura do visualizador dinâmico redimensionada da seguinte forma:
fonte
Você consegue fazer isso
fonte
Basta definir o html, body e as outras linhas, exceto o rodapé, para 100%. por exemplo
o css se torna
fonte
fonte
Que tal:
fonte
Eu usei em meus muitos projetos e nunca tive nenhum problema :)
para sua referência, o código está no snippet
fonte